Ну, твой сплит ничего не делает. Вы не определили $filename
, но если у вас есть, и у него есть подчеркивание, то $filename.split('_')
вернет две или более строк, в зависимости от того, сколько подчеркиваний было в исходной строке, но вы никогда не получите результат. Я думаю, что реальная проблема здесь в том, что фильтр, который вы применяете к Get-ChildItem
позже в вашей функции.
$file = Get-ChildItem -Path $env:temp -Filter "$fileName*"
, который будет искать файлы, начинающиеся с $fileName
, которые вы определяете в строке 4 как " 12345.zip». Это прямо противоположно тому, что вы хотите искать. Вам нужно переместить звездочку до $fileName
, чтобы она выглядела следующим образом:
$file = Get-ChildItem -Path $env:temp -Filter "*$fileName"
Это вернет все файлы, заканчивающиеся на «12345.zip», которые будут включать такие вещи, как:
myfuzzyhippo12345.zip
learn-to-count-12345.zip
8493830_12345.zip
В основном все, что заканчивается 12345.zip. Также кажется, что у вас сложилось впечатление, что выполнение return $file[0].fullname
или return $null
остановит функцию. Это ошибка Функция выполняется до завершения, если не завершена досрочно чем-то вроде break
команды. Кроме того, все, что явно не перехвачено или перенаправлено, будет передано обратно из функции, поэтому при чтении вашей функции люди, скорее всего, получат вывод вашей строки $filename.split('_')
, а затем, возможно, $null
или $filename[0].fullname
.
* 1022. * Наконец, кажется, что вы пытаетесь найти файл, если не нашли его немного подождать, и повторите попытку, пока
$sleepElapsed
не станет больше, чем
$sleepTime
. То, что вы хотите здесь, это
While
или
Do/While
l oop. Вот что я бы сделал ...
function FileCheck {
Param(
$fileName = '12345.zip',
$SleepTime = 300,
$sleepElapsed = 0,
$sleepInterval = 20
)
Download -ZipFileName $($fileName) -OutputDirectory $env:temp
Do{
Start-Sleep $sleepInterval
$sleepElapsed = $sleepElapsed + $sleepInterval
$file = Get-ChildItem -Path $env:temp -Filter "*$fileName"|Select -First 1
}While(!$file -and $sleepElapsed -le $sleepTime)
$file.FullName
}
Это позволяет вам определять такие вещи, как настройки сна во время выполнения, если вы хотите, или просто оставить по умолчанию то, что вы использовали, то же самое с именем файла. Затем он загружает файл и ищет его, делая паузу между попытками, пока не найдет файл или не истечет время. Затем он возвращает $file.FullName
, который является либо путем к файлу, если он его нашел, либо ничего, если он не нашел файл.
Лично я бы попросил его вернуть объект файла и просто использовать свойство .FullName
, если это все, что я хотел позже. Обычно (не всегда, но обычно) больше информации, возвращаемой функцией, лучше, чем меньше информации. Как, например, если загрузка не удалась и это файл с нулевым байтом? Просто возвращение только пути не говорит вам этого.