Powershell 点符号不选择数据
Powershell dot notation not selecting data
我在让 Powershell 以我期望的方式运行时遇到问题。
我正在尝试使用 get-wmiobject win32_networkconnection
列出当前用户的映射驱动器,这样我就可以遍历这些驱动器。
当我 运行 $var = get-wmiobject win32_networkconnection | select -expand localname
我得到了我所期望的:映射网络连接的驱动器号列表。
然而,当我 运行 $var = (get-wmiobject win32_networkconnection).localname
我什么也得不到。它似乎没有 selecting 属性 正确。
这是有问题的,因为理想情况下,我想遍历所有驱动器,然后 select 每个驱动器的各种属性。相反,似乎我将被迫拼凑一个迭代器,然后一次迭代所有变量(在我看来不是很优雅)。
我对 Powershell 不是很有经验,所以我可能遗漏了什么。但是,根据我的阅读,这应该有效。这是get-wmiobject
的限制吗?
是的,这是 PowerShell 2.0 的限制。
您对 Get-WmiObject
的调用正在返回一个数组。在 PS2 中,您需要将数组通过管道传输到 Select-Object
之类的内容中,或者以其他方式遍历它并引用每个单独的项目。
在 PS3+ 中,您可以使用 $array.PropertyName
,它会为您执行此操作,返回一个属性数组。
您尝试执行的操作仅适用于 PowerShell 3.0 和更新版本。官方文档非常含糊不清:
What's New in Windows PowerShell 3.0
Windows PowerShell Language Enhancements
Windows PowerShell 3.0
includes many features [...] The improvements include
property enumeration, count and length properties on scalar objects,
new redirection operators [...]
此博客 post 更深入一些:New V3 Language Features
而不是 select 属性名称,您可以使用 select -exp propertyName
我在让 Powershell 以我期望的方式运行时遇到问题。
我正在尝试使用 get-wmiobject win32_networkconnection
列出当前用户的映射驱动器,这样我就可以遍历这些驱动器。
当我 运行 $var = get-wmiobject win32_networkconnection | select -expand localname
我得到了我所期望的:映射网络连接的驱动器号列表。
然而,当我 运行 $var = (get-wmiobject win32_networkconnection).localname
我什么也得不到。它似乎没有 selecting 属性 正确。
这是有问题的,因为理想情况下,我想遍历所有驱动器,然后 select 每个驱动器的各种属性。相反,似乎我将被迫拼凑一个迭代器,然后一次迭代所有变量(在我看来不是很优雅)。
我对 Powershell 不是很有经验,所以我可能遗漏了什么。但是,根据我的阅读,这应该有效。这是get-wmiobject
的限制吗?
是的,这是 PowerShell 2.0 的限制。
您对 Get-WmiObject
的调用正在返回一个数组。在 PS2 中,您需要将数组通过管道传输到 Select-Object
之类的内容中,或者以其他方式遍历它并引用每个单独的项目。
在 PS3+ 中,您可以使用 $array.PropertyName
,它会为您执行此操作,返回一个属性数组。
您尝试执行的操作仅适用于 PowerShell 3.0 和更新版本。官方文档非常含糊不清:
What's New in Windows PowerShell 3.0
Windows PowerShell Language Enhancements
Windows PowerShell 3.0 includes many features [...] The improvements include property enumeration, count and length properties on scalar objects, new redirection operators [...]
此博客 post 更深入一些:New V3 Language Features
而不是 select 属性名称,您可以使用 select -exp propertyName