从一个对象拆分两个对象

时间:2018-08-01 22:57:58

标签: powershell

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

PS> $object | gm

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

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

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

2 个答案:

答案 0 :(得分:4)

PowerShell支持解构分配 (尽管文档中没有这样称呼):

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

$custObj, $cert = $object

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

否则,在 PowerShell v4 + 中,您可以使用 .Where()收集方法根据条件在 two 中拆分一个集合

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

答案 1 :(得分:2)

根据这个问题,我假设您事先知道类型,但是您不一定知道它们在数组$object中出现的顺序。

下面的代码将从列表中提取每种已知类型的项目:

$customObject = $object | ? { $_.GetType().Name -like "*PSCustomObject" }
$certficate = $object | ? { $_.GetType().Name -like "*X509Certificate2" }