Powershell v2和PowerShell v3对象处理

时间:2015-05-18 17:05:45

标签: powershell powershell-v2.0 powershell-v3.0

当我在powershell v2中创建对象时,我无法访问powershell成员属性,这些属性将与PowerShell V3一起使用。例如如果我在v3中创建下面的对象,

$Services = @();
$item = @{};
$item.Name = "ServiceName";
$item.Action = 2;
$item.ActionTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss";
$obj = New-Object PSObject -Property $item;
$Services = $Services + $obj

我可以访问$ services.Action,它将是2,无论是在PowerShell v2上它都是空白的。

任何帮助?

感谢

2 个答案:

答案 0 :(得分:3)

这实际上是因为您将对象包装在数组中。

在v2中,要获取对象数组的所有Action属性,您可以执行以下操作:

$Services | ForEach-Object { $_.Action }
# or
$Services | Select-Object -ExpandProperty Action

在PowerShell v3中,不再需要这样做:

$Services.Action

将自动执行相同的操作。

New V3 Language Features

此外,如果您刚刚完成$obj.Action,它也可以在v2中工作(仅针对那个对象)。

答案 1 :(得分:0)

根据您是要列出所有操作还是仅列出特定索引,您可以使用:

$Services | Select -ExpandProperty Action

或(在第一次服务的情况下):

$Services[0].Action