Powershell 中的 AD 查询将结果合并到 .CSV 文件中
AD query in Powershell combine results in .CSV file
我正在尝试 运行 来自 PowerShell 的脚本以获取来自 2 个不同 OU 的用户。我正在尝试将其导出到 .CSV 文件中。但是,我正在使用的脚本并没有将两个 Ous 合并到一个文件中,我只获得了 1 个 OU 数据。
我正在使用的脚本:
$users = @()
$OU1 = "OU=Standard users,OU=US,DC=x1,DC=contoso,DC=com','OU=Standard users,OU=AS, DC=x1,DC=contoso,DC=com"
$OU2 = "OU=Standard users,OU=US,DC=x1,DC=contoso,DC=com','OU=Standard users,OU=AS, DC=x1,DC=contoso,DC=com"
$users = Get-ADUser -Filter * -Searchbase $OU1 -Properties *|
Select-Object name, userPrincipalName, accountExpires, distinguishedName, physicalDeliveryOfficeName | export-csv -path "c:\users$env:USERNAME\desktop-OU-List.csv"
$users += Get-ADUser -Filter * -SearchBase $OU2 -Properties *|
Select-Object name, userPrincipalName, accountExpires, distinguishedName, physicalDeliveryOfficeName | export-csv -path "c:\users$env:USERNAME\desktop-OU-List.csv"
现在,当我取出导出选项时,我的脚本在 powershell 中工作,但我正在尝试导出它:
$users = @()
$OU1 = "OU=Standard users,OU=US,DC=x1,DC=contoso,DC=com','OU=Standard users,OU=AS, DC=x1,DC=contoso,DC=com"
$OU2 = "OU=Standard users,OU=US,DC=x1,DC=contoso,DC=com','OU=Standard users,OU=AS, DC=x1,DC=contoso,DC=com"
$users = Get-ADUser -SearchBase $OU1
$users += Get-ADUser -SearchBase $OU2
Export-Csv
覆盖现有的输出文件,除非使用参数 -Append
。所以你总是只得到第二个 Get-ADUser
查询的输出。
使用参数 -Append
,您甚至不需要将 Get-ADUser
结果存储到中间数组 $users
,因此脚本需要的内存更少。
$OU1 = "OU=Standard users,OU=US,DC=x1,DC=contoso,DC=com','OU=Standard users,OU=AS, DC=x1,DC=contoso,DC=com"
$OU2 = "OU=Standard users,OU=US,DC=x1,DC=contoso,DC=com','OU=Standard users,OU=AS, DC=x1,DC=contoso,DC=com"
# Create a new, empty file (clear any existing file)
$file = New-Item "c:\users$env:USERNAME\desktop-OU-List.csv" -Force
# Use parameter -Append to add to the existing CSV
Get-ADUser -Filter * -Searchbase $OU1 -Properties *|
Select-Object name, userPrincipalName, accountExpires, distinguishedName, physicalDeliveryOfficeName |
export-csv -path $file.FullName -Append
# Use parameter -Append to add to the existing CSV
Get-ADUser -Filter * -SearchBase $OU2 -Properties *|
Select-Object name, userPrincipalName, accountExpires, distinguishedName, physicalDeliveryOfficeName |
export-csv -path $file.FullName -Append
请注意,为了对称,我为两个 Get-ADUser
调用指定了 -Append
,并使用 New-Item
清除任何先前 运行 的输出。这使代码更易于维护,因为您无需关心第一个 Get-ADUser
调用,当您在将来添加更多查询或删除现有查询时。
另一种方法是将两个 Get-ADUser
调用包装到一个脚本块中,以有效地附加它们的输出流。一个好处是我们可以去掉一些重复的代码。
$OU1 = "OU=Standard users,OU=US,DC=x1,DC=contoso,DC=com','OU=Standard users,OU=AS, DC=x1,DC=contoso,DC=com"
$OU2 = "OU=Standard users,OU=US,DC=x1,DC=contoso,DC=com','OU=Standard users,OU=AS, DC=x1,DC=contoso,DC=com"
# Create a script block to append the output streams of both `Get-ADUser` calls.
& {
Get-ADUser -Filter * -Searchbase $OU1 -Properties *
Get-ADUser -Filter * -SearchBase $OU2 -Properties *
} | Select-Object name, userPrincipalName, accountExpires, distinguishedName, physicalDeliveryOfficeName |
Export-Csv -Path "c:\users$env:USERNAME\desktop-OU-List.csv"
行& {
使用call operator立即执行下面的脚本块。
最后一行结束了脚本块并将其输出(由两个 Get-ADUser
调用的串行组合输出组成)传送到 Select-Object
,然后传送到 Export-Csv
。不需要-Append
,因为我们一次性写完文件。
我正在尝试 运行 来自 PowerShell 的脚本以获取来自 2 个不同 OU 的用户。我正在尝试将其导出到 .CSV 文件中。但是,我正在使用的脚本并没有将两个 Ous 合并到一个文件中,我只获得了 1 个 OU 数据。
我正在使用的脚本:
$users = @()
$OU1 = "OU=Standard users,OU=US,DC=x1,DC=contoso,DC=com','OU=Standard users,OU=AS, DC=x1,DC=contoso,DC=com"
$OU2 = "OU=Standard users,OU=US,DC=x1,DC=contoso,DC=com','OU=Standard users,OU=AS, DC=x1,DC=contoso,DC=com"
$users = Get-ADUser -Filter * -Searchbase $OU1 -Properties *|
Select-Object name, userPrincipalName, accountExpires, distinguishedName, physicalDeliveryOfficeName | export-csv -path "c:\users$env:USERNAME\desktop-OU-List.csv"
$users += Get-ADUser -Filter * -SearchBase $OU2 -Properties *|
Select-Object name, userPrincipalName, accountExpires, distinguishedName, physicalDeliveryOfficeName | export-csv -path "c:\users$env:USERNAME\desktop-OU-List.csv"
现在,当我取出导出选项时,我的脚本在 powershell 中工作,但我正在尝试导出它:
$users = @()
$OU1 = "OU=Standard users,OU=US,DC=x1,DC=contoso,DC=com','OU=Standard users,OU=AS, DC=x1,DC=contoso,DC=com"
$OU2 = "OU=Standard users,OU=US,DC=x1,DC=contoso,DC=com','OU=Standard users,OU=AS, DC=x1,DC=contoso,DC=com"
$users = Get-ADUser -SearchBase $OU1
$users += Get-ADUser -SearchBase $OU2
Export-Csv
覆盖现有的输出文件,除非使用参数 -Append
。所以你总是只得到第二个 Get-ADUser
查询的输出。
使用参数 -Append
,您甚至不需要将 Get-ADUser
结果存储到中间数组 $users
,因此脚本需要的内存更少。
$OU1 = "OU=Standard users,OU=US,DC=x1,DC=contoso,DC=com','OU=Standard users,OU=AS, DC=x1,DC=contoso,DC=com"
$OU2 = "OU=Standard users,OU=US,DC=x1,DC=contoso,DC=com','OU=Standard users,OU=AS, DC=x1,DC=contoso,DC=com"
# Create a new, empty file (clear any existing file)
$file = New-Item "c:\users$env:USERNAME\desktop-OU-List.csv" -Force
# Use parameter -Append to add to the existing CSV
Get-ADUser -Filter * -Searchbase $OU1 -Properties *|
Select-Object name, userPrincipalName, accountExpires, distinguishedName, physicalDeliveryOfficeName |
export-csv -path $file.FullName -Append
# Use parameter -Append to add to the existing CSV
Get-ADUser -Filter * -SearchBase $OU2 -Properties *|
Select-Object name, userPrincipalName, accountExpires, distinguishedName, physicalDeliveryOfficeName |
export-csv -path $file.FullName -Append
请注意,为了对称,我为两个 Get-ADUser
调用指定了 -Append
,并使用 New-Item
清除任何先前 运行 的输出。这使代码更易于维护,因为您无需关心第一个 Get-ADUser
调用,当您在将来添加更多查询或删除现有查询时。
另一种方法是将两个 Get-ADUser
调用包装到一个脚本块中,以有效地附加它们的输出流。一个好处是我们可以去掉一些重复的代码。
$OU1 = "OU=Standard users,OU=US,DC=x1,DC=contoso,DC=com','OU=Standard users,OU=AS, DC=x1,DC=contoso,DC=com"
$OU2 = "OU=Standard users,OU=US,DC=x1,DC=contoso,DC=com','OU=Standard users,OU=AS, DC=x1,DC=contoso,DC=com"
# Create a script block to append the output streams of both `Get-ADUser` calls.
& {
Get-ADUser -Filter * -Searchbase $OU1 -Properties *
Get-ADUser -Filter * -SearchBase $OU2 -Properties *
} | Select-Object name, userPrincipalName, accountExpires, distinguishedName, physicalDeliveryOfficeName |
Export-Csv -Path "c:\users$env:USERNAME\desktop-OU-List.csv"
行& {
使用call operator立即执行下面的脚本块。
最后一行结束了脚本块并将其输出(由两个 Get-ADUser
调用的串行组合输出组成)传送到 Select-Object
,然后传送到 Export-Csv
。不需要-Append
,因为我们一次性写完文件。