-ErrorAction SilentlyContinue não funciona

2

Estou trabalhando com o powershell. Estou chamando um script do c #. Estou tentando copiar logs de diferentes servidores,

foreach($server in $args)
{
    $destination = "\$server\$path"
    if(!(Test-Path $destination))
        {
            New-Item -ItemType directory -Path $destination
        }
    foreach($log in $logsTaskAgent)
    {
        Write-Host "Backup $log log $server"



        $filename = "{0}{1}_{2}_{3}.evt" -f $destination,$server,$log,$date
        Write-Host "Filename: $filename"

        if($password -and $userName)
        {
            $logFile = Get-WmiObject Win32_NTEventlogFile -ComputerName $server -Credential $credential -ErrorAction SilentlyContinue | where-object { $_.logfilename -eq $log } 
            Write-Output "continue"
            if($logFile)
            {
                $logFile.PSBase.Scope.Options.EnablePrivileges = $true 
                $logFile.backupeventlog($filename) 
            }
            else
            {
                Write-Output "Error on server: $server for log: $log"
            }
        }


    }

Isso funciona perfeitamente, mas quando algo está errado com as credenciais ele lança uma exceção, mas eu quero continuar porque eu disse, eu tenho muitos servidores, então eu só quero ignorar a exceção e continuar com os outros servidores qualquer idéia de o que está errado? Até onde eu entendi -ErrorAction Silentlycontinue deve fazer o truque, mas não é: (

Editar: corrigir

Acabei com algo muito semelhante à resposta de Johan de Haan, então eu tomaria isso como a resposta ... aqui está o código modificado:

foreach($server in $args)
{

    try
    {
        $destination = "\$server\$path"
        if(!(Test-Path $destination))
            {
                New-Item -ItemType directory -Path $destination
            }
        foreach($log in $logsTaskAgent)
        {
            Write-Host "Backup $log log $server"



            $filename = "{0}{1}_{2}_{3}.evt" -f $destination,$server,$log,$date
            Write-Host "Filename: $filename"

            if($password -and $userName)
            {
                $logFile = Get-WmiObject Win32_NTEventlogFile -ComputerName $server -Credential $credential -ErrorAction SilentlyContinue | where-object { $_.logfilename -eq $log } 
                Write-Output "continue"
                if($logFile)
                {
                    $logFile.PSBase.Scope.Options.EnablePrivileges = $true 
                    $logFile.backupeventlog($filename) 
                }
                else
                {
                    Write-Output "Error on server: $server for log: $log"
                }
            }


        }
    }
    catch
    {
        Write-Output "Error while retrieving log Object from server $server : $($_.Exception.Message)"
        continue
    }

    $destination = ""
}
    
por Roberto Guajardo 11.06.2015 / 21:57

1 resposta

1

Eu usaria um try / catch e usaria um intervalo para continuar com o próximo servidor:

foreach($server in $args){
    $destination = "\$server\$path"
    if(!(Test-Path $destination))
    {
        New-Item -ItemType directory -Path $destination
    }
    foreach($log in $logsTaskAgent)
    {
        Write-Host "Backup $log log $server"

        $filename = "{0}{1}_{2}_{3}.evt" -f $destination,$server,$log,$date
        Write-Host "Filename: $filename"

        if($password -and $userName) {
            try{
                 $logFile = Get-WmiObject Win32_NTEventlogFile -ComputerName $server -Credential $credential -ErrorAction Stop | where-object { $_.logfilename -eq $log } 
            } catch {
                 Write-Warning "Error while retrieving WMI Object: $($_.Exception.Message)"
                 break #this way you break out of the first loop, continuing in the foreach ($server in args loop)
            }

            Write-Output "continue"
            if($logFile) {
                $logFile.PSBase.Scope.Options.EnablePrivileges = $true 
                $logFile.backupeventlog($filename) 
            } else {
                Write-Output "Error on server: $server for log: $log"
            }
        }
    }
}
    
por 12.06.2015 / 11:51

Tags