Untitled
unknown
plain_text
2 years ago
6.1 kB
15
Indexable
$ErrorActionPreference = 'Continue'
$FilePath = 'ipconfig.exe'
$ArgumentList = '/all'
Function Run-ProgramwithStdout{
param($FilePath, $ArgumentList)
$detail = [System.Collections.ArrayList]@()
[string]$TextReturn = ''
$StdOutputFile = "$($ENV:TEMP)\$($pid)-stdout.log"
$StdErrorFile = "$($ENV:TEMP)\$($pid)-stderr.log"
$Detail += new-object PSObject -Property @{
"Attribute"= "Command line"
"Value" = "$($filepath) $($ArgumentList)"
"Result" = "Success"
}
$ts = measure-command{$return = start-process -FilePath $FilePath -ArgumentList $ArgumentList -Wait -PassThru -RedirectStandardOutput $StdOutputFile -RedirectStandardError $StdErrorFile}
if ($return.exitcode -eq 0){
$Detail += new-object PSObject -Property @{
"Attribute"= "Return code"
"Value" = "$($return.exitcode)"
"Result" = "Success"
}
}else{
$Detail += new-object PSObject -Property @{
"Attribute"= "Return Code Error"
"Value" = "$($return.exitcode)"
"Result" = "Failure"
}
}
# Standard output
if (Test-Path -path $StdOutputFile -PathType Leaf){
$detail += new-object psobject -Property @{
'Attribute' = 'File exists'
'Value' = $StdOutputFile
'Result' = 'Success'
}
$LineNumber = 1
$FileContents = get-content -path $StdOutputFile -raw
forEach ($Line in $FileContents){
$detail += new-object psobject -Property @{
'Attribute' = "StdOut Line: $($Linenumber)"
'Value' = $Line
'Result' = "Success"
}
$LineNumber += 1
}
# $LineNumber
#$line
# $textReturn += $line + '`r`n' #[System.Environment.NewLine]
}Else{
$detail += new-object psobject -Property @{
'Attribute' = 'File does not exist'
'Value' = $StdOutputFile
'Result' = 'Failure'
}
}
$TextReturn = $FileContents
# Standard Error
if (Test-Path -path $StdErrorFile -PathType Leaf){
$detail += new-object psobject -Property @{
'Attribute' = 'File exists'
'Value' = $StdErrorFile
'Result' = 'Success'
}
$LineNumber = 1
$FileContents = get-content -path $StdErrorFile -raw
forEach ($Line in $FileContents){
$detail += new-object psobject -Property @{
'Attribute' = "StdErr Line: $($Linenumber)"
'Value' = $Line
'Result' = "Success"
}
$LineNumber += 1
# $textReturn += $line + '`r`n' #[System.Environment.NewLine]
}
}Else{
$detail += new-object psobject -Property @{
'Attribute' = 'File does not exist'
'Value' = $StdErrorFile
'Result' = 'Failure'
}
}
$TextReturn += $FileContents
$ht = @{}
$ht.add('Text',$TextReturn)
$ht.add('ExecutionTime',[math]::round($ts.TotalSeconds,0))
$ht.add('ExitCode',$return.exitcode)
return $ht
}
Try{
$htReturn = Run-ProgramwithStdout -FilePath $FilePath -ArgumentList $ArgumentList
if ($htReturn.ExitCode -eq 0){
$Comment = 'Success'
$Success = 1
$Failure = 0
}else{
$Comment = 'Bad return code'
$Success = 0
$Failure = 1
}
}Catch{
$ExceptionObject = $_
$Detail += new-object PSObject -Property @{
"Error"="Error Message"
"Value" = $ExceptionObject.ToString()
}
$Detail += new-object PSObject -Property @{
"Error"="Error Exception"
"Value" = $ExceptionObject.Exception
}
$Detail += new-object PSObject -Property @{
"Error"="Error Code"
"Value" = $ExceptionObject.exception.ErrorCode
}
$Detail += new-object PSObject -Property @{
"Error"="Script Stack Trace"
"Value" = $ExceptionObject.ScriptStackTrace
}
$Detail += new-object PSObject -Property @{
"Error"="InvocationInfo"
"Value" = $ExceptionObject.InvocationInfo.Line
}
$Detail += new-object PSObject -Property @{
"Error"="Position Message"
"Value" = $ExceptionObject.InvocationInfo.PositionMessage
}
$Detail += new-object PSObject -Property @{
"Error"="Command Path"
"Value" = $ExceptionObject.InvocationInfo.PSCommandPath
}
$Detail += new-object PSObject -Property @{
"Error"="Line Number"
"Value" = $ExceptionObject.InvocationInfo.ScriptLineNumber
}
$Detail += new-object PSObject -Property @{
"Error"="Script Name"
"Value" = $ExceptionObject.InvocationInfo.ScriptName
}
$comment = 'Error'
$Success = 0
$Failure = 1
$Count = 0
}Finally{
$return = @{}
$Summary = new-object PSObject -Property @{
"Status" = 'Ready'
"Time" = (Get-date)
"Comment" = $comment
"SuccessPoints" = $Success
"FailurePoints" = $Failure
"Count" = $count # $htReturn['text'] | measure-object -Line
"ExitCode" = $htReturn['ExitCode']
"ExecutionTime" = $htReturn['ExecutionTime']
}
$return.add('summary',$summary)
#$return.add('detail',$detail)
$return.add('txt',$htReturn['text'])
$return
}Editor is loading...
Leave a Comment