问题
如果使用管道或参数传递相同的输出,则调用Where-Object
cmdlet 会返回不同的输出:PSObject
-InputObject
- 使用管道时,应用条件。
- 使用
-InputObject
参数时,条件被忽略。
问题
为什么使用-InputObject
参数时条件不适用?
MWE
考虑以下目录:
PS C:\> Get-ChildItem -Path "C:\tmp\mwe"
Directory: C:\tmp\mwe
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 07/07/2021 15:51 0 a.txt
-a---- 07/07/2021 15:54 0 b.csv
-a---- 07/07/2021 15:53 0 c.log
使用管道
当管道Get-ChildItem
传输到Where-Object
时,条件被正确应用并且文本文件被排除在输出之外。
PS C:\> Get-ChildItem -Path "C:\tmp\mwe" | Where-Object -Property "Name" -NotMatch -Value "\.txt"
Directory: C:\tmp\mwe
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 07/07/2021 15:54 0 b.csv
-a---- 07/07/2021 15:53 0 c.log
使用-InputObject
参数
使用该-InputObject
参数时,不应用条件并且不从输出中排除文本文件。
PS C:\> Where-Object -InputObject (Get-ChildItem -Path "C:\tmp\mwe") -Property "Name" -NotMatch -Value "\.txt"
Directory: C:\tmp\mwe
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 07/07/2021 15:51 0 a.txt
-a---- 07/07/2021 15:54 0 b.csv
-a---- 07/07/2021 15:53 0 c.log