我正在编写一个PowerShell脚本,它可以使用2个参数 - 计算机名称或序列号 - 并输出有关相应计算机的一些信息。但是,当我从管道传递一个值时,它总是进入错误的参数。
这是我的代码:
Param
(
[Parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$True)]
[String]$ComputerName,
[Parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$True)]
[String]$SerialNumber
)
然后它使用这些值从SCCM中提取信息。
但是,如果我使用以下行来调用脚本:
"<ComputerName>" | .\Get-SerialNumber.ps1 -ComputerName $_
计算机名称放入SerialNumber参数而不是ComputerName参数。
如果我放入
"<SerialNumber>" | .\Get-SerialNumber.ps1 -SerialNumber $_
该值将传递给ComputerName参数。这里发生了什么?他们为什么被倒退?
如果我输入
.\Get-SerialNumber.ps1 -SerialNumber "<SerialNumber>"
或
.\Get-SerialNumber.ps1 -ComptuerName "<ComputerName>"
它工作正常。它只会在值通过管道时搞砸。
为了记录,我尝试重新启动PowerShell会话以确保在我的会话中发生了一些奇怪的事情,甚至在另一台计算机上完全尝试过。它仍然以同样的方式发生。
答案 0 :(得分:1)
你打电话给他们的方式没有意义。如果通过管道传入ComputerName,然后还将-ComputerName
指定为命名参数,当然它会将管道绑定到接受管道输入的唯一其他参数。您是如何期望为同一参数接受两个不同的值?你会怎么用?