Komut dizim, belirli bir Windows Installer güncelleştirmesi (MSP) yüklemesinin başarılı veya başarısız olduğunu nasıl belirleyebilir?


0

Çok sayıda MSP güncellemesi ( .mspuzantıları olan, Windows Installer aracılığıyla dağıtılan dosyalar ) birbiri ardına yüklemek için bir PowerShell betiği (aşağıya bakınız) yazdım . Şimdi, bu betiğin bir MSP güncellemesinin yüklenmesinin ne zaman başarısız olacağını bana da söylemesini istiyorum.

Çalıştığım şeyler: Hata kodunu sorgulama. İki yaklaşım var:

  • Biri, MSIEXEC.EXEdoğrudan çalıştırdıktan sonra $ LASTEXITCODE kullanarak hata kodunu elde etmektir . Bu sıkıcı.
  • Diğeri , sonucun bir nesneye kaydedilmesi, -PassThruanahtarın eklenmesiyle ilgili hata kodunu Start-Processsöyleyip $aokurdu $a.ExitCode. Bunun gibi, böyle:

    $a=Start-Process msiexec.exe -ArgumentList "/p `"$MspRelPath`" /log `"$LogRelPath`" /passive /norestart" -Wait -PassThru
    Write-Host $a.ExitCode
    

İkisi de faydalı değil. Öyle görünüyor msiexec.exehep çıkış kodu olarak sıfır döndürür.


Herhangi biri ilgileniyorsa, işte senaryo:

param (
    [parameter(mandatory=$false)][Switch]$BypassAdminPrompt
)
Try 
{
  Clear-Host

  # Get script name
  $ScriptFileObject=(Get-Item $PSCommandPath)
  $ScriptName=$ScriptFileObject.Name
  $ScriptPath=$ScriptFileObject.DirectoryName

  # Load Windows Forms and initialize visual styles
  [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
  [System.Windows.Forms.Application]::EnableVisualStyles()

  # Is the script holding administrative privileges?
  $wid=[System.Security.Principal.WindowsIdentity]::GetCurrent()
  $prp=new-object System.Security.Principal.WindowsPrincipal($wid)
  $adm=[System.Security.Principal.WindowsBuiltInRole]::Administrator
  $IsAdmin=$prp.IsInRole($adm)
  if ($IsAdmin -eq $false) {
    if (!$BypassAdminPrompt) {
      Start-Process powershell.exe -ArgumentList "-ExecutionPolicy $env:PSExecutionPolicyPreference -File `"$PSCommandPath`" -BypassAdminPrompt" -Verb RunAs
    } else {
      $result=[System.Windows.Forms.MessageBox]::Show("This script requires administrative privileges, which are absent.", $ScriptName, "OK", "Error");
    }
    break;
  }

  # Install...
  Set-Location $ScriptPath
  $MSP_list = Get-ChildItem *.msp -Recurse
  if ($MSP_list -eq $null) {
    $result=[System.Windows.Forms.MessageBox]::Show("Nothing found to install.`rSearch path was "+$ScriptPath, $ScriptName, "OK", "Error");
  }
  else
  {
    $MSP_list | ForEach-Object {
      # Ordinarily, I'd pass the path in the form of ".\foldername\filename.msp" but Windows Installer does not accept that.
      # It must be in "foldername\filename.msp" form.
      $MspRelPath = $_.FullName.Substring($ScriptPath.Length+1)
      $LogRelPath = $MspRelPath+".log"
      Write-Host $MspRelPath
      Start-Process msiexec.exe -ArgumentList "/p `"$MspRelPath`" /log `"$LogRelPath`" /passive /norestart" -Wait
    }
    Remove-Variable MspRelPath
    Remove-Variable LogRelPath
    Pause
  }
  Remove-Variable MSP_list
}
Catch
{
  $result=[System.Windows.Forms.MessageBox]::Show("Error!`r`r"+$Error[0], $ScriptName, "OK", "Error");
  break;
}

Yüklü güncellemeleri Kontrol paneli / Ayarlar uygulamasında kolayca bulabilirsiniz.
Biswapriyo

Yanıtlar:


0

MSIExec olayları için Windows Olaylarını kontrol edin veya bir kez yapılan günlük çıktısı içeriğini alın ve arıza göstergelerini kontrol edin.

MSIExec'i kullanarak uzaktan MSI yükleyen bir komut dosyası var, MSIExec'in kapanmasını bekler (veya başlatmak için işlem / hizmet) ... tipik bir yükleme süresinden sonra bir şey olmazsa, MSIExec çağrısında bulunan günlük yolunu kontrol ederim ve başarısızlık veya başarı mesajlarını kontrol etme


Windows Etkinliği bulamıyorum. msiexecBir günlük oluşturmak isteyebilirim , ancak bu günlükten gelen başarıyı veya başarısızlığı programlı olarak nasıl yorumlayabilirim? Kahretsin, o kütükten bir şeyi nasıl yorumlarım? Microsoft'un bu günlüğü yöneticilerine işkence etmek için yardım etmediğini düşündüğünden eminim.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.