Как сделать цикл ожидания реестра Windows в PowerShell

Intune дает мне дерьмо. Я пытаюсь установить программу с помощью Powershell, и обычно вы просто ставите -wait в конце, а скрипты ждут, пока установка не будет завершена, а затем закрывается, но с intune она просто зависает.

поэтому я хочу поставить цикл ожидания, чтобы при создании этого реестра Windows

Компьютер\HKEY_LOCAL_MACHINE\ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ\Microsoft\Windows\CurrentVersion\Удалить {AA3C5F33-570B-3989-8542-D5DC0F759221}

С этим полем имени, равным этому числу DisplayVersion = 21.1.21.45

Ниже приведена попытка сценария PowerShell.

$regkey = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{AA3C5F33-570B-3989-8542-D5DC0F759221}'
$DisplayVersion = '21.1.21.45'
$Notdone = $true

DO {
    $exists = Get-ItemProperty -Path $regkey -Name $DisplayVersion -ErrorAction SilentlyContinue

    if (($exists -ne $null) -and ($exists.Lenght -ne 0)) {
        & "C:\Autodesk\{D138465E-4098-4F01-B453-1C4BEADE75D8}\image\installer.exe" -ArgumentList "-i deploy --offline_mode -o C:/Autodesk\{D138465E-4098-4F01-B453-1C4BEADE75D8}\image\Collection.xml --installer_version 1.35.0.9"

    $Notdone = $false
    }
    else {
    Start-Sleep -Seconds 15
    }
} While ($Notdone)

🤔 А знаете ли вы, что...
PowerShell предоставляет инструменты для мониторинга производительности системы и приложений.


61
2

Ответы:

вы перезапускаете установку каждые 15 секунд

$regkey = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{AA3C5F33-570B-3989-8542-D5DC0F759221}'
$DisplayVersion = '21.1.21.45'
$Notdone = $true

Start-Process "C:\Autodesk\{D138465E-4098-4F01-B453-1C4BEADE75D8}\image\installer.exe" -ArgumentList "-i deploy --offline_mode -o C:/Autodesk\{D138465E-4098-4F01-B453-1C4BEADE75D8}\image\Collection.xml --installer_version 1.35.0.9" -Wait -NoNewWindow

DO {
    $exists = Get-ItemProperty -Path $regkey -Name $DisplayVersion -ErrorAction SilentlyContinue

    if ([string]::IsNullOrEmpty($exists)){
    
        $Notdone = $true
        Start-Sleep -Seconds 15
    }else {$Notdone = $false}

} While ($Notdone)

Решено

вот код, который работал для меня

[Version]$minVersion = "21.1.21.45";
do {
  $version = [Version]'0.0.0.0'; try { [Version]$version = [Version](Get-ItemProperty -Path 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\{AA3C5F33-570B-3989-8542-D5DC0F759221}' -EA 0).DisplayVersion; } catch { }
  if ($version -ge $minVersion) {
  #Write-Host "The version is now '$($version)', which is greater than the Minimum version '$($minVersion)'";
  }
  else {
  #Write-Host "The version is now '$($version)', which is less than the Minimum version '$($minVersion)'. Will wait 15secs.";
  Start-Sleep -Seconds 15;
  }
}
until($version -ge $minVersion);