Ok. Also werde ich am Anfang beginnen.Powershell Script Fehlerprotokollierungsfunktion nicht älter ps Kompatibilität und Exitcoding
Ich habe eine Funktion, die ich erstellt, um Protokolldateien zu erstellen, die leicht zu lesen und zu verstehen sind, die Kontext und Fehlerdetails für wenn etwas schief geht.
Die Funktion selbst sieht wie folgt aus:
#error logging
function log ([string[]] $error)
<#
.SYNOPSIS
Provides a means of error logging step by step script processes.
.DESCRIPTION
This can be used to generate log entries into a log file based on success and failure of a script. Also provides a means of outputting script errors.
.EXAMPLE
Log("<Message>")
Log($error)
#>
{
if (!(Test-Path "C:\SCCMPS\Logs\"))
{New-Item "C:\SCCMPS\Logs\" -ItemType Dir}
if ($error[0].length -eq 0 -and $LASTEXITCODE -eq 0)
{ (Get-Date).ToString() + " - Command Completed Successfully" >> $logname }
else
{
if($error[0].length -ne 0)
{ (Get-Date).ToString() + " - " + $error >> $logname }
}
$global:error.clear()
}
$logname = "C:\SCCMPS\Logs\$program.log"
$logheader = "##### At " + (Get-Date).ToString() + ", the installation for $program version $curver was started under the user " + [environment]::userdomainname + "\" + [environment]::username.ToString() + " #####"
$logheader >> $logname
Log("Running location is $tempdir")
Dieses in einem Skript als solches verwendet ...
############## Variable Declaration ##############
$program = ".Net 3.5"
$curver = "3.5"
$tempdir = Get-Location
$tempdir = $tempdir.tostring()
#Include IT Powershell Functions
. "\\fileserver\share$\errorlogging.ps1"
############## Installation ##############
Log("Looking for $program")
if(!(Test-Key "HKLM:\Software\Microsoft\NET Framework Setup\NDP\v3.5" "Install"))
{
Log("$program not found, installing.")
Start-Process DISM.exe -ArgumentList "/Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:$tempdir\sxs" -PassThru -Wait
Log($error[0])
} ELSE { Log("$program already installed, skipping.") }
############## END ##############
Log("=================== END OF LOG ===================")
Ich habe zwei Probleme. Zuerst möchte ich einen Weg finden, das Log ($ error) so zu machen, dass der Exitcode für den Prozess, der gerade auf Fehler überprüft wurde, angezeigt wird und der Text "Befehl erfolgreich ausgeführt" oder "$ error [0]" angezeigt wird .
Das zweite Problem, Windows 7-Systeme in meiner Organisation laufen Powershell Version 2. Ich werde nicht in der Lage sein, Windows Management Framework 5.0 bereitzustellen (aus Gründen werde ich nicht eingehen), also möchte ich dies machen Fehlerprotokollierung funktioniert auf Powershell 2.0 ordnungsgemäß. Gegenwärtig bewertet diese Version $ error.length nicht richtig und deshalb wird es nicht funktionieren, um zu zeigen, ob etwas fehlgegangen ist.
Alle Vorschläge/Änderungen sind willkommen und geschätzt. Ich bin Autodidakt und lerne immer noch sehr viel.
Es ist praktisch und ich benutze try-catch-Blöcke für andere Dinge, aber habe es nicht für die Fehlerprotokollierung verwendet. –