管道与参数提供的值

时间:2020-04-07 07:17:41

标签: powershell

我有一个简单的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

我收到“ I AM HERE”消息,这意味着$ dnshostname变量为空,但是不是从管道中获取变量吗?

如果运行与以下脚本相同的脚本: ./ myscript.ps1 -dnshostname“ myserver” ,则不会收到“ I AM HERE”消息,这表明它正确地确定了$ dnshostname变量不为空。

我确定我在这里遗漏了一些非常基本的东西。关于为什么通过管道传递的值触发我的IF语句,我是否可以得到一些指导? 谢谢!

0 个答案:

没有答案