2009-10-24 24 views

Odpowiedz

44

Jeśli używasz PowerShell v3, możesz użyć cmdletu Unblock-File.


Część "blokująca" to po prostu alternatywny strumień danych pliku o nazwie "Identyfikator strefy.". Można wyświetlić go w CMD za pomocą przekierowania wejścia (nie ma innego sposobu, aby dostać się do strumienia w CMD, choć):

H:\Downloads> more < test.exe:Zone.Identifier 
[ZoneTransfer] 
ZoneId=3 

można je znaleźć za pomocą dir /r w systemie Windows Vista i nowszych:

2009-10-24 12:18  54.538.056 test.exe 
           24 test.exe:Zone.Identifier:$DATA 

również w CMD można łatwo pozbyć się, że poprzez zastępowanie go (za pomocą przekierowania wyjścia, tym razem):

echo.>myDownloadedFile.exe:Zone.Identifier 

który nie jest dość to samo, co całkowite usunięcie ADS, ale działa tak, że Explorer nie narzeka już więcej.

Wygląda na to, że nie ma natywnego wsparcia dla obsługi ADS z poziomu PowerShell (jak wspomniano na blogu The PowerShell Guy here. Ten artykuł zawiera również informacje, jak uzyskać tę funkcję w PowerShell). Można jednak po prostu wywołać cmd:

cmd /c "echo.>test.exe:Zone.Identifier" 

Działa to również z PowerShell.

Inną opcją byłoby narzędzie Mark Russinovicha streams, które umożliwia sprawdzenie ADS pliku, a także ich usunięcie. Tak więc działa również.

+3

poczułem ból @ Geert, który ten post nie zrobił jasno, że to jest tak proste jak '\\ live.sysinternals.com \ tools \ streams -d myDownloadedFile.exe '(zainspirowany [http://www.hanselman.com/blog/RemovingSecurityFromDownloadedPowerShellScriptsWithAlternativeDataStreams.aspx](Hanselmans summary) –

+3

FYI - Powershell 3 dodaje to w końcu za pomocą polecenia cmdlet Unblock-File - http://technet.microsoft.com/ en-us/library/hh849924.aspx –

+1

Użyj tego, aby opróżnić całą strukturę folderów - dla/F% a w ('dir/r/b/s') do @ echo.>% a: Zone.Identifier: $ DATA –

-2

Czy oznacza to:

set-executionpolicy remotesigned 

To pozwoli na wykonywanie skryptów lokalnych bez nich są podpisane, a remote, jeżeli są one podpisane. Więcej informacji dostępnych here.

+1

Nie do końca Kent. Chcesz zrobić odpowiednik skryptu kliknięcia prawym przyciskiem myszy w eksploratorze i wybranie opcji odblokowania. + 1'ed chociaż jak widzę, ludzie przybywający tutaj potrzebujący dokładnie tamtego –

9

Moduł PoshCode zawiera funkcje Set-DownloadFlag i Remove-DownloadFlag, które działają tak jak w reklamie. :) Właśnie wyciągnąłem ten fragment do jego własnego skryptu wpisze http://poshcode.org/1430 ... to będzie działać również na PowerShell 1, jeśli użyjesz funkcji New-Type zamiast Add-Type (http://poshcode.org/720)

1

pisałem trochę funkcję, która korzysta z interfejsu API Win32 usunąć Zone.Identifier NTFS alternatywny strumień danych, która jest, co używa systemu Windows, aby określić, czy dany plik jest być zablokowanym.

. NET nie ma dostępu do alternatywnych strumieni danych, więc funkcja wykorzystuje technikę zwaną platformą wywołującą w celu wywołania natywnego interfejsu Win32 API.Zaletą tego rozwiązania w porównaniu z niektórymi innymi rozwiązaniami dla PowerShell jest to, że obsługuje potok PowerShell, dzięki czemu można wyprowadzić do niego listę ścieżek plików lub obiektów System.IO.FileInfo. Ta funkcja nie ma żadnych zewnętrznych zależności i faktycznie usuwa alternatywny strumień danych zamiast po prostu usuwać jego zawartość.

http://andyarismendi.blogspot.com/2012/02/unblocking-files-with-powershell.html

5

Oneliner usunąć informarion strefy (inspirowany akceptowanej odpowiedzi) dla wszystkich dzieci (z poprawne cytowanie).

get-childitem -rec | % { cmd /c "echo.>""$($_.FullName)"":Zone.Identifier" } 

Nie ściśle odpowiadam na pytanie, chcę tylko upewnić się, że przy następnym pojawieniu się tego problemu jest już rozwiązanie :).

PS. Pracuje w PS 2.0

+1

Uwaga: nie działa w PS2.0 – user1106405

+1

Server2008 R2 $ host.version.tostring (eq) '2,0' prawda set-ExecutionPolicy 'Bypass' następnie przejść get-ChildItem -rec | % {cmd/c "echo.>" "$ ($ _. FullName)" ": Zone.Identifier"} wykonała zadanie –

3

nowy do publikowania na forach takich jak ten i może to być stary temat, ale tutaj jest to, czego szukasz.

get-item -Path "path to file(s)" -Stream "Zone.Identifier" -ErrorAction "SilentlyContinue" 

Powinny wyświetlić listę plików, które są blokowane.

Unblock-File -Path "Path to blocked file(s)" 

To odblokuje je.

0

będę musiał zmienić odpowiedź Mike'a: to nie będzie działać, jeśli istnieją przestrzenie w $ _ FullName (np jak w "C: \ Program Files")., Więc to musi być:

get-childitem -rec | % { cmd /c "echo.>""$($_.FullName)"":Zone.Identifier" } 
0

Nie widziałem jeszcze żadnej odpowiedzi, która zdaje się używać odpowiednich poleceń cmdlet programu powershell, aby to zrobić.

Tutaj możemy znaleźć DLL w bieżącym folderze, które zawierają zone.identifier:

Get-Item -Path .\*.dll -stream * | where {$_.Stream -eq "Zone.Identifier" } 

Tu zap zaledwie tylko niechcianych strumieni, w przeciwieństwie do niektórych odpowiedzi powyżej, które mogą uszkodzić inne strumienie:

Remove-Item -Path .\*.dll -stream Zone.Identifier 
+1

Usunięcie "pozycji" w serwisie PS3 https://msdn.microsoft.com /powershell/reference/4.0/microsoft.powershell.core/providers/FileSystem-Provider/Remove-Item-for-FileSystem – OzBob

0

Odblokuj plik Polecenie cmdlet programu PowerShell powinno rozwiązać ten problem, odblokowując plik, nawet jeśli nie ma przycisku odblokowania w oknie właściwości pliku.

Polecenie cmdlet Odblokuj plik umożliwia otwieranie plików pobranych z Internetu. Odblokowuje pliki skryptów Windows PowerShell pobrane z Internetu, dzięki czemu można je uruchamiać, nawet jeśli zasady wykonywania Windows PowerShell to RemoteSigned. Domyślnie te pliki są blokowane, aby chronić komputer przed niezaufanymi plikami.

Wystarczy otworzyć okno PowerShell i postępować zgodnie z poniższą składnią. Aby znaleźć więcej informacji na temat składni iść do here

Przykład:

unblock-file -path C:\Downloads\MyFileName.chm 

Unblock file with PowerShell screen shot

Ostrzeżenie: Nie należy odblokować pliki bez zabezpieczeń.

+0

Witam, proszę dodać kilka objaśnień do kodu. – Chaithanya

+0

Cześć @Chaithanya, Mam link do odblokowania pliku i dodałem obraz. jaki rodzaj wyjaśnienia powinienem dodać więcej. Masz na myśli, jak otworzyć okno PowerShell? – Dinch

+0

Witaj, mam zamiar poprosić o dodanie do odpowiedzi jakiegoś kontekstu, jak wyjaśnienie tego, co robi ten kod, i jako takie. Proszę zajrzeć [tutaj] (http://stackoverflow.com/help/how-to-answer), aby uzyskać więcej informacji na temat najlepszych praktyk udzielania odpowiedzi na SO. – Chaithanya

0

Jeśli na serwerze nie ma opcji Powershell> v3 ($ PSVersionTable.PSVersion.Major -ge 3). Następnie użyj starego, dobrego, niezawodnego DOS:

for /f "tokens=*" %f in ('dir /b *.*') do echo.>"%f":Zone.Identifier 
Powiązane problemy