web-dev-qa-db-de.com

start-Transcript erfasst nicht alle Ausgaben in der Logdatei.

Ich habe den folgenden Code, der durchläuft und Informationen zu geplanten Aufgaben abruft und die auf dem Bildschirm auftretende Ausgabe in eine Protokolldatei schreibt.

Was mir jedoch aufgefallen ist, ist, dass alle Fehler AUSSER für Server mit der Meldung "Zugriff verweigert" protokolliert werden. Wie kann ich diese Fehler auch in der Protokolldatei protokollieren?.

Unten ist der Code:

Start-Transcript -path $scheduledpath\logging.txt -append

foreach ($name in $names) 
{
    Write-Host "Running Against Server $name" -ForegroundColor Magenta
    if ( Test-Connection -ComputerName $name -Count 1 -ErrorAction SilentlyContinue ) 
        {
            #$Command = "schtasks.exe /query /S $name /fo CSV /v >c:\tools\Scheduled\$name.csv"
            $Command = "schtasks.exe /query /S $name /fo CSV /v >$scheduledpath\$name.csv"
            Invoke-Expression $Command
            Clear-Variable Command -ErrorAction SilentlyContinue
        }

    else{
            Write-Host "$name is Down" -ForegroundColor Red
        }

}

Stop-Transcript

Hier ist die Ausgabe auf dem Bildschirm:

> Running Against Server SV064909 
> SV064909 is Down 
> Running Against Server SV081372 
> SV081372 is Down 
> Running Against Server YBEF008690_vorher_SV064930 
> YBEF008690_vorher_SV064930 is Down 
> Running Against Server Alt_SV064921 
> Alt_SV064921 is Down 
> Running Against Server SV073632 
> ERROR: Access is denied. 
> Running Against Server SV073633 
> ERROR: Access is denied.

Hier ist die Ausgabe in der LOG-Datei .... kein ZUGRIFF IS VERWEIGERT Wird angezeigt ...?

> Running Against Server SV064909 
> SV064909 is Down 
> Running Against Server SV081372 
> SV081372 is Down 
> Running Against Server YBEF008690_vorher_SV064930 
> YBEF008690_vorher_SV064930 is Down 
> Running Against Server Alt_SV064921 
> Alt_SV064921 is Down 
> Running Against Server SV073632 
> Running Against Server SV073633
18
lara400

Dieses Verhalten, bei dem die native Befehlsausgabe nicht in der Start-Transcript-Ausgabe aufgezeichnet wird, sondern an die Konsole ausgegeben wird, wird in connect bug 315857 gemeldet. Siehe Problemumgehungen für mögliche Lösungen.

14
dugas

Die einfachste Problemumgehung besteht darin, die Ergebnisse des nativen Befehls an Out-Host zu übergeben.

schtasks.exe /query /S $name /fo CSV /v >$scheduledpath\$name.csv | Out-Host
11
Stanley De Boer

Nichts von alledem hat für mich funktioniert. Ich habe einen Link von 2009 mit Diskussionen zum Thema gefunden. Aber ein Microsoft Blog von 2010 hat das Problem für mich gelöst.

Kurz gesagt, leiten Sie die native Befehlsausgabe an Out-Default weiter.

  schtasks.exe /query /S $name /fo CSV /v | Out-Default

{Ich habe diese Zeile nicht wirklich ausprobiert, aber Sie haben die Idee.}

3
Albert

Ahh, die richtige Antwort sollte lauten:

$ Command = "schtasks.exe/query/S $ name/für CSV/v 2> & 1> $ schedulepath\$ name.csv"

Das heißt Pipe stderror (Pipe 2) nach stdout (Pipe 1), so dass beide im stdout angezeigt werden. 

1

Service-Tag abrufen

    $servicetag = Get-WmiObject win32_bios | Select-Object -ExpandProperty SerialNumber 
    Write-output $servicetag

Ich habe Write-Ausgabe in einer Zeile oben in meinem Skript verwendet, . Danach waren sie alle Write-Host. Jede "Write" -Ausgabe erscheint jetzt in meinem Skript.

0
ALMO