Как отловить ошибки из powershell и записать их в файл .txt? - PullRequest
0 голосов
/ 12 февраля 2020

Я использую скрипт для обновления данных пользователей Active Directory

Import-Csv -Path $Path | foreach-object {Set-ADUser -Identity ($_.user) -Department $_.Department -Title $_.Title -Company $_.Company -MobilePhone $_.MobilePhone ...etc (the required data to modify)}

Я хочу, чтобы скрипт записывал ошибки в обновлении пользователя "x", чтобы увидеть, чей пользователь не был обновлено.

Я создаю приложение C# для написания персонализированного сценария, и мне все еще нужно сделать журнал ошибок.

Идея заключается в создании этого журнала по указанному пути. Я не знаю, можно ли это сделать в самом скрипте.

Я использую этот метод PowerShell, который я нашел здесь:

PowerShell ps = PowerShell.Create();
ps.AddScript(script);

IAsyncResult result = ps.BeginInvoke();

// do something else until execution has completed.
// this could be sleep/wait, or perhaps some other work
while (result.IsCompleted == false)
{
  //think i can make that here, but can´t see how
}   
MessageBox.Show("Complete");

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Вы можете записать ошибки в файл, подобный этому:

$logFilePath = "..."
Import-Csv -Path $Path | foreach-object {
    Try {
        $user = $_.user
        Set-ADUser -Identity $user -Department $_.Department -Title $_.Title -Company $_.Company -MobilePhone $_.MobilePhone ...etc (the required data to modify)
    } Catch [system.exception] {
        $t = get-date -format "yyyy-MM-dd HH:mm:ss"
        $msg = "$t -- Error updating user $user: $($_.Exception.Message)`n"
        $msg | Out-File -Append $logFilePath
    }
}

Вы также можете заменить Out-File на Write-Error для записи в поток stderr, а затем прочитать этот поток непосредственно в C# код, чтобы сохранить дисковый ввод-вывод. Вот пример того, как это выглядит здесь:

Получить вывод команды Powershell при вызове через код

Заменить поток Progress в этом пример с потоком Error.

0 голосов
/ 12 февраля 2020

Возможно, что-то подобное можно использовать, чтобы вы быстро пошли. Не видя сценарий, я просто должен предположить, что у вас есть файл ps1, и вы хотите, чтобы он генерировал ошибки:

.\myhugescript.ps1 | Out-File -Path D:\log.log -Append
$(.\myhugescript.ps1) | Out-File -Path D:\log.log
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...