Powershell - 使用Get-ADComputer通过属性参数传递

时间:2013-06-18 14:55:14

标签: powershell

我试图理解为什么会失败:

Get-ADcomputer -filter * | select @{l="computername";e={$_.name}} | Get-service

返回的错误是“找不到具有服务名称的服务' @ {comptuername = SERVER1}'
我可以在使用时获取数据获得服务*
但是,我试图更好地理解为什么这个特定的命令不起作用。它似乎不是类型字符串,' computername'作为ADcomputerobject传递给Get-servic?

我希望Get-service能够从管道获取Computername属性,并且由于Get-Service的Name属性不是必需的,上面的命令应该可以正常工作吗?

1 个答案:

答案 0 :(得分:1)

问题是传入的对象绑定了Name参数,而不是ComputerName。尽管ComputerName通过属性名称接受传入对象,但Name参数也接受它,但更重要的是它按值接受传入对象并且优先于属性,因此传入对象始终属于Name参数。

对象类型ADcomputerobject在这种情况下没有任何内容,因为您可以使用customobject进行重新编辑。您还可以从错误消息(...与服务名称)中获得有关问题的提示:

PS> [pscustomobject]@{ComputerName='server1'} | gsv
gsv : Cannot find any service with service name '@{ComputerName=server1}'.