Я пишу сценарий powershell, чтобы сжать каталог файлов и затем отправить его в удаленное местоположение по FTP.Я создаю zip-файл с помощью приложения оболочки.
Проблема, с которой я столкнулся, заключается в том, что команда CopyHere немедленно возвращается, и копирование происходит в другом потоке.Очевидно, что я не могу начать передачу по FTP, пока не будет создан zip-файл.
Как определить, когда создание zip-файла завершено?
Пример кода:
if(test-path($destZipFilePath)) {
remove-item $destZipFilePath;
}
set-content $destZipFilePath("PK" + [char]5 + [char]6 + ("$([char]0)" * 18));
$shellApp = new-object -com shell.application;
$zipFile = $shellApp.Namespace($destZipFilePath);
$zipSource = $shellApp.Namespace($fullDeployDirectory);
$zipFile.CopyHere($zipSource);
############################################################
# CopyHere is called asynchronously #
# I do not know how to determine if it has completed #
# hence this horrible hack #
############################################################
Start-Sleep -m 10000;
############################################################
$zipFile = $null
$zipSource = $null
$shellApp = $null
#Now we FTP the zipped file to the FTP servers
$ftpDest = "{0}/{1}" -f ($ftpAddress, $zipFileName);
$webClient = New-Object System.Net.WebClient;
$webClient.Credentials = New-Object System.Net.NetworkCredential($userName, $password);
$webClient.UploadFile($ftpDest, $$destZipFilePath);