Подтвердить что ты не робот

Разблокировать файл с помощью PowerShell?

Я пытаюсь разблокировать файл PowerShell в Win2K8 R2.

Есть ли указатель на синтаксис?

4b9b3361

Ответ 1

Если вы используете PowerShell v3, вы можете использовать командлет Unblock-File.


"Блокирующая" часть - это просто альтернативный поток данных файла, называемый "Zone.Identifier". Вы можете отобразить его в CMD, используя перенаправление ввода (однако, нет другого способа добраться до потока в CMD):

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

Их можно найти с помощью dir/r в Windows Vista и более поздних версиях:

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

Также в CMD вы можете легко избавиться от этого, перезаписав его (используя перенаправление вывода, на этот раз):

echo.>myDownloadedFile.exe:Zone.Identifier

что не совсем то же самое, что полностью удалить ADS, но работает в том, что Explorer больше не жалуется.

По-видимому, не существует встроенной поддержки обработки ADS из PowerShell (как упоминается в блоге The PowerShell Guy здесь. В этой статье также есть информация о том, как получить эту функциональность в PowerShell). Вы могли бы просто вызвать cmd:

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

Это работает и с PowerShell.

Другим вариантом может быть утилита streams Mark Russinovich, которая позволяет вам проверять файл ADS, а также удалять их. Так

streams -d myDownloadedFile.exe

также работает.

Ответ 2

Модуль PoshCode включает в себя функции Set-DownloadFlag и Remove-DownloadFlag, которые работают как рекламируемые.:) Я только что вытащил этот кусок из своего собственного вклада script http://poshcode.org/1430... он тоже будет работать на PowerShell 1, если вы используете функцию New-Type вместо Add-Type (http://poshcode.org/720)

Ответ 3

Oneliner для удаления информации о зоне (вдохновленной принятым ответом) для всех детей (с правильным цитированием).

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

Не строго ответьте на вопрос, просто хочу убедиться, что когда я придумаю эту проблему, есть решение уже:).

PS. Работает в PS 2.0

Ответ 4

new для публикации на форумах, как это, и это может быть старая тема, но вот что вы ищете.

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

Это должно содержать список только заблокированных файлов.

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

Это разблокирует их.

Ответ 6

Я написал небольшую функцию, которая использует Win32 API для удаления альтернативного потока данных Zone.Identifier NTFS, который используется Windows для определения того, должен ли файл быть заблокирован.

.NET не имеет доступа к альтернативным потокам данных, поэтому функция использует метод, называемый вызовом платформы, для вызова собственного API Win32. Преимущество этого в некоторых других решениях для PowerShell заключается в том, что он поддерживает конвейер PowerShell, поэтому вы можете передать список путей файла или объектов System.IO.FileInfo к функции. Функция также не имеет внешних зависимостей и фактически удаляет альтернативный поток данных, а не просто удаляет ее содержимое.

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

Ответ 7

Мне нужно изменить ответ Майка: это не сработает, если в $_ есть пробелы. FullName (например, как в "C:\Program Files" ), поэтому он должен быть:

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

Ответ 8

Я еще не видел ответа, который, как представляется, использует соответствующие командлеты powershell для этого.

Здесь мы можем найти DLL файлы в текущей папке, содержащей zone.identifier:

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

Здесь мы ограничиваем только нежелательные потоки, в отличие от некоторых ответов выше, которые могут повредить другие потоки:

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

Ответ 9

Если вы используете PowerShell 3.0 или более позднюю версию, командлет PowerShell Unblock-file должен решить эту проблему при разблокировке файла, даже если у вас нет кнопки разблокирования в окне свойств файла.

Командлет Unblock-File позволяет открывать файлы, загруженные из Интернета. Он разблокирует файлы сценариев Windows PowerShell, загруженные из Интернета, поэтому вы можете запускать их, даже если политика выполнения Windows PowerShell - это RemoteSigned. По умолчанию эти файлы блокируются для защиты компьютера от ненадежных файлов.

Просто откройте окно powerShell и следуйте ниже синтаксису. Подробнее о синтаксисе см. Здесь.

Пример:

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

Разблокировать файл с помощью экрана PowerShell

Предупреждение. Не разблокируйте незащищенные файлы.

Ответ 10

Если на сервере нет Powershell > v3 ($ PSVersionTable.PSVersion.Major -ge 3). Затем используйте хороший старый надежный DOS:

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

Ответ 11

Чтобы разблокировать папку и ее подпапку рекурсивно (> = PowerShell v3), вы можете использовать команду Get-ChildItem (gci):

gci "C:\Temp\" -recurse | Unblock-File

где C:\Temp - начальная папка.

Ответ 12

Вы имеете в виду это:

set-executionpolicy remotesigned

Это позволит вам выполнять локальные скрипты без их подписания и удаленные, если они будут подписаны. Дополнительная информация доступна здесь.