【问题标题】:Powershell: AD array export auto-generate "pointer"Powershell:AD 数组导出自动生成“指针”
【发布时间】:2018-06-10 18:43:08
【问题描述】:

我想从 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])}}

任何帮助/提示都是有用的。

谢谢 克里斯

【问题讨论】:

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


    【解决方案1】:

    你需要解决的两件事:

    $properties_multivalue 的结果值将是一个字符串,而不是哈希表数组,因此将第 3 行更改为:

    $properties_select = @()
    

    第二件事是 Expression 脚本块 - 当 Select-Object 在第二个循环内执行时,$prop$i 将分别解析为 memberOf8,最后两个值是在第一个循环中分配给它们。

    要让各个脚本块“记住”赋值时的值,您需要使用 GetNewClosure() 方法将它们关闭:

    $properties_select += @{Name=$prop+'_'+$i; Expression={$_.$($prop[$i])}.GetNewClosure()}
    

    此外,我认为您需要将Expression 中的变量评估重新排序为:$($_.$prop)[$i](即首先引用$_.memberOf,然后获取该值的索引$i 处的值)

    【讨论】:

    • 首先感谢您的快速回复。关于 $properties_multivalue = @() 我想你的意思是 $properties_select,因为 $properties_select 在第 3 行,并且当前有一个关于 GetNewClosure() 的空字符串:感谢您的修复 - 我永远不会想到它。关于表达式,我按照建议更改了表达式 $($_.$prop)[$i] 但我仍然对 expor 有一个挑战,涉及 ,'showInAddressBook','memberOf','postOfficeBox','postalAddress', 'otherTelephone' 似乎,这些字段是多值但没有索引。
    • @Christian 正确,更新了提到$properties_select 的答案。您能否更详细地描述您对这些附加属性的“挑战”?
    • 目前我得到以下输出,例如memberOf: memberOf1|memberof2|memberOf3|MemberOf4|.... C|N|=|T|.... 它将 DN 划分为单个字符因此我的最佳猜测多值但如果我使用 $properties_select += @{Name 则没有索引="$道具"; Expression={$($_.$prop) -join ";"}.GetNewClosure()} 相反,我收到错误消息“您必须在 '-join' 运算符之后提供值表达式。”
    • 另一个问题是由其他原因引起的,因此我将此问题标记为已解决感谢@Matthias 的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多