获取帐户数据并导出为xml

获取帐户数据并导出为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

我需要将一些属性从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
    $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

谢谢你的解释,剧本很好,我也学到了一些新东西。再次感谢!