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