значение, полученное Трубопроводом против Аргумента - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть простой скрипт 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? Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...