首页 > 解决方案 > 从一个对象中拆分两个对象

问题描述

我已经将一个实际上是两个不同对象的对象导入到一个变量中:

PS> $object | gm

TypeName: Deserialized.System.Management.Automation.PSCustomObject
...

TypeName: System.Security.Cryptography.X509Certificates.X509Certificate2
...

我只能从第一个对象访问信息。有没有办法根据 TypeName 将其拆分为两个变量?

标签: powershell

解决方案


PowerShell 支持解构/并行分配,正式称为多重分配

如果您知道collection 中包含的对象的顺序$object

$custObj, $cert = $object # $custObj receives $object[0], $cert the rest.

$custObj将接收包含在 中的第一个对象$object$cert其余的 - 在 2 元素集合的情况下是第二个元素(作为标量;如果集合有更多元素,$cert将接收一个数组( [object[]]))。

否则,在PowerShell v4+中,您可以使用.Where()collection 方法根据条件将集合一分为

$cert, $custObj = $objects.Where(
 { $_ -is [System.Security.Cryptography.X509Certificates.X509Certificate2] },
 'Split'
)

推荐阅读