使用 samaccountnames 将用户属性(主要是名字和姓氏)导出到 csv 文件
use samaccountnames to export user properties(mainly just first name and lastname) to csv file
我有一个包含一些用户的 samaccount 名称的 CSV 文件。
从这个列表中,我想将这些用户的属性导出到 CSV 文件。
请在 Windows Powershell ISE 中分享最简单的方法。
我已经试过了:
Import-ModuleActiveDirectory
Import-CSV C:\scripts\list.csv | ForEach{Get-ADUser -Identity $samaccountname-Filter*-Properties*|export-csv c:\ADusers.csv
}
谢谢!
如果您想在 ISE 中执行此操作,您可能不会 need/want 为此使用 oneliner。
我建议先导入 CSV,然后 运行 foreach。
$list = Import-CSV -path $filePath
$result = New-Object System.Collections.ArrayList
foreach ($name in $list){
$adUser=Get-ADUser -Identity $name
$result += $adUser
}
从这里开始,您可以开始考虑错误处理等
这将帮助您:
Import-ModuleActiveDirectory
Import-CSV -Path "C:\Scripts\List.csv" | Foreach {
Get-ADUser -Identity $_ -Filter * -Properties *
} | Export-CSV "C:\ADUsers.csv"
您的代码无法正常工作,因为 $samaccountname 是空的且不包含用户名。所以我用自动变量 $_
替换了它
您没有向我们展示 CSV 文件的前几行。
一个正确的 CSV 文件有多个字段和一个 header 行,如下所示:
"AccountName","EmailAddress"
"doe","john.doe@example.com"
"kent","clark.kent@example.com"
如果是这种情况,请执行:
Import-ModuleActiveDirectory
$userProperties = 'GivenName', 'SurName', 'Initials'
Import-Csv -Path "C:\Scripts\List.csv" | ForEach-Object {
$user = Get-ADUser -Filter "SamAccountName -eq '$($_.AccountName)'" -Properties $userProperties -ErrorAction SilentlyContinue
if ($user) {
$user | Select-Object -Property $userProperties
}
} | Export-Csv "C:\ADUsers.csv"
如果您加载的文件只有 SamAccountNames,每个都在新行中列出,那么这不是 CSV 文件,您应该使用:
Import-ModuleActiveDirectory
$userProperties = 'GivenName', 'SurName', 'Initials'
Get-Content -Path "C:\Scripts\List.csv" | ForEach-Object {
$user = Get-ADUser -Filter "SamAccountName -eq '$_'" -Properties $userProperties -ErrorAction SilentlyContinue
if ($user) {
$user | Select-Object -Property $userProperties
}
} | Export-Csv "C:\ADUsers.csv"
如您所见,我在这里没有使用 -Identity
参数,因为如果找不到具有该 SamAccountName 的用户,则会抛出异常。
这样,只有当用户实际存在时才会生成输出。
此外,当您只想返回某些属性时,使用 -Properties *
是一个 糟糕的 想法。
希望对您有所帮助
将每个 SamAccountName 放在列表文件中各占一行。
示例:
user1
user2
user3
将 list.csv 更改为文本文件 (list.txt) 并试试这个:
$username = Get-Content "C:\scripts\list.txt"
ForEach($user in $username){
Get-ADUser -Identity $user | Select GivenName,Surname,Initials | Export-CSV -Path "C:\ADUsers.csv"
}
我有一个包含一些用户的 samaccount 名称的 CSV 文件。
从这个列表中,我想将这些用户的属性导出到 CSV 文件。
请在 Windows Powershell ISE 中分享最简单的方法。
我已经试过了:
Import-ModuleActiveDirectory
Import-CSV C:\scripts\list.csv | ForEach{Get-ADUser -Identity $samaccountname-Filter*-Properties*|export-csv c:\ADusers.csv
}
谢谢!
如果您想在 ISE 中执行此操作,您可能不会 need/want 为此使用 oneliner。
我建议先导入 CSV,然后 运行 foreach。
$list = Import-CSV -path $filePath
$result = New-Object System.Collections.ArrayList
foreach ($name in $list){
$adUser=Get-ADUser -Identity $name
$result += $adUser
}
从这里开始,您可以开始考虑错误处理等
这将帮助您:
Import-ModuleActiveDirectory
Import-CSV -Path "C:\Scripts\List.csv" | Foreach {
Get-ADUser -Identity $_ -Filter * -Properties *
} | Export-CSV "C:\ADUsers.csv"
您的代码无法正常工作,因为 $samaccountname 是空的且不包含用户名。所以我用自动变量 $_
替换了它您没有向我们展示 CSV 文件的前几行。 一个正确的 CSV 文件有多个字段和一个 header 行,如下所示:
"AccountName","EmailAddress" "doe","john.doe@example.com" "kent","clark.kent@example.com"
如果是这种情况,请执行:
Import-ModuleActiveDirectory
$userProperties = 'GivenName', 'SurName', 'Initials'
Import-Csv -Path "C:\Scripts\List.csv" | ForEach-Object {
$user = Get-ADUser -Filter "SamAccountName -eq '$($_.AccountName)'" -Properties $userProperties -ErrorAction SilentlyContinue
if ($user) {
$user | Select-Object -Property $userProperties
}
} | Export-Csv "C:\ADUsers.csv"
如果您加载的文件只有 SamAccountNames,每个都在新行中列出,那么这不是 CSV 文件,您应该使用:
Import-ModuleActiveDirectory
$userProperties = 'GivenName', 'SurName', 'Initials'
Get-Content -Path "C:\Scripts\List.csv" | ForEach-Object {
$user = Get-ADUser -Filter "SamAccountName -eq '$_'" -Properties $userProperties -ErrorAction SilentlyContinue
if ($user) {
$user | Select-Object -Property $userProperties
}
} | Export-Csv "C:\ADUsers.csv"
如您所见,我在这里没有使用 -Identity
参数,因为如果找不到具有该 SamAccountName 的用户,则会抛出异常。
这样,只有当用户实际存在时才会生成输出。
此外,当您只想返回某些属性时,使用 -Properties *
是一个 糟糕的 想法。
希望对您有所帮助
将每个 SamAccountName 放在列表文件中各占一行。
示例:
user1
user2
user3
将 list.csv 更改为文本文件 (list.txt) 并试试这个:
$username = Get-Content "C:\scripts\list.txt"
ForEach($user in $username){
Get-ADUser -Identity $user | Select GivenName,Surname,Initials | Export-CSV -Path "C:\ADUsers.csv"
}