我想导出几个多值"字段"来自Microsoft Active Directory。而不是定义所有"数组指针"我想手动自动生成它们。
我已经查过了 Powershell outputting array items when interpolating within double quotes并尝试了几个替代方案,但我总是遇到表达式
$SearchBases ='dummy.com','dummy2.com'
$csv_file_path = "C:\Test\Export.csv"
$properties_select = ''
$properties_multivalue = 'proxyAddresses','showInAddressBook','memberOf'
# go through each multi_value property and automatically generate 8 fields for upto 8 array elements
ForEach($prop in $properties_multivalue) {
for ($i=0; $i -le 8; $i++) {
$properties_select += @{Name=$prop+'_'+$i; Expression={$_.$($prop[$i])}}
}
}
ForEach($SearchBase in $SearchBases) {
Get-ADObject -filter 'objectClass -eq "contact"' -SearchBase $SearchBase -properties $properties_multivalue
|SELECT-Object $properties_select
|Export-Csv -Append -Force -Delimiter ";" -NoClobber -Encoding UTF8 -path $csv_file_path
}
我怀疑我做错了什么
$properties_select += @{Name=$prop+'_'+$i; Expression={$_.$($prop[$i])}}
任何帮助/提示都很有用。
由于 克里斯
答案 0 :(得分:0)
您需要解决两件事:
$properties_multivalue
的结果值将是一个字符串而不是一个哈希表数组,因此将第3行更改为:
$properties_select = @()
第二件事是Expression
脚本块 - 当Select-Object
在第二个循环内执行时,$prop
和$i
将解析为memberOf
和{ {1}}分别是第一个循环中分配给它们的最后两个值。
拥有单个的脚本块"记住"分配时的值,您需要使用8
方法关闭它们:
GetNewClosure()
此外,我认为您需要首先将$properties_select += @{Name=$prop+'_'+$i; Expression={$_.$($prop[$i])}.GetNewClosure()}
内部变量的评估重新排序为:Expression
(即引用$($_.$prop)[$i]
,然后获取值该值的索引$_.memberOf
)