0

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

获取-ADcomputer -filter * | 选择@{l="计算机名";e={$_.name}} | 获取服务

返回的错误是 '找不到服务名称'@{comptuername=SERVER1}'
我可以在使用时获取数据 | get-service *
但是我试图更好地理解为什么这个特定的命令不起作用。似乎不是输入字符串,而是将“计算机名”作为 ADcomputerobject 传递给 Get-service?

我希望 Get-service 从管道中按属性获取 Computername,并且由于 Get-Service 的 Name 属性不是强制性的,所以上面的命令应该可以工作吗?

4

1 回答 1

1

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

在这种情况下,对象类型 ADcomputerobject 与此无关,因为您可以使用自定义对象进行复制。您还可以从错误消息中获得有关问题的提示(...with service name):

PS> [pscustomobject]@{ComputerName='server1'} | gsv
gsv : Cannot find any service with service name '@{ComputerName=server1}'.
于 2013-06-18T15:23:17.223 回答