У меня есть простой скрипт Powershell, который я хочу принимать строковые значения через Pipeline / Argument или просто запустить скрипт.
#myscript
[CmdletBinding()]
Param(
[Parameter(ValueFromPipelineByPropertyName,ValueFromPipeline)][string[]]$dnshostname
)
Begin {
If(-Not $dnshostname){
Write-Host "I AM HERE"
$raw = Get-ADComputer -Filter * -Property *
$raw | ForEach {
If (Test-Connection -Delay 15 -ComputerName $_.IPv4Address -Count 1 -ErrorAction SilentlyContinue){
$dnshostname += $_.DNSHostname
}
}
}
}
Process {
...
...
}
Когда я запускаю этот скрипт так: "myserver" | ./myscript.ps1
Я получаю сообщение «Я ЗДЕСЬ», которое означает, что переменная $ dnshostname пустая, но не была ли она передана из конвейера?
Если я запустите тот же сценарий, что и: . / myscript.ps1 -dnshostname "myserver" , я не получаю сообщение "Я ТУТ", которое означает, что оно правильно определило, что переменная $ dnshostname не пуста.
Я уверен, что мне здесь не хватает чего-то очень фундаментального. Могу ли я получить некоторые рекомендации, пожалуйста, почему значение, переданное через конвейер, вызывает мое утверждение IF? Спасибо!