在PowerShell中将对象转换为关联数组

时间:2014-10-01 06:40:38

标签: object powershell hashtable associative-array

背景:我以JSON格式获取数据,并且必须使用Set-QADUser(来自Quest ActiveRoles Management Shell)来更新Active Directory中的用户。

只是将从JSON解析的数据提供给cmdlet会导致出现以下错误消息:

  

无法索引类型为System.Collections.Generic.Dictionary`2 + ValueCollection [[System.String,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089],[System.Object, mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]。

我可以像这样迭代对象:

PS C:\scripts> $data.params | ForEach-Object { $_ }

Key               Value
---               -----
manager           CN=smith,OU=Employees,OU=People,OU=Department,OU=...
department        Department
company           Company
homeDirectory     \\\\win7x64gerald.testdomain.com\\jdoe
homeDrive         U:
primaryGroupID    1501
userPrincipalName jdoe@testdomain.com

但Set-QADUser期望数据采用关联数组格式(或Hashtable)。帮助中的示例:

C:\PS>Set-QADUser 'mycompany.com/usersOU/User1' -objectAttributes @{otherTelephone=@('555-34-67','555-34-68')}

我希望能够如上所述循环它并访问Key和Value参数,如下所示:

PS C:\scripts> $data.params | ForEach-Object { $_.Key }

但这只是什么都没有。

$data.params.keys显示所有键,与值相同,但我无法通过附加[0]来获取特定的键,而且我找不到任何get方法。

那么,如何将这样的对象转换为关联数组呢?

2 个答案:

答案 0 :(得分:1)

可能就像使用convertfrom-json一样简单?

答案 1 :(得分:1)

我找到了它:

# Create empty hashtable
$params = @{}
# iterate over every key and add it to the hashtable
$data.params.keys | foreach { $params[$_] = $data.params[$_] }