Как мне добавить catch в аудит импорта-csv?

#powershell

#powershell

Вопрос:

У меня есть этот сценарий ниже, и на входе больше строк, чем на выходе. Я предполагаю, что это потому, что импорт технически является экспортом из системы, которую я проверяю, которую скрипт не может найти в AD. Как мне добавить catch для уведомления, который не может быть найден в AD?

 Import-Csv "C:tempusers.csv" |
    %{  Get-AdUser -filter "name -like '$($_.Name)'" } | 
    Select Name, enabled | 
    Export-csv -path C:tempcompleteaudit.csv -NoTypeInformation 
 

Вот пример ввода:

 Name
Jane Doe
 

Вот пример вывода:

 Name    enabled
Jane Doe    TRUE
 

Ответ №1:

Одним из способов добиться этого было бы вывести входные данные, но добавить вычисляемое свойство к каждому элементу. Вот пример того, как вы могли бы это сделать:

 Import-Csv "C:tempusers.csv" |
    Select Name, @{l='Enabled';e={(Get-AdUser -filter "name -like '$($_.Name)'").Enabled}} |
    Export-csv -path C:tempcompleteaudit.csv -NoTypeInformation 
 

Это создаст ваш CSV-файл со всеми отображаемыми пользователями ввода, и те, кто получил ответ от AD, будут иметь значение True / False в столбце Enabled , в то время как все, кто не был найден в AD, будут пустыми.

Очевидно, что вы могли бы добавить больше логики для проверки пустых результатов и заполнения чего-либо, или выдать предупреждение или что-то в этом роде, но это довольно простой способ убедиться, что все входные данные включены в выходные данные.

Ответ №2:

Я бы сделал это с помощью простого if{}..else{} :

 Import-Csv "C:tempusers.csv" |
    ForEach-Object {
        $nameToCheck = $_.Name
        $user = Get-AdUser -Filter "name -eq '$nameToCheck'" -ErrorAction SilentlyContinue
        # if the user could not be found, $user is $null
        if ($user) { 
            $user | Select Name, Enabled
        }
        else {
            Write-Warning "User $nameToCheck could not be found.."
        }
    } | Export-Csv -path C:tempcompleteaudit.csv -NoTypeInformation
 

-like без подстановочных знаков будет делать то же -eq самое, что и . Кроме того, имена в AD не уникальны, поэтому всегда лучше использовать для этого свойства типа DistinguishedName , UserPrincipalName или EmailAddress