Powershell点符号不选择数据

时间:2015-07-09 15:55:43

标签: powershell powershell-v2.0

我在让Powershell按照我期待的方式行事时遇到了问题。

我尝试使用get-wmiobject win32_networkconnection列出当前用户的映射驱动器,因此我可以遍历驱动器。

当我运行$var = get-wmiobject win32_networkconnection | select -expand localname时,我得到了我期望的结果:映射网络连接的驱动器号列表。

然而,当我跑$var = (get-wmiobject win32_networkconnection).localname时,我什么都没得到。它似乎没有正确选择属性。

这是有问题的,因为理想情况下,我想遍历所有驱动器,然后为每个驱动器选择各种属性。相反,我似乎被迫将迭代器整合在一起,然后一次迭代所有变量(在我看来不是很优雅)。

我对Powershell没有超级经验,所以我可能会遗漏一些东西。但是,根据我的阅读,这应该是有效的。这是get-wmiobject的限制吗?

3 个答案:

答案 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