使用 PowerShell 查询 Active Directory 并将数据添加到现有 csv 的新列
Using PowerShell to query Active Directory and add data to new column of existing csv
我有一个 CSV 文件,上面列出了数百个用户名。在 PowerShell 中,我想 运行 Get-ADUser
并在相邻的单元格中输出它们的 DisplayName
。我还想将所有其他信息保留在正确的行中,并确保如果在 AD 中找不到任何用户名,输出不会乱序写入以下 DisplayName
。有人可以帮我解决这个问题吗?我对 PowerShell 比较陌生,对使用它修改 Excel 也很陌生。
为了保密起见,假设我的电子表格如下所示:
这是我目前所拥有的...
$userlist = Get-Content $home\Desktop\names.csv
ForEach ($user in $userlist) {
Get-ADUser $user -Properties DisplayName |
Select-Object Name,DisplayName |
Export-CSV $home\Desktop\new_names.csv -NoTypeInformation
}
如果您有用户的 samaccountname,请使用下面的脚本。
如果您有专有名称,只需注释掉 samaccountname 部分并取消注释专有名称部分。
$userlist = Import-Csv "$home\Desktop\names.csv"
ForEach ($user in $userlist) {
$SamID_User = $user.SamAccountName
# $DN_User = $user.DistinguishedName
$OU_User = $user.OU
#A Search by SamAccountName
$result = Get-ADUser -Filter { samaccountname -eq $SamID_User } -SearchBase $OU_User | # DisplayName property is returned by default by Get-ADUser and hence doesn't require explicit mention
Select-Object Name,DisplayName
$result | Export-CSV "$home\Desktop\new_names.csv" -NoTypeInformation -Append # Added -Append switch; works on PS v3.0 and later; with PS v2.0 -Append switch is not available with Export-Csv; With PS v2.0 you can use Out-File instead
#B Search by DistinguishedName
<#
$result = Get-ADUser -Filter { DistinguishedName -eq $DN_User } -SearchBase $OU_User |
Select-Object Name,DisplayName
$result | Export-CSV "$home\Desktop\new_names.csv" -NoTypeInformation -Append
#>
}
希望对您有所帮助。
Import-CSV $home\Desktop\names.csv |
ForEach-Object {
$samAccountname = ""
$displayname = ""
$samAccountname = $_."last logon"
$machinename = $_.'machine name'
$displayname = (get-aduser $samaccountname -Properties displayname).displayname
$ou = $_.OU
[pscustomobject]@{
machineName=$machinename
displayname=$displayname
OU=$ou
samAccountname=$samAccountname
}
} |
select samAccountname ,machineName,displayname,ou |
Export-CSV new_names.csv -Append -NoTypeInformation
在上面我假设电子表格中的 "Last Logon" 是每个用户的 samaccountname
。采取的步骤:
- 导入原始csv
- 在每个循环中,我们将每一行的每个值分配给一个变量
- 对于我们的新专栏 "displayname",我们使用
get-aduser
cmdlet 以及来自我们的 csv 的 samaccountname 信息
- 创建一个
psobject
来保存来自变量的信息
- 然后我们使用
Select-Object
来 select 电子表格 headers 的顺序,然后再将其传递给 export-csv
以生成我们更新的 csv
我有一个 CSV 文件,上面列出了数百个用户名。在 PowerShell 中,我想 运行 Get-ADUser
并在相邻的单元格中输出它们的 DisplayName
。我还想将所有其他信息保留在正确的行中,并确保如果在 AD 中找不到任何用户名,输出不会乱序写入以下 DisplayName
。有人可以帮我解决这个问题吗?我对 PowerShell 比较陌生,对使用它修改 Excel 也很陌生。
为了保密起见,假设我的电子表格如下所示:
这是我目前所拥有的...
$userlist = Get-Content $home\Desktop\names.csv
ForEach ($user in $userlist) {
Get-ADUser $user -Properties DisplayName |
Select-Object Name,DisplayName |
Export-CSV $home\Desktop\new_names.csv -NoTypeInformation
}
如果您有用户的 samaccountname,请使用下面的脚本。 如果您有专有名称,只需注释掉 samaccountname 部分并取消注释专有名称部分。
$userlist = Import-Csv "$home\Desktop\names.csv"
ForEach ($user in $userlist) {
$SamID_User = $user.SamAccountName
# $DN_User = $user.DistinguishedName
$OU_User = $user.OU
#A Search by SamAccountName
$result = Get-ADUser -Filter { samaccountname -eq $SamID_User } -SearchBase $OU_User | # DisplayName property is returned by default by Get-ADUser and hence doesn't require explicit mention
Select-Object Name,DisplayName
$result | Export-CSV "$home\Desktop\new_names.csv" -NoTypeInformation -Append # Added -Append switch; works on PS v3.0 and later; with PS v2.0 -Append switch is not available with Export-Csv; With PS v2.0 you can use Out-File instead
#B Search by DistinguishedName
<#
$result = Get-ADUser -Filter { DistinguishedName -eq $DN_User } -SearchBase $OU_User |
Select-Object Name,DisplayName
$result | Export-CSV "$home\Desktop\new_names.csv" -NoTypeInformation -Append
#>
}
希望对您有所帮助。
Import-CSV $home\Desktop\names.csv |
ForEach-Object {
$samAccountname = ""
$displayname = ""
$samAccountname = $_."last logon"
$machinename = $_.'machine name'
$displayname = (get-aduser $samaccountname -Properties displayname).displayname
$ou = $_.OU
[pscustomobject]@{
machineName=$machinename
displayname=$displayname
OU=$ou
samAccountname=$samAccountname
}
} |
select samAccountname ,machineName,displayname,ou |
Export-CSV new_names.csv -Append -NoTypeInformation
在上面我假设电子表格中的 "Last Logon" 是每个用户的 samaccountname
。采取的步骤:
- 导入原始csv
- 在每个循环中,我们将每一行的每个值分配给一个变量
- 对于我们的新专栏 "displayname",我们使用
get-aduser
cmdlet 以及来自我们的 csv 的 samaccountname 信息
- 创建一个
psobject
来保存来自变量的信息 - 然后我们使用
Select-Object
来 select 电子表格 headers 的顺序,然后再将其传递给export-csv
以生成我们更新的 csv