我有一个简单的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语句,我是否可以得到一些指导? 谢谢!