У меня есть CSV-файл, который содержит 2 поля: 1. ComputerName 2. ErrorCode. Он создается из приложения безопасности.
Мне нужно сравнить список ComputerName с AD. Если он активен, мне нужно экспортировать его в другой файл CSV.
Звучит достаточно просто, но я не могу понять, как также записать сообщение об ошибке в тот же файл. Если бы я мог прочитать AD и просто удалить несуществующие строки, это тоже было бы здорово, но у меня уже есть большая часть того, что мне нужно.
Я могу разделить список на машины, которые существуют в AD, и те, которые не используют код, который у меня есть, но он не копирует сообщение об ошибке.
Изменить для уточнения
В database-1.csv
:
Computername,Error
4140lw7,Systems Partion too small
Когда я запускаю скрипт, вывод выглядит следующим образом и не удаляет неактивные машины;
4140lw7,System Partition too small
Сценарий, который я использую, будет отделять то, что активно в AD, от того, чего нет, но только в том случае, если столбец ошибок не существует, т.е. database-1.csv
без столбца ошибок:
ComputerName
2sd8cfngw98
23987hgivuw
Это создаст следующее:
exist.csv
(активен в AD):
2sd8cfngw98
nonexist.csv
(неактивен в AD):
23987hgivuw
Но это не будет работать, если код ошибки находится в файле. Мне нужен код ошибки в файле, который связан с именем машины.
foreach ($computer in (Get-Content C:\apps\database-1.csv)) {
try {
$test = Get-ADComputer -Identity $computer -ErrorAction Stop
if ($test) {
Write-Output "$computer" | Out-File C:\apps\exist.csv -Append
}
} catch {
Write-Output "$computer" | Out-File C:\apps\Nonexist.csv -Append
}
}