Лучший отвечающий
Сортировка

Вопрос
-
Доброго дня.
Сегодня задался скриптом, который вытаскивает данные -пользователей из csv и на их основе, предоставляет необходимую информацию. Но, столкнулся с тем, что если пользователь не найден, например был удалён или не верно указан в файле, то в отчёт выгруженного файла эта информация не попадает. В итоге, из 3000 записей в консоли PS пробегает более сотни, а может и больше ошибок о ненайденном пользователе. Вопрос в том, как сделать так, что бы эта информация писалась в файл или писалась в отдельный файлик с этими ненайденными пользователями?
8 апреля 2020 г. 12:40
Ответы
-
если бы был скрипт можно было бы говорить детально, а так вариантов традиционно вагон:
# Вариант 1 $ErrorActionPreferences = "SilentlyContinue" $user = Get-AdUser "userThatDoesNotExists" if ($user){ Write-Host "User exists" } else { Write-Host "User does not exists" } # Вариант 2 $ErrorActionPreferences = "Stop" Try { $user = Get-AdUser "userThatDoesNotExists" Write-Host "User exists" } Catch { Write-Host "User does not exists" }
The opinion expressed by me is not an official position of Microsoft
- Изменено Vector BCOModerator 8 апреля 2020 г. 13:13
- Помечено в качестве ответа Cloomger_Tasher 9 апреля 2020 г. 8:00
8 апреля 2020 г. 13:12Модератор -
если бы был скрипт можно было бы говорить детально, а так вариантов традиционно вагон:
# Вариант 1 $ErrorActionPreferences = "SilentlyContinue" $user = Get-AdUser "userThatDoesNotExists" if ($user){ Write-Host "User exists" } else { Write-Host "User does not exists" } # Вариант 2 $ErrorActionPreferences = "Stop" Try { $user = Get-AdUser "userThatDoesNotExists" Write-Host "User exists" } Catch { Write-Host "User does not exists" }
The opinion expressed by me is not an official position of Microsoft
Вот сам скрипт:
import-csv C:\BD\UserProp.csv | ForEach-Object {Get-ADUser -Identity $_.SamAccountName -properties *} | Select-Object SamAccountName,name,CannotChangePassword,PasswordNeverExpires | ft > c:\bd\users.csv
$FUsers = @() $NFUsers = @() $ErrorActionPreferences = 'Stop' Import-CSV C:\BD\UserProp.csv | ForEach-Object { try { $SamAccountName = $_.SamAccountName # Если пользователь существует то он добавится в массив $FUsers в противном случае появится ошибка и скрипт вывалится в Catch $FUsers += Get-ADUser -Identity $SamAccountName -properties * | Select-Object SamAccountName,name,CannotChangePassword,PasswordNeverExpires } Catch { # Тут будут добавляться пользюки которых ненашло $NFUsers += $SamAccountName # Когда команда вываливается в Catch $_ содержит уже не обьект из foreach, а ошибку с которой скрипт вывалился Write-Host "Get-AdUser command failed. Error: $_" } } # Конструкция FT > file.csv это дикий костыль так как Format-Table (FT) должен быть последним командлетом в пайплайне # Если нужен CSV, то используется командлет Export-CSV $FUsers | Export-CSV c:\bd\Success_users.csv # Если нужно вывести неструктурированные данные в файл, то можно юзать Out-File $NFUsers | Out-File c:\bd\Failed_users.txt
Это одна из возможных реализаций (описана в первом ответе как вариант 2)
Практики ради можете переписать тоже самое под вариант 1
ПС скрипт от команды отличается тем что его просто читать, команды вынесены на разные строки и вложенность обозначается отсупами (3 пробела или таб как правило)
The opinion expressed by me is not an official position of Microsoft
- Изменено Vector BCOModerator 9 апреля 2020 г. 6:29
- Помечено в качестве ответа Cloomger_Tasher 9 апреля 2020 г. 7:59
8 апреля 2020 г. 22:30Модератор -
Спасибо, скрипт отработал, но в файле Failed, ничего нет. Он пустой :(
А в файле Success, русский текст стал в виде ???????
1 если вы этого еще не сделали, то одновите PoSh хотябы до 5 версии
2 посмотрите справку по export-csv, найдите описание параметра -Encoding
3 FailedUsers - мое упущение. Сейчас поправлю скрипт в предыдущем ответе
The opinion expressed by me is not an official position of Microsoft
- Помечено в качестве ответа Cloomger_Tasher 9 апреля 2020 г. 8:00
9 апреля 2020 г. 6:24Модератор
Все ответы
-
если бы был скрипт можно было бы говорить детально, а так вариантов традиционно вагон:
# Вариант 1 $ErrorActionPreferences = "SilentlyContinue" $user = Get-AdUser "userThatDoesNotExists" if ($user){ Write-Host "User exists" } else { Write-Host "User does not exists" } # Вариант 2 $ErrorActionPreferences = "Stop" Try { $user = Get-AdUser "userThatDoesNotExists" Write-Host "User exists" } Catch { Write-Host "User does not exists" }
The opinion expressed by me is not an official position of Microsoft
- Изменено Vector BCOModerator 8 апреля 2020 г. 13:13
- Помечено в качестве ответа Cloomger_Tasher 9 апреля 2020 г. 8:00
8 апреля 2020 г. 13:12Модератор -
если бы был скрипт можно было бы говорить детально, а так вариантов традиционно вагон:
# Вариант 1 $ErrorActionPreferences = "SilentlyContinue" $user = Get-AdUser "userThatDoesNotExists" if ($user){ Write-Host "User exists" } else { Write-Host "User does not exists" } # Вариант 2 $ErrorActionPreferences = "Stop" Try { $user = Get-AdUser "userThatDoesNotExists" Write-Host "User exists" } Catch { Write-Host "User does not exists" }
The opinion expressed by me is not an official position of Microsoft
Вот сам скрипт:
import-csv C:\BD\UserProp.csv | ForEach-Object {Get-ADUser -Identity $_.SamAccountName -properties *} | Select-Object SamAccountName,name,CannotChangePassword,PasswordNeverExpires | ft > c:\bd\users.csv
8 апреля 2020 г. 18:47 -
если бы был скрипт можно было бы говорить детально, а так вариантов традиционно вагон:
# Вариант 1 $ErrorActionPreferences = "SilentlyContinue" $user = Get-AdUser "userThatDoesNotExists" if ($user){ Write-Host "User exists" } else { Write-Host "User does not exists" } # Вариант 2 $ErrorActionPreferences = "Stop" Try { $user = Get-AdUser "userThatDoesNotExists" Write-Host "User exists" } Catch { Write-Host "User does not exists" }
The opinion expressed by me is not an official position of Microsoft
Вот сам скрипт:
import-csv C:\BD\UserProp.csv | ForEach-Object {Get-ADUser -Identity $_.SamAccountName -properties *} | Select-Object SamAccountName,name,CannotChangePassword,PasswordNeverExpires | ft > c:\bd\users.csv
$FUsers = @() $NFUsers = @() $ErrorActionPreferences = 'Stop' Import-CSV C:\BD\UserProp.csv | ForEach-Object { try { $SamAccountName = $_.SamAccountName # Если пользователь существует то он добавится в массив $FUsers в противном случае появится ошибка и скрипт вывалится в Catch $FUsers += Get-ADUser -Identity $SamAccountName -properties * | Select-Object SamAccountName,name,CannotChangePassword,PasswordNeverExpires } Catch { # Тут будут добавляться пользюки которых ненашло $NFUsers += $SamAccountName # Когда команда вываливается в Catch $_ содержит уже не обьект из foreach, а ошибку с которой скрипт вывалился Write-Host "Get-AdUser command failed. Error: $_" } } # Конструкция FT > file.csv это дикий костыль так как Format-Table (FT) должен быть последним командлетом в пайплайне # Если нужен CSV, то используется командлет Export-CSV $FUsers | Export-CSV c:\bd\Success_users.csv # Если нужно вывести неструктурированные данные в файл, то можно юзать Out-File $NFUsers | Out-File c:\bd\Failed_users.txt
Это одна из возможных реализаций (описана в первом ответе как вариант 2)
Практики ради можете переписать тоже самое под вариант 1
ПС скрипт от команды отличается тем что его просто читать, команды вынесены на разные строки и вложенность обозначается отсупами (3 пробела или таб как правило)
The opinion expressed by me is not an official position of Microsoft
- Изменено Vector BCOModerator 9 апреля 2020 г. 6:29
- Помечено в качестве ответа Cloomger_Tasher 9 апреля 2020 г. 7:59
8 апреля 2020 г. 22:30Модератор -
Спасибо, скрипт отработал, но в файле Failed, ничего нет. Он пустой :(
А в файле Success, русский текст стал в виде ???????
9 апреля 2020 г. 5:06 -
Спасибо, скрипт отработал, но в файле Failed, ничего нет. Он пустой :(
А в файле Success, русский текст стал в виде ???????
1 если вы этого еще не сделали, то одновите PoSh хотябы до 5 версии
2 посмотрите справку по export-csv, найдите описание параметра -Encoding
3 FailedUsers - мое упущение. Сейчас поправлю скрипт в предыдущем ответе
The opinion expressed by me is not an official position of Microsoft
- Помечено в качестве ответа Cloomger_Tasher 9 апреля 2020 г. 8:00
9 апреля 2020 г. 6:24Модератор -
Спасибо, скрипт отработал, но в файле Failed, ничего нет. Он пустой :(
А в файле Success, русский текст стал в виде ???????
1 если вы этого еще не сделали, то одновите PoSh хотябы до 5 версии
2 посмотрите справку по export-csv, найдите описание параметра -Encoding
3 FailedUsers - мое упущение. Сейчас поправлю скрипт в предыдущем ответе
The opinion expressed by me is not an official position of Microsoft
По 2 пункту, я действительно совсем забыл об этом параметре) -добавил, всё отработало.
По 3 пункту, тоже всё отработало, но, странная вещь, там появились пользователи, которые якобы отсутствуют и выходит ошибка, но введя этого пользователя в консоль АД, такой пользователь есть... И я кажется понял почему так. Там после логина пробел стоит...)))
- Изменено Cloomger_Tasher 9 апреля 2020 г. 7:57
9 апреля 2020 г. 7:52 -
Большое Вам спасибо)))))9 апреля 2020 г. 7:59
-
Большое Вам спасибо)))))
обращайтесь :)The opinion expressed by me is not an official position of Microsoft
9 апреля 2020 г. 8:12Модератор