Scripts/Install-OSDUpdatePackages.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#Requires -Version 5

<#
.SYNOPSIS
    Installs Updates in an OSDUpdate Package from Child Directories
 
.DESCRIPTION
    Installs Updates in an OSDUpdate Package from Child Directories
 
.NOTES
    Author: David Segura
    Website: osdeploy.com
    Twitter: @SeguraOSD
    Version: 19.6.25.0
#>

#======================================================================================
# Validate Admin Rights
#======================================================================================
Write-Host ""
# Verify Running as Admin
$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
If (!( $isAdmin )) {
    Write-Host "Checking User Account Control settings ..." -ForegroundColor Green
    if ((Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System).EnableLUA -eq 0) {
        #UAC Disabled
        Write-Host '========================================================================================' -ForegroundColor DarkGray
        Write-Host "User Account Control is Disabled ... " -ForegroundColor Green
        Write-Host "You will need to correct your UAC Settings ..." -ForegroundColor Green
        Write-Host "Try running this script in an Elevated PowerShell session ... Exiting" -ForegroundColor Green
        Write-Host '========================================================================================' -ForegroundColor DarkGray
        Start-Sleep -s 10
        Exit 0
    } else {
        #UAC Enabled
        Write-Host "UAC is Enabled" -ForegroundColor Green
        Start-Sleep -s 3
        if ($Silent) {
            Write-Host "-- Restarting as Administrator (Silent)" -ForegroundColor Cyan ; Start-Sleep -Seconds 1
            Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`" -Silent" -Verb RunAs -Wait
        } elseif($Restart) {
            Write-Host "-- Restarting as Administrator (Restart)" -ForegroundColor Cyan ; Start-Sleep -Seconds 1
            Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`" -Restart" -Verb RunAs -Wait
        } else {
            Write-Host "-- Restarting as Administrator" -ForegroundColor Cyan ; Start-Sleep -Seconds 1
            Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs -Wait
        }
        Exit 0
    }
} else {
    Write-Host '========================================================================================' -ForegroundColor DarkGray
    Write-Host "-- Running with Elevated Permissions ..." -ForegroundColor Cyan ; Start-Sleep -Seconds 1
    Write-Host '========================================================================================' -ForegroundColor DarkGray
}
#======================================================================================
# Start Transcript
#======================================================================================
Start-Transcript
#======================================================================================
# Start Script
#======================================================================================
Write-Host "$PSCommandPath" -ForegroundColor Green
$OSDUpdatePath = (get-item $PSScriptRoot ).FullName
Write-Host "OSDUpdate Path: $OSDUpdatePath" -ForegroundColor Cyan
#======================================================================================
# Get Child Scripts
#======================================================================================
$OSDScripts = Get-ChildItem $OSDUpdatePath Install-OSDUpdatePackage.ps1 -Recurse | Select-Object -Property *
#======================================================================================
# Process Child Scripts
#======================================================================================
foreach ($OSDScript in $OSDScripts) {
    Write-Host '========================================================================================' -ForegroundColor DarkGray
    Write-Host "Installing '$($OSDScript.FullName)'" -ForegroundColor Green
    Invoke-Expression "& '$($OSDScript.FullName)'"
}
#======================================================================================
# Complete
#======================================================================================
Write-Host '========================================================================================' -ForegroundColor DarkGray
Write-Host (Join-Path $PSScriptRoot $MyInvocation.MyCommand.Name) " Complete" -ForegroundColor Green
Write-Host '========================================================================================' -ForegroundColor DarkGray
Stop-Transcript
Start-Sleep 5
#[void](Read-Host 'Press Enter to Continue')