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

Powershell-使用Get-ADComputer传递属性参数,powershell,Powershell,我正试图理解这一失败的原因: Get-ADcomputer -filter * | select @{l="computername";e={$_.name}} | Get-service Get ADcomputer-filter*|选择@{l=“computername”e={$\uu.name}}|获取服务 返回的错误为“找不到服务名为“@{comptuername=SERVER1}”的服务 使用|获取服务* 然而,我试图更好地理解为什么这个特定的命令不起作用。似乎不是字符串类型,“com

我正试图理解这一失败的原因:

Get-ADcomputer -filter * | select @{l="computername";e={$_.name}} | Get-service Get ADcomputer-filter*|选择@{l=“computername”e={$\uu.name}}|获取服务 返回的错误为“找不到服务名为“@{comptuername=SERVER1}”的服务
使用|获取服务*
然而,我试图更好地理解为什么这个特定的命令不起作用。似乎不是字符串类型,“computername”被传递为获取servic as ADcomputerobject


我希望Get service通过管道中的属性获取Computername,因为Get service的Name属性不是必需的,所以上面的命令应该可以工作吗

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

在本例中,对象类型ADcomputerobject与此无关,因为您可以使用customobject重新编程。您还可以从错误消息(…with servicename)中获得有关问题的提示:

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