I need to check if there is a pending reboot before installing my software. If there is a pending reboot, stop the installation, otherwise continue the installation. Does anyone know how to do this in deploy-application.ps1?
Here is piece of what I use do deal with pending reboots:
$PendingRebootInfo = Get-PendingReboot
If ($PendingRebootInfo.IsSystemRebootPending) {
Write-log "Pending Reboots found"
If ($runningTaskSequence) {
Write-log "INSIDE TASK SEQUENCE: Ignoring pending reboots" -Severity 2
} Else {
Write-log "NOT Running inside a task sequence. " -Severity 2
}
} Else {
Write-Log "No pending reboot detected. Continuing install..."
}
1 Like
I also have this extra function in case there are some other pending reboot factors.
I did not find (I know it’s my fault) the tags for sharing code.
function Test-PendingReboot
{
if (Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending" -EA Ignore) { return $true }
if (Get-Item "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired" -EA Ignore) { return $true }
if (Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager" -Name PendingFileRenameOperations -EA Ignore) { return $true }
if (Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\ControlSet001\Session Manager" -Name PendingFileRenameOperations -EA Ignore) { return $true }
if (Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\ControlSet002\Session Manager" -Name PendingFileRenameOperations -EA Ignore) { return $true }
try
{
$util = [wmiclass]"\\.\root\ccm\clientsdk:CCM_ClientUtilities"
$status = $util.DetermineIfRebootPending()
if(($status -ne $null) -and $status.RebootPending)
{
return $true
}
}
catch
{
}
return $false
}
Some great tips in this one, I have a couple of apps/vendors where the setup.exe or MSI will not run if it detects a pending reboot.