Я создаю массив в PowerShell, который не всегда содержит данные (иногда он пуст). Мне нужно проверить, что массив содержит данные, прежде чем пытаться что-либо сделать с объектами массива. Когда я использую следующий код, все работает так, как ожидалось:
$Array = @(“This”,”is”,”a”,”test”)
$Array | ForEach-Object {
If ($Array.Count -ge 1)
{
[string]$A = $_
Write-Host $A
}
}
используя приведенный выше код, я получаю следующий вывод:
This
is
a
test
вышеуказанной проверки .Граф массива каждый раз, когда он обрабатывает объект в массиве (так это может проверить счетчик массива тысячу раз или больше в зависимости от количества объектов в массиве). То, что я хочу сделать, это проверить количество массива только один раз и до того, как он начнет обрабатывать объекты массива. Однако следующий код не обеспечивает надлежащего вывода:
$Array = @(“This”,”is”,”a”,”test”)
If ($Array.Count -ge 1)
{
$Array | ForEach-Object {
{
[string]$A = $_
Write-Host $A
}
}
}
Я получаю следующий вывод, когда я запускаю приведенный выше код:
[string]$A = $_
Write-Host $A
[string]$A = $_
Write-Host $A
[string]$A = $_
Write-Host $A
[string]$A = $_
Write-Host $A
это не Write-Host значение долларов переменная, как и предыдущий код, но вместо этого он печатает фактический код PowerShell сам. Я всего лишь переместить .Граф check так, что он проверяет количество до начала обработки объектов в массиве. Почему я получаю вышеупомянутый вывод, когда я перемещаю проверку количества массивов перед ForEach-Object заявление? Нужно ли проверять количество массивов каждый раз, когда я обрабатываю объект из массив?
спасибо