#powershell #active-directory
Вопрос:
У меня есть простой скрипт, который работает, берет список идентификаторов пользователей и выводит CSV с их идентификатором, включенным True / False, и их именем. Я пытаюсь понять, как я могу включить в него тест, в котором, если пользователь не найден на основе идентификатора во входном файле, мой вывод будет включать «Пользователь [идентификатор] удален». или что-то подобное.
Я играл, но я не уверен, что мне придется изменить свой план вывода, чтобы включить что-то подобное. Вот что у меня работает, за вычетом проверки, если ничего не найдено, напишите сообщение.
Get-Content $ENV:USERPROFILEdesktoptestusers.txt | ForEach {
Get-ADUser -Filter "SamAccountName -eq '$_'" -Properties SamAccountName,Enabled,Name |
Select SamAccountName,Enabled,Name
} | Export-CSV -path $ENV:USERPROFILEdesktopoutput.csv -NoTypeInformation
Ответ №1:
Если я правильно понимаю, вы хотите, чтобы пользователи Get-ADUser
не могли найти как ошибку и в выходном csv.
В этом случае просто попробуйте заставить пользователя проглотить сообщения об ошибках и использовать if{..} else {..}
конструкцию, в которой в обоих случаях вы выводите объекты с одинаковыми свойствами:
Get-Content "$env:USERPROFILEdesktoptestusers.txt" | Where-Object { $_ -match 'S' } | ForEach-Object {
$user = Get-ADUser -Filter "SamAccountName -eq '$_'" -ErrorAction SilentlyContinue
if ($user) {
# output the properties you need in the csv
$user | Select-Object SamAccountName, Enabled, Name
}
else {
# user does not exist; output a similar object with the error
[PsCustomObject]@{
SamAccountName = "User '$_' does not exist"
Enabled = $null
Name = $null
}
}
} | Export-CSV -path "$env:USERPROFILEdesktopoutput.csv" -NoTypeInformation
Комментарии:
1. Да, вот и все. Я даже не думал о вызове пользовательского объекта для хранения фиктивных данных для не найденного пользователя (честно говоря, я не занимался PS, может быть, десять лет?). Спасибо!
Ответ №2:
Это отобразит предупреждение для тех пользователей, которых не удалось найти.
Примечание -Properties SamAccountName,Enabled,Name
. В этом случае не требуется, 3 свойства являются свойствами командлета по умолчанию.
$dom = (Get-ADRootDSE).defaultNamingContext
Get-Content $ENV:USERPROFILEdesktoptestusers.txt | ForEach-Object {
if([string]::IsNullOrWhiteSpace($_)){
continue # go to next iteration if this element is just white space
}
$usr = Get-ADUser -Filter "SamAccountName -eq '$_'" | Select SamAccountName,Enabled,Name
if(-not $usr){
Write-Warning "$_ could not be found on $dom"
continue
}
$usr
} | Export-CSV -path $ENV:USERPROFILEdesktopoutput.csv -NoTypeInformation