Private/Tests/Get-ErrorInfo.Tests.ps1
<#
# Get-ErrorInfo (UTest) - **Hashtags** UTest Pester - **Version** 2020.12.21 #> BeforeAll { . ($PSCommandPath.Replace('.Tests.ps1', '.ps1')).Replace('\Private\Tests\', '\Public\') } AfterAll { "<[ START SCRIPT-ANALYZER ..." | Write-Warning Invoke-ScriptAnalyzer -Path ($PSCommandPath.Replace('.Tests.ps1', '.ps1')).Replace('\Private\Tests\', '\Public\') -Severity Error, Warning, Information, ParseError | ForEach-Object -Process {"{0,40} - {1,4} - {2}" -f $_.ScriptName, $_.Line, $_.RuleName, $_.Message | Write-Warning } "... ENDE SCRIPT-ANALYZER ]>" | Write-Warning } # TODO: $e = $Error[0] ; Get-ErrorInfo -InputObject $e # TODO: $Error | Get-ErrorInfo Describe "Get-ErrorInfo Test" { Context "Parameter-Test" { It "Parameter -InputObject ist vom Typ System.Object" { Get-Command -Name Get-ErrorInfo | Should -HaveParameter InputObject -Type 'Object' } It "Parameter -CmdletName validiert mit ValidateNotNullOrEmpty" { $target = (Get-Command -Name Get-ErrorInfo).Parameters['InputObject'] $target = $target.Attributes.Where({$_ -is [System.Management.Automation.ValidateNotNullOrEmptyAttribute]}) $target | should -Not -BeNullOrEmpty } It "Parameter -CmdletName lässt die Pipeline-Verarbeitung nach ByValue zu." { $target = (Get-Command -Name Get-ErrorInfo).Parameters['InputObject'] $target = $target.Attributes.Where({$_ -is [System.Management.Automation.ParameterAttribute]}) $target.ValueFromPipeline | should -BeTrue } It "Parameter -CmdletName lässt die Pipeline-Verarbeitung nach ByPropertyName NICHT zu." { $target = (Get-Command -Name Get-ErrorInfo).Parameters['InputObject'] $target = $target.Attributes.Where({$_ -is [System.Management.Automation.ParameterAttribute]}) $target.ValueFromPipelineByPropertyName | should -BeFalse } It "Throw => Get-ErrorInfo -InputObject $null" { { Get-ErrorInfo -InputObject $null } | Should -Throw -ErrorId 'ParameterArgumentValidationError,Get-ErrorInfo' } It "Throw => Get-ErrorInfo -InputObject ''" { { Get-ErrorInfo -InputObject '' } | Should -Throw -ErrorId 'ParameterArgumentValidationError,Get-ErrorInfo' } It "Throw => Get-ErrorInfo -InputObject 'NichtErrorTyp'" { { Get-ErrorInfo -InputObject 'NichtErrorTyp' } | Should -Throw -ErrorId 'ParameterArgumentValidationError,Get-ErrorInfo' } } Context "Diverse ErrorRecords analysieren" { It "Korrekte Fehler-Analyse für: Get-ChildItem -Path C:\MichGibtEsNicht" { $Error.Clear() Get-ChildItem -Path C:\MichGibtEsNicht -ErrorAction SilentlyContinue -ErrorVariable gciError | Out-Null $gciError | Get-ErrorInfo | Out-String | Select-String -Pattern @" [1;4mAnalyse Error 1[!p Exception : [91mSystem.Management.Automation.ItemNotFoundException[0m Exception.Message : Der Pfad "C:\MichGibtEsNicht" kann nicht gefunden werden, da er nicht vorhanden ist. FullyQualifiedErrorId : [96mPathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand[0m CategoryInfo : Category: [92mObjectNotFound[0m Activity: [92mGet-ChildItem[0m Reason: [92mItemNotFoundException[0m TargetName: [92mC:\MichGibtEsNicht[0m TargetType: [92mString[0m InnerException : [91mNULL[0m "@ -SimpleMatch | should -HaveCount 1 } It "Korrekte Fehler-Analyse für: Get-Process -FileVersionInfo -ErrorAction Stop" { $Error.Clear() try { Get-Process -FileVersionInfo -ErrorAction Stop | Out-Null } catch { } Get-ErrorInfo | Out-String | Select-String -Pattern @" [1;4mAnalyse Error 1[!p Exception : [91mMicrosoft.PowerShell.Commands.ProcessCommandException[0m Exception.Message : Die Dateiversionsinformationen des Prozesses "armsvc" können nicht aufgezählt werden. FullyQualifiedErrorId : [96mCouldnotEnumerateFileVer,Microsoft.PowerShell.Commands.GetProcessCommand[0m CategoryInfo : Category: [92mPermissionDenied[0m Activity: [92mGet-Process[0m Reason: [92mProcessCommandException[0m TargetName: [92mSystem.Diagnostics.Process (armsvc)[0m TargetType: [92mProcess[0m InnerException : [91mSystem.ComponentModel.Win32Exception[0m Zugriff verweigert InnerException: [91mNULL[0m "@ -SimpleMatch | should -HaveCount 1 } It "Korrekte Fehler-Analyse für: Get-Process -FileVersionInfo -ErrorAction Stop" { $Error.Clear() try { 1/0 } catch { } Get-ErrorInfo | Out-String | Select-String -Pattern @" [1;4mAnalyse Error 1[!p Exception : [91mSystem.Management.Automation.RuntimeException[0m Exception.Message : Es wurde versucht, durch 0 (null) zu teilen. FullyQualifiedErrorId : [96mRuntimeException[0m CategoryInfo : Category: [92mNotSpecified[0m Activity: [92m[0m Reason: [92mRuntimeException[0m TargetName: [92m[0m TargetType: [92m[0m InnerException : [91mSystem.DivideByZeroException[0m Es wurde versucht, durch 0 (null) zu teilen. InnerException: [91mNULL[0m "@ -SimpleMatch | should -HaveCount 1 } It "Korrekte Fehler-Analyse für: Get-ChildItem -Path ./MichGibtEsNicht" { $Error.Clear() try { Invoke-WebRequest -Uri 'https://www.bing.com/NoRealUri.aspx' -ErrorAction SilentlyContinue | Out-Null } catch { } Get-ErrorInfo | Out-String | Select-String -Pattern @" [1;4mAnalyse Error 1[!p Exception : [91mSystem.Net.WebException[0m Exception.Message : Der Remoteserver hat einen Fehler zurückgegeben: (404) Nicht gefunden. FullyQualifiedErrorId : [96mWebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand[0m CategoryInfo : Category: [92mInvalidOperation[0m Activity: [92mInvoke-WebRequest[0m Reason: [92mWebException[0m TargetName: [92mSystem.Net.HttpWebRequest[0m TargetType: [92mHttpWebRequest[0m InnerException : [91mNULL[0m "@ -SimpleMatch | should -HaveCount 1 } } } |