我不是PowerShell的专家,但今天我遇到了这行代码(注意"Foo" | Write-Output
仅用作示例):
Write-Output "Foo"
我想知道它与我的期望是否有任何不同:
php artisan queue:restart
答案 0 :(得分:2)
在效果中,两个语句应该是等效的:
在Write-Output "Foo"
中,"Foo"
隐式绑定到位置参数-InputObject
,它接受类型PSObject[]
,即任何类型的对象数组。 / p>
在"Foo" | Write-Output
中,由于参数-InputObject
被定义为可选地接受管道输入(按值,即整个对象),"Foo"
也绑定到{{1} }}
我假设您选择了-InputObject
作为示例,但是没有什么值得明确使用该cmdlet的理由很简单 - 只需在示例中省略它就会产生相同的结果。
此外, 几个cmdlet,其中两个表单不等效,即Write-Output
被定义为标量(有例外);请考虑以下事项:
-InputObject
1, 2 | Get-Member # reports [System.Int32]
Get-Member -InputObject 1, 2 # reports [System.Object[]]
报告输入数组中每个元素的类型成员。
1, 2 | Get-Member
会报告数组类型本身的成员。
这种行为差异是有意的并且有记录:使用参数(Get-Member -InputObject 1, 2
)允许检查集合类型作为一个整体 ,而使用管道允许检查集合的各个元素的类型。
请注意,即使将集合作为一个整体传递给它们,但是行为中也存在相同的cmdlet,例如-InputObject
;在这种情况下,请始终使用管道。
要确定cmdlet的哪些参数接受管道输入,从而了解将绑定哪个参数管道输入:
要在完整帮助主题的上下文中查看参数:
Export-Csv
;使用Get-Help -Full <cmdlet>
至关重要。-Full
的匹配项,它将匹配接受的参数:
true (
true (ByValue)
true (ByPropertyName)
true (ByValue, ByPropertyName)
订单项,后跟一个布尔值。提取仅列出名称及其别名,数据类型和绑定特征(以Accept pipeline input?
为例):
Rename-Item