#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