我已经将实际上是两个不同对象的对象导入到单个变量中:
PS> $object | gm
TypeName: Deserialized.System.Management.Automation.PSCustomObject
...
TypeName: System.Security.Cryptography.X509Certificates.X509Certificate2
...
我只能从第一个对象访问信息。有没有一种方法可以根据TypeName将其分为两个变量?
答案 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" }