У меня есть сценарий PowerShell, который запускается как часть установщика installshield на машине с Windows 10. Версия Powershell (Major: 5, Minor: 1, Build 17134, Revision 112). Машина разработчика (где все работает нормально) (Major: 5, Minor: 1, Build 15063, Revision 1155)
По сути, сценарий .bat запускает закодированную команду powershell, но она не выполняется, я упростил ее до простого сценария, чтобы показать, о чем я говорю:
Скрипт Powershell:
$text="Write-Output Hello"
$encoded=[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($text))
Write-Output "Trying encoded command:"
powershell -EncodedCommand $encoded
Write-Output "Trying not encoded command:"
powershell $text
Это результат:
Trying encoded command:
Trying not encoded command:
Hello
Я также добавил декодированный оператор для дополнительной проверки:
$decoded = [System.Text.Encoding]::Unicode.GetString([Convert]::FromBase64String($encoded))
Write-Output "Decoded:"
Write-Output $decoded
Выход:
Trying encoded command:
Trying not encoded command:
Hello
Decoded:
Write-Output Hello
Политика выполнения установлена на «Обход», мне просто интересно, есть ли что-то в реестре Windows / настройках / безопасности / групповых политиках / и т. Д. что будет блокировать такие закодированные команды? Почему он работает с обычным текстом, но не в кодировке? Может ли версия Powershell иметь к этому какое-то отношение?
$ErrorActionPreference = 'Stop';
в$text
и повторите попытку. Вы также можете проверить программу просмотра событий, чтобы узнать, работает ли эвристика? - person Maximilian Burszley   schedule 16.07.2018