Get-ADUser - 未找到数据时为 CSV 文件输出一个空行
Get-ADUser - output a blank line fo CSV file when no data is found
我(从各种在线资源)拼凑了一个脚本,可以 return 从 CSV 文件中获取有关 AD 用户的数据。它可以清楚地标记何时未找到用户,但也许对我来说同样重要的是一种在输入 CSV 文件也有空白时向 CSV 文件输出空白行的方法。这将在 Excel 中节省很多时间,以确保所有空白行彼此对应(以及随后找到用户数据的位置)。一对一比较是目标。
这是我的...
$ImportCSV = "C:\Users\x\Desktop\testCSV_in.csv"
$Names = Import-Csv -Path $ImportCSV
$Results = foreach ($Name in $Names) {
$filter = $Name.samAccountName
$User = Get-ADUser -Filter "SamAccountName -like '$filter'" -Properties Samaccountname, Givenname, Surname, EmailAddress, Name
#blank lines input CSV
if ( $User.SamAccountName -eq "" ) {
# please help
}
# found user
if ( $User ) {
$User |
Select-Object -Property Samaccountname, Givenname, Surname, EmailAddress, Name
}
# not found user
else {
[pscustomobject]@{
SamAccountName = 'MISSING ACCOUNT'
}
}
}
$Results | Export-Csv -Path "C:\Users\x\Desktop\testCSV_out.csv" -NoTypeInformation -Encoding UTF8
我能为 $User.SamAccountName -eq ""
想到的所有可能组合只是 return 返回一个 CSV 文件,该文件没有反映我故意引入的差距(模拟真实用例)。
我敢肯定,只需要一行或两行代码。谢谢
如果您想要规范化的导出,您需要一个规范化的对象,这意味着,所有行的 CSV 的所有列都必须存在,即使它们是 $null。试试这个代码,看看它是否有效:
$ImportCSV = "C:\Users\x\Desktop\testCSV_in.csv"
$Names = Import-Csv -Path $ImportCSV
$Results = foreach ($Name in $Names)
{
$filter = $Name.samAccountName
$hashFilter=@{
Properties='Samaccountname', 'Givenname', 'Surname', 'EmailAddress', 'Name'
Filter="SamAccountName -like '$filter'"
}
$User = Get-ADUser @hashFilter
if(-not $user)
{
$user=@{samAccountName='User Not Found on AD'}
}
if(-not $filter)
{
$user=@{samAccountName='User Not Found on CSV'}
}
[pscustomobject]@{
Samaccountname=$User.samAccountName
Givenname=$User.GivenName
Surname=$User.SurName
EmailAddress=$User.EmailAddress
Name=$User.Name
}
}
$Results | Export-Csv -Path "C:\Users\x\Desktop\testCSV_out.csv" -NoTypeInformation -Encoding UTF8
编辑:Import-Csv
,与ConvertFrom-Csv
相同,将跳过空行。必须至少填充一列。看到第4行和第9行被跳过了,但是第11行没有:
我(从各种在线资源)拼凑了一个脚本,可以 return 从 CSV 文件中获取有关 AD 用户的数据。它可以清楚地标记何时未找到用户,但也许对我来说同样重要的是一种在输入 CSV 文件也有空白时向 CSV 文件输出空白行的方法。这将在 Excel 中节省很多时间,以确保所有空白行彼此对应(以及随后找到用户数据的位置)。一对一比较是目标。
这是我的...
$ImportCSV = "C:\Users\x\Desktop\testCSV_in.csv"
$Names = Import-Csv -Path $ImportCSV
$Results = foreach ($Name in $Names) {
$filter = $Name.samAccountName
$User = Get-ADUser -Filter "SamAccountName -like '$filter'" -Properties Samaccountname, Givenname, Surname, EmailAddress, Name
#blank lines input CSV
if ( $User.SamAccountName -eq "" ) {
# please help
}
# found user
if ( $User ) {
$User |
Select-Object -Property Samaccountname, Givenname, Surname, EmailAddress, Name
}
# not found user
else {
[pscustomobject]@{
SamAccountName = 'MISSING ACCOUNT'
}
}
}
$Results | Export-Csv -Path "C:\Users\x\Desktop\testCSV_out.csv" -NoTypeInformation -Encoding UTF8
我能为 $User.SamAccountName -eq ""
想到的所有可能组合只是 return 返回一个 CSV 文件,该文件没有反映我故意引入的差距(模拟真实用例)。
我敢肯定,只需要一行或两行代码。谢谢
如果您想要规范化的导出,您需要一个规范化的对象,这意味着,所有行的 CSV 的所有列都必须存在,即使它们是 $null。试试这个代码,看看它是否有效:
$ImportCSV = "C:\Users\x\Desktop\testCSV_in.csv"
$Names = Import-Csv -Path $ImportCSV
$Results = foreach ($Name in $Names)
{
$filter = $Name.samAccountName
$hashFilter=@{
Properties='Samaccountname', 'Givenname', 'Surname', 'EmailAddress', 'Name'
Filter="SamAccountName -like '$filter'"
}
$User = Get-ADUser @hashFilter
if(-not $user)
{
$user=@{samAccountName='User Not Found on AD'}
}
if(-not $filter)
{
$user=@{samAccountName='User Not Found on CSV'}
}
[pscustomobject]@{
Samaccountname=$User.samAccountName
Givenname=$User.GivenName
Surname=$User.SurName
EmailAddress=$User.EmailAddress
Name=$User.Name
}
}
$Results | Export-Csv -Path "C:\Users\x\Desktop\testCSV_out.csv" -NoTypeInformation -Encoding UTF8
编辑:Import-Csv
,与ConvertFrom-Csv
相同,将跳过空行。必须至少填充一列。看到第4行和第9行被跳过了,但是第11行没有: