Я использую службу Windows (Hudson), которая, в свою очередь, порождает процесс PowerShell для запуска моих пользовательских команд PowerShell. Часть моего сценария - распаковать файл с помощью CopyHere. Когда я запускаю этот скрипт локально, я вижу диалоговое окно прогресса, когда файлы извлекаются и копируются. Однако, когда он запускается под службой, он зависает в том месте, где в противном случае могло бы появиться диалоговое окно.
Вот распакованная часть моего сценария.
# Extract the contents of a zip file to a folder
function Extract-Zip {
param([string]$zipFilePath, [string]$destination)
if(test-path($zipFilePath)) {
$shellApplication = new-object -com shell.application
$zipFile = get-item $zipFilePath
$zipFolder = $shellApplication.NameSpace($zipFile.fullname)
$destinationFile = get-item $destination
$destinationFolder = $shellApplication.NameSpace($destinationFile.fullname)
$destinationFolder.CopyHere($zipFolder.Items())
}
}
Я подозреваю, что, поскольку он работает в процессе обслуживания, который происходит без головы (без взаимодействия с рабочим столом), он как-то застрял при попытке отобразить диалоговое окно.
Есть ли способ обойти это?