PowerShell管道输入转错参数

时间:2017-06-16 18:05:05

标签: powershell parameters

我正在编写一个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会话以确保在我的会话中发生了一些奇怪的事情,甚至在另一台计算机上完全尝试过。它仍然以同样的方式发生。

1 个答案:

答案 0 :(得分:1)

你打电话给他们的方式没有意义。如果通过管道传入ComputerName,然后还将-ComputerName指定为命名参数,当然它会将管道绑定到接受管道输入的唯一其他参数。您是如何期望为同一参数接受两个不同的值?你会怎么用?