Powershell:AD数组导出自动生成"指针"

时间:2018-06-10 18:43:08

标签: powershell exchange-server export-to-csv multivalue

我想导出几个多值"字段"来自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])}}

任何帮助/提示都很有用。

由于 克里斯

1 个答案:

答案 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