Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # /=======================================================================
- # /=
- # /= Patch_Template.ps1
- # /=
- # /= AUTHOR: Jake Bentz
- # /= DATE: 10/11/2016
- # /=
- # /= REQUIREMENTS: Server 2008/2012 Templates need to be running PowerShell v.3 minimum but v.4 is highly recommended.
- # /= The PSWindowsUpdate Module directory needs to exist in the PSModulePath on the template. https://gallery.technet.microsoft.com/scriptcenter/2d191bcd-3308-4edd-9de2-88dff796b0bc
- # /= Encrypted password file for local administrator account
- # /= Exectuion Policy on template needs to be Remote-Signed
- # /=
- # /= DESCRIPTION: This script patches the specified templates
- # /=
- # /= REVISION HISTORY
- # /= VER DATE AUTHOR/EDITOR COMMENT
- # /= 1.0 10/11/2016 Jake Bentz Created script
- # /=
- # /=======================================================================#
- #
- #Create variable for list of templates
- $Template = "WindowsTemplate"
- #
- # Create log folder if it doesn't exist
- $Logpath = ".\output"
- If ((Test-Path -Path $Logpath) -ne $true) { New-Item -ItemType directory -Path $Logpath}
- #
- # Create log file
- $Logfile = ".\output\Patch_Template"+ (get-date -format '_ddMMMyyyy_hhmm') +".txt"
- Write "================================================================" > $Logfile
- Write "Patch Template Output File" >> $Logfile
- Write "================================================================" >> $Logfile
- #
- # Convert template to VM
- Write "============================" >> $Logfile
- $Output = (get-date -format 'dd-MMM-yyyy hh:mm')
- $Output = $Output += " Converting to VM "
- $Output = $Output += $Template
- Write $Output >> $Logfile
- Set-Template -Template $Template -ToVM -Confirm:$false >> $Logfile
- Start-sleep -s 60
- $Output = (get-date -format 'dd-MMM-yyyy hh:mm')
- $Output = $Output += " Complete"
- Write $Output >> $Logfile
- Write "============================" >> $Logfile
- #
- # Start VM
- Write "============================" >> $Logfile
- $Output = (get-date -format 'dd-MMM-yyyy hh:mm')
- $Output = $Output += " Starting VM "
- $Output = $Output += $Template
- Write $Output >> $Logfile
- Start-VM -VM $Template | Get-VMQuestion | Set-VMQuestion -DefaultOption -Confirm:$false >> $Logfile
- Start-sleep -s 120
- $Output = (get-date -format 'dd-MMM-yyyy hh:mm')
- $Output = $Output += " Complete"
- Write $Output >> $Logfile
- Write "============================" >> $Logfile
- #
- # Create variables for Guest OS credentials - This is needed for the Invoke-VMScript cmdlet to be able to execute actions inside the Guest.
- $Username = "administrator"
- $OSPwd = cat .\OSPwd.txt | convertto-securestring
- $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $OSPwd
- #
- # The following is the cmdlet that will invoke the Get-WUInstall inside the GuestVM to install all available Windows updates; optionally results can be exported to a log file to see the patches installed and related results.
- Write "============================" >> $Logfile
- $Output = (get-date -format 'dd-MMM-yyyy hh:mm')
- $Output = $Output += " Patching VM "
- $Output = $Output += $Template
- Write $Output >> $Logfile
- Invoke-VMScript -ScriptType PowerShell -ScriptText "ipmo PSWindowsUpdate; Get-WUInstall –WindowsUpdate –AcceptAll –AutoReboot" -VM $Template -GuestCredential $Cred >> $Logfile
- Start-sleep -s 3600
- $Output = (get-date -format 'dd-MMM-yyyy hh:mm')
- $Output = $Output += " Complete"
- Write $Output >> $Logfile
- Write "============================" >> $Logfile
- #
- # Optionally restart VMGuest one more time in case Windows Update requires it and for whatever reason the –AutoReboot switch didn’t complete it.
- Write "============================" >> $Logfile
- $Output = (get-date -format 'dd-MMM-yyyy hh:mm')
- $Output = $Output += " Restarting VM "
- $Output = $Output += $Template
- Write $Output >> $Logfile
- Restart-VMGuest -VM $Template -Confirm:$false >> $Logfile
- Start-sleep -s 120
- $Output = (get-date -format 'dd-MMM-yyyy hh:mm')
- $Output = $Output += " Complete"
- Write $Output >> $Logfile
- Write "============================" >> $Logfile
- #
- # After a desired wait period, Shutdown the server
- Write "============================" >> $Logfile
- $Output = (get-date -format 'dd-MMM-yyyy hh:mm')
- $Output = $Output += " Shutdown VM "
- $Output = $Output += $Template
- Write $Output >> $Logfile
- Shutdown-VMGuest –VM $Template -Confirm:$false >> $Logfile
- Start-sleep -s 120
- $Output = (get-date -format 'dd-MMM-yyyy hh:mm')
- $Output = $Output += " Complete"
- Write $Output >> $Logfile
- Write "============================" >> $Logfile
- #
- # Convert VM to Template
- Write "============================" >> $Logfile
- $Output = (get-date -format 'dd-MMM-yyyy hh:mm')
- $Output = $Output += " Convert VM to Template"
- $Output = $Output += $Template
- Write $Output >> $Logfile
- Set-VM –VM $Template -ToTemplate -Confirm:$false >> $Logfile
- $Output = (get-date -format 'dd-MMM-yyyy hh:mm')
- $Output = $Output += " Complete"
- Write $Output >> $Logfile
- Write "============================" >> $Logfile
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement