获取帐户数据并导出为xml
我需要将一些属性从active directory用户帐户导出到包含Displayname、电子邮件、officephone、mobile、office和department的xml。我有这个powershell代码获取帐户数据并导出为xml,xml,powershell,active-directory,append,export-to-xml,Xml,Powershell,Active Directory,Append,Export To Xml,我需要将一些属性从active directory用户帐户导出到包含Displayname、电子邮件、officephone、mobile、office和department的xml。我有这个powershell代码 foreach ($User in (get-AdUser -filter * -SearchBase "OU=Path,DC=Domain,DC=Local" -Property *)){ $DisplayName = $User.DisplayName $Ema
foreach ($User in (get-AdUser -filter * -SearchBase "OU=Path,DC=Domain,DC=Local" -Property *)){
$DisplayName = $User.DisplayName
$EmailAddress = $User.EmailAddress
$OfficePhone = $User.OfficePhone
$MobilePhone = $User.MobilePhone
$Office = $User.Office
$Department = $User.Department
$Prop=[ordered]@{
"DisplayName" = $DisplayName
'EmailAddress' = $EmailAddress
'OfficePhone' = $OfficePhone
'MobilePhone' = $MobilePhone
'Office' = $Office
'Department' = $Department
}
$obj = New-Object -TypeName PSObject -Property $Prop
$xml += $obj | Export-Clixml W:\skripts\OutFile.xml
}
但是xml文件中的结果只包含一个用户,即最后一个用户。我不知道我哪里做错了
问候
尼克拉斯
}如果要在for-for循环中管道化结果,则应执行以下操作:
foreach ($User in (get-AdUser -filter * -SearchBase "OU=Path,DC=Domain,DC=Local" -Property *)){
$DisplayName = $User.DisplayName
$EmailAddress = $User.EmailAddress
$OfficePhone = $User.OfficePhone
$MobilePhone = $User.MobilePhone
$Office = $User.Office
$Department = $User.Department
$Prop=[ordered]@{
"DisplayName" = $DisplayName
'EmailAddress' = $EmailAddress
'OfficePhone' = $OfficePhone
'MobilePhone' = $MobilePhone
'Office' = $Office
'Department' = $Department
}
$xml += New-Object -TypeName PSObject -Property $Prop
}
$xml | Export-Clixml W:\skripts\OutFile.xml
原始脚本的问题是,在foreach循环中有导出Clixml。除此之外,你不应该这样做:
$xml += New-Object -TypeName PSObject -Property $Prop
如果希望以后使用存储在阵列中的这些对象,这会更快:
$xml =
foreach ($User in (get-AdUser -filter * -SearchBase "OU=Path,DC=Domain,DC=Local" -Property *)){
$DisplayName = $User.DisplayName
$EmailAddress = $User.EmailAddress
$OfficePhone = $User.OfficePhone
$MobilePhone = $User.MobilePhone
$Office = $User.Office
$Department = $User.Department
$Prop=[ordered]@{
"DisplayName" = $DisplayName
'EmailAddress' = $EmailAddress
'OfficePhone' = $OfficePhone
'MobilePhone' = $MobilePhone
'Office' = $Office
'Department' = $Department
}
New-Object -TypeName PSObject -Property $Prop
}
$xml | Export-Clixml W:\skripts\OutFile.xml
如果您只需要导出文件,那么实际上根本不需要$xml变量。只需将整个foreach循环包装在一个子表达式中,并将其直接导入export cmdlet:
$(foreach ($User in (get-AdUser -filter * -SearchBase "OU=Path,DC=Domain,DC=Local" -Property *)){
$DisplayName = $User.DisplayName
$EmailAddress = $User.EmailAddress
$OfficePhone = $User.OfficePhone
$MobilePhone = $User.MobilePhone
$Office = $User.Office
$Department = $User.Department
$Prop=[ordered]@{
"DisplayName" = $DisplayName
'EmailAddress' = $EmailAddress
'OfficePhone' = $OfficePhone
'MobilePhone' = $MobilePhone
'Office' = $Office
'Department' = $Department
}
New-Object -TypeName PSObject -Property $Prop
}) | Export-Clixml W:\skripts\OutFile.xml
如果您不更改任何属性名称,那么整个过程都可以替换为:
$props = 'DisplayName','EmailAddress','OfficePhone','MobilePhone','Office','Department'
get-AdUser -filter * -SearchBase "OU=Path,DC=Domain,DC=Local" -Property $props |
select $props | Export-Clixml W:\skripts\OutFile.xml
谢谢你的解释,剧本很好,我也学到了一些新东西。再次感谢!