Powershell点符号未选择数据Windows PowerShell 3.0中的新增功能

问题描述 投票:2回答:3

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

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

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

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

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

我对Powershell并不熟悉,所以可能会有一些我不知道的事情。但是,从我所读到的,这应该是有效的。这是get-wmiobject的限制吗?

powershell powershell-v2.0
3个回答
5
投票

您尝试做的只适用于PowerShell 3.0及更高版本。官方文件很模糊:

What's New in Windows PowerShell 3.0

Windows PowerShell Language Enhancements

Windows PowerShell 3.0包含许多功能[...]改进包括属性枚举,标量对象的计数和长度属性,新的重定向运算符[...]

这篇博文更深入:New V3 Language Features


3
投票

是的,这是PowerShell 2.0的限制。

你对Get-WmiObject的召唤正在返回一个阵列。在PS2中,您需要将数组管道化为类似Select-Object或以其他方式迭代它并引用每个单独的项目。

在PS3 +中,您可以使用$array.PropertyName并为您执行此操作,返回一组属性。


0
投票

而不是选择属性Name,您可以使用select -exp属性Name

© www.soinside.com 2019 - 2024. All rights reserved.