Я новичок в Powershell, и я уже столкнулся с довольно неприятной проблемой, которая, вероятно, связана с моей неопытностью. Google оказался полезным в дальнейшем.
Контекст:
Я выполняю сценарий Powershell на сервере Azure Windows через настраиваемые расширения. Сценарий выполняет серию последовательных шагов, каждый шаг превращается в функцию. Функции вызываются одна за другой. Одна из функций скачивает большой sh (да нет такого слова) ZIP-файл. Следующая функция затем пытается разархивировать содержимое файла в каталог, но постоянно терпит неудачу с ошибкой «файл не существует», что означает, что заархивированный файл, к которому шаг пытается получить доступ, не существует. Это неверно, потому что предыдущий шаг загрузки файла действительно загружает заархивированный файл, и я могу доказать это с помощью команды Test-Path
. Это почти как если бы Powershell СЛИШКОМ БЫСТРЫЙ (если есть) и не ждет, пока шаг загрузки файла полностью завершится sh перед выполнением функции распаковки.
Причина, по которой я говорю, что функция кажется слишком быстрой потому что, если я включаю команду Start-Sleep
в режим сна в течение 20 секунд после инструкции загрузки файла, функция распаковки работает нормально, поскольку она может найти загруженный заархивированный файл.
Очевидная проблема с командой Start-Sleep
это то, что, если мой zip-файл biggi sh загружается больше секунды ... бум, снова к проблеме.
Вопрос: ЕСТЬ ЛИ СПОСОБ, КОТОРЫЙ Я МОГУ СКАЗАТЬ POWERSHELL ПОДДЕРЖАТЬ ФУНКЦИЮ, КОТОРАЯ ЗАГРУЖАЕТ ФАЙЛ, ПОЛНОСТЬЮ ЗАВЕРШЕНА ПЕРЕД ВЫПОЛНЕНИЕМ СЛЕДУЮЩЕЙ ФУНКЦИИ?
Вот пример того, как выглядит мой скрипт :
function DoSomething {
param (
#some params
)
#do something...
}
function Download-File {
param (
#some params
)
#FILE DOWNLOAD FUNCTION THAT DOWNLOADS A BIGGISH ZIP FILE
#......................I am using Azure CLI to download the zipped file from BLOB storage
az storage blob download --account-name $storageAccountName --container-name $storageContainerName --name $fullyQualifiedFileName --file .\$fileName --auth-mode login;
}
function Unzip-File {
param (
#some params
)
#ATTEMPT TO UNZIP FILE
}
function DoSomethingElse {
param (
#some params
)
#do something...
}
DoSomething;
Download-File;
Unzip-File; #This guy seems too quick, eager to access the zipped file downloaded in the preceeding step...whilst the preceeding step is not done downloading
DoSomethingElse;
#PLEASE HELP :(