2つのパラメータ(コンピュータ名またはシリアル番号)を取り、対応するコンピュータに関する情報を出力できるPowerShellスクリプトを作成しています。しかし、パイプラインから値を渡すと、常に間違ったパラメータに入ります。PowerShellのパイプライン入力が間違ったパラメータになる
は、ここに私のコードです:
Param
(
[Parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$True)]
[String]$ComputerName,
[Parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$True)]
[String]$SerialNumber
)
そして、それはSCCMから情報を引き出すために、これらの値を使用しています。
しかし、私は、スクリプトを呼び出すには、次の行を使用する場合:
"<ComputerName>" | .\Get-SerialNumber.ps1 -ComputerName $_
コンピュータ名ではなく、ComputerNameパラメーターののserialNumberパラメータに入れます。私は
"<SerialNumber>" | .\Get-SerialNumber.ps1 -SerialNumber $_
に置く場合
値は、ComputerNameパラメーターに渡されます。ここで何が起こっているのですか?なぜ彼らは後方に渡されていますか?
私は
.\Get-SerialNumber.ps1 -SerialNumber "<SerialNumber>"
または
.\Get-SerialNumber.ps1 -ComptuerName "<ComputerName>"
に入力した場合、それは正常に動作します。値がパイプラインを通過するときにのみねじれます。
私はPowerShellセッションを再開しようとしましたが、私のセッションで変なことが起こっていないことを確認し、別のコンピュータで試してみました。それでも同じように起こります。
@briantistこれはリンクされた質問の複製ではありません。私はちょうどその質問/答えを見て、私の質問はその一部として答えられませんでした。この質問は、パイプラインが行う基本的なレベルを示しています。これはより高度なレベルのパイプライン使用でした。 – Randy
私は同意しません。あなたの質問には、リンクされた複製が提供する基本的なパイプライン使用法の誤解が示されていました。あなたは高度な使い方ではなく、何か無効なことをしようとしていました。 – briantist
@briantistはい、これは誤解であり、これはこのサイトの目的の大部分です。しかし、私の誤解は、提供されたリンクでは決して記述されていません。私はその質問とその答えを読んだ後、私が何をしようとしていたのか、これ以上の理解はできませんでした。一方、DIDの下の答えに対するコメントは、この特定の概念の理解に役立ち、私の質問に対する実際の答えを私に提供しました。 – Randy