Powershell — Расшифровка копирует все из консоли в журнал

#powershell #logging #console

Вопрос:

Я собрал следующее и в качестве теста ввел —norestart, который, как я знаю, является аргументом, который не распознается функцией exe, и в свою очередь предоставляет ожидаемый код выхода, который отображается в консоли вместе с сообщением об ошибке из exe, указывающим на то, в чем проблема.

Однако ошибка, вызванная исполняемым файлом, не регистрируется в файле журнала расшифровки. Может ли кто-нибудь указать, как расшифровка может зафиксировать эту ошибку, или мне следует рассмотреть другой метод?

(также ваш по сценарию в целом).

Спасибо.

 #Set
$ScriptFolder = $PSScriptRoot
#Command Line and Arguments#
$ExeInstaller = "C:Program Files (x86)Microsoft Visual StudioInstallersetup.exe"
$Arguments = @(
    "/uninstall"
    "--quiet"
    "--norestart"   
)

$Arguments = [system.String]::Join(" ", $Arguments)


#L
$WindowsDirectory = (Get-ChildItem Env:windir).Value
$LogDirectory = "$WindowsDirectoryLogs"
$LogFile = $LogDirectory   ""   "NameHere.log"



Function Start-Logging{
    start-transcript -path $LogFile -Force
}
Function Stop-Logging{
    Stop-Transcript
}
Function Invoke-Exe{
    [CmdletBinding(SupportsShouldProcess=$true)]
  
    param(
        [parameter(mandatory=$true,position=0)]
        [ValidateNotNullOrEmpty()]
        [string]
        $ExeInstaller,
  
        [parameter(mandatory=$false,position=1)]
        [string]
        $Arguments
    )

    
    if ($ExeInstaller -ne $null -and $Arguments -ne "")
    {
        Write-Verbose "Running $ReturnFromEXE = Start-Process -FilePath $ExeInstaller -ArgumentList $Arguments -NoNewWindow -Wait -Passthru"
        $Exe = Start-Process -FilePath $ExeInstaller -ArgumentList $Arguments -NoNewWindow -Wait -Passthru 
        
            If($Exe.ExitCode -ne 0 -and $p.ExitCode -ne 3010 -and $exe.ExitCode -ne $null)
                {   
            
                    # ERROR Handling
            
                    Write-Verbose "The setup process didn't not exit with a recognized exit code"
            
                    $ExitCode = $Exe.ExitCode
            
                    Write-Verbose "Exit Code: $ExitCode"
            
                    Exit 2
                    
                } 
                
                    else {
            
                        If($Exe.ExitCode -eq 0 -or $Exe.ExitCode -eq 3010 )
            
                        {   
            
                            # ERROR Handling
            
                            Write-Verbose "The setup is succesful adding registry keys"
            
                            WriteAuditRegistries
            
                            $ExitCode = $Exe.ExitCode
            
                            Write-Verbose "Exit Code: $ExitCode"
            
                            Exit 0
            
                        } 
            
        
                    }
                   
                }

                else {
                    #$Global:currentProcess = Start-Process -FilePath ($exe) -Wait -NoNewWindow -PassThru
                    $Exe = Start-Process -FilePath $ExeInstaller -NoNewWindow -Wait -Passthru

                    If($Exe.ExitCode -ne 0 -and $p.ExitCode -ne 3010 -and $exe.ExitCode -ne $null)
                {   
            
                    # ERROR Handling
            
                    Write-Verbose "The setup process didn't not exit with a recognized exit code"
                   
            
                    $ExitCode = $Exe.ExitCode
            
                    Write-Verbose "Exit Code: $ExitCode"

                    Write-Error
            
                    Exit 2
                    
                } 
                
                    else {
            
                        If($Exe.ExitCode -eq 0 -or $Exe.ExitCode -eq 3010 )
            
                        {   
            
                            # ERROR Handling
            
                            Write-Verbose "The setup is succesful adding registry keys"
            
                            WriteAuditRegistries
            
                            $ExitCode = $Exe.ExitCode
            
                            Write-Verbose "Exit Code: $ExitCode"
            
                            Exit 0
            
                        } 
                }
            }
            
        }

            
    



#Start Transcript Logging
. Start-Logging

Invoke-Exe -ExeInstaller $ExeInstaller -Arguments $Arguments -Verbose 


 #Stop Logging
. Stop-Logging