Я создаю массив в 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
Он не записывает-записывает значение переменной $ A, как это делал предыдущий код, но вместо этого печатает сам код PowerShell. Все, что я сделал, это пошевелил .Граф чека , так что он проверяет счетчик до начала обработки объектов в массиве. Почему я получаю вышеприведенный вывод при перемещении проверки количества массивов перед оператором ForEach-Object ? Нужно ли проверять количество массивов каждый раз, когда я обрабатываю объект из массива?
Спасибо