我遇到了让Powershell按照我期望的方式行事的问题。
我正在尝试使用get-wmiobject win32_networkconnection
列出当前用户的映射驱动器,因此我可以遍历驱动器。
当我运行$var = get-wmiobject win32_networkconnection | select -expand localname
时,我得到了我所期望的:映射网络连接的驱动器号列表。
然而,当我运行$var = (get-wmiobject win32_networkconnection).localname
时,我什么都没得到。它似乎没有正确选择属性。
这是有问题的,因为理想情况下,我想遍历所有驱动器,然后为每个驱动器选择各种属性。相反,似乎我将被迫将迭代器整合在一起,然后一次迭代所有变量(在我看来不是很优雅)。
我对Powershell并不熟悉,所以可能会有一些我不知道的事情。但是,从我所读到的,这应该是有效的。这是get-wmiobject
的限制吗?
您尝试做的只适用于PowerShell 3.0及更高版本。官方文件很模糊:
What's New in Windows PowerShell 3.0
Windows PowerShell Language Enhancements
Windows PowerShell 3.0包含许多功能[...]改进包括属性枚举,标量对象的计数和长度属性,新的重定向运算符[...]
这篇博文更深入:New V3 Language Features
是的,这是PowerShell 2.0的限制。
你对Get-WmiObject
的召唤正在返回一个阵列。在PS2中,您需要将数组管道化为类似Select-Object
或以其他方式迭代它并引用每个单独的项目。
在PS3 +中,您可以使用$array.PropertyName
并为您执行此操作,返回一组属性。
而不是选择属性Name,您可以使用select -exp属性Name