Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SkipToTheEndpoint/e438d484d1a31ba2c2eca02f4a1d946d to your computer and use it in GitHub Desktop.
Save SkipToTheEndpoint/e438d484d1a31ba2c2eca02f4a1d946d to your computer and use it in GitHub Desktop.
function Cleanup {
cd $PSScriptRoot
if (Test-Path $ScriptFolderPath)
{
Write-Host 'Removing script directory'
Remove-Item -LiteralPath $ScriptFolderPath -Force -Recurse
}
}
Function Setup {
# Cleanup scheduled task if it exists
$oldTask = Get-ScheduledTask -Taskname $ScheduledTaskName -ErrorAction SilentlyContinue
if ($oldTask)
{
if ($oldTask.State -eq 'Running')
{
Stop-ScheduledTask -TaskName $ScheduledTaskName
}
Unregister-ScheduledTask -TaskName $ScheduledTaskName -Confirm:$false -ErrorAction SilentlyContinue
}
Cleanup
}
$LogPrefix = "\AutopatchClientSetupInstallScheduled"
$Timestamp = Get-Date
$LogPath = "$Env:windir\ccm\logs"
$LogFile = $LogPath + $LogPrefix + $Timestamp.ToFileTimeUtc() + ".log"
$ScheduledTaskName = 'Autopatch Client Setup Installer'
$ScriptFolderPath = "$env:SystemDrive\ProgramData\Microsoft\AutopatchSetupScheduled"
$SystemScriptPath = "$ScriptFolderPath\SetupAutopatchClientPackage.ps1"
$SystemScript = 'PCMNCiAgICAuU1lOT1BTSVMNCiAgICBJbnN0YWxscyBNaWNyb3NvZnQgTWFuYWdlZCBEZXNrdG9wIENsaWVudCBMaWJyYXJ5IGFuZCBNaWNyb3NvZnQgQ2xvdWQgTWFuYWdlZCBEZXNrdG9wIEV4dGVuc2lvbg0KICAgIC5FWEFNUExFDQogICAgLlxTZXR1cEF1dG9wYXRjaENsaWVudFBhY2thZ2UucHMxDQojPg0KcGFyYW0oDQogICAgW3N3aXRjaF0gJERpc2FibGVUcmFuc2NyaXB0ID0gJGZhbHNlDQopDQojIEVuc3VyZXMgdGhhdCBJbnZva2UtV2ViUmVxdWVzdCB1c2VzIFRMUyAxLjINCltOZXQuU2VydmljZVBvaW50TWFuYWdlcl06OlNlY3VyaXR5UHJvdG9jb2wgPSBbTmV0LlNlY3VyaXR5UHJvdG9jb2xUeXBlXTo6VGxzMTINCg0KIyBWZXJzaW9uIGFuZCBMb2NhdGlvbiBQYXJhbWV0ZXJzDQokQ2xpZW50TGlicmFyeVZlcnNpb24gPSAyMDIyMDYwMzENCiRDbG91ZE1hbmFnZW1lbnRFeHRlbnNpb25WZXJzaW9uID0gJzEuMi4wMTk5Ni43OCcNCg0KJGNhYkRvd25sb2FkVXJpID0gJ2h0dHBzOi8vbW1kY3VzdG9tZXIubWljcm9zb2Z0LmNvbS9jbGllbnRzZXR1cC8yMDIyMDYyMS4xL0F1dG9wYXRjaFNldHVwUGFja2FnZS5jYWInDQokY2FiRG93bmxvYWRVcmlCYWNrdXAgPSAnaHR0cHM6Ly9tbWRjdXN0b21lci5henVyZWVkZ2UubmV0L2NsaWVudHNldHVwLzIwMjIwNjIxLjEvQXV0b3BhdGNoU2V0dXBQYWNrYWdlLmNhYicNCg0KZnVuY3Rpb24gU2V0LVJlZ2lzdHJ5IHsNCiAgICA8Iw0KICAgICAgICAuU3lub3BzaXMNCiAgICAgICAgICAgIE1vZGlmeSByZWdpc3RyeSBTdHJpbmcgdmFsdWUuDQogICAgICAgIC5EZXNjcmlwdGlvbg0KICAgICAgICAgICAgRnVuY3Rpb24gdG8gTW9kaWZ5IHJlZ2lzdHJ5IFN0cmluZyB2YWx1ZS4NCiAgICAgICAgLlBhcmFtZXRlcg0KICAgICAgICAgICAgLUhpdmUgJ0hLTE0nIC1QYXRoICdcU29mdHdhcmVcUG9saWNpZXNcTWljcm9zb2Z0XFdpbmRvd3NcU3lzdGVtJyAtTmFtZSAnQ2xlYW51cFByb2ZpbGVzJyAtVmFsdWUgJ1Rlc3QnIC1UeXBlICdTdHJpbmcnDQogICAgICAgIC5FeGFtcGxlDQogICAgICAgICAgICBTZXQtUmVnaXN0cnkgLUhpdmUgJ0hLTE0nIC1QYXRoICdcU29mdHdhcmVcUG9saWNpZXNcTWljcm9zb2Z0XFdpbmRvd3NcU3lzdGVtJyAtTmFtZSAnQ2xlYW51cFByb2ZpbGVzJyAtVmFsdWUgJ1Rlc3QnIC1UeXBlICdTdHJpbmcnDQogICAgICAgIC5JbnB1dHMNCiAgICAgICAgICAgIHN0cmluZy4NCiAgICAgICAgLk91dHB1dHMNCiAgICAgICAgICAgIE5vbmUuDQogICAgIz4NCiAgICANCiAgICBwYXJhbSAoDQogICAgICAgIFtwYXJhbWV0ZXIobWFuZGF0b3J5KV0gW3N0cmluZ10gJEhpdmUsDQogICAgICAgIFtwYXJhbWV0ZXIobWFuZGF0b3J5KV0gW3N0cmluZ10gJFBhdGgsDQogICAgICAgIFtwYXJhbWV0ZXIobWFuZGF0b3J5KV0gW3N0cmluZ10gJE5hbWUsDQogICAgICAgIFtwYXJhbWV0ZXIobWFuZGF0b3J5KV0gW3N0cmluZ10gJFZhbHVlLA0KICAgICAgICBbcGFyYW1ldGVyKG1hbmRhdG9yeSldIFtzdHJpbmddICRUeXBlDQogICAgKQ0KICAgICRyZWdQYXRoID0gKCd7MH06XHsxfScgLWYgJEhpdmUsICRQYXRoKQ0KICAgIHRyeSB7DQogICAgICAgIGlmICghKFRlc3QtUGF0aCAtUGF0aCAkcmVnUGF0aCkpIHsNCiAgICAgICAgICAgICRudWxsID0gTmV3LUl0ZW0gLVBhdGggJHJlZ1BhdGggLUZvcmNlDQogICAgICAgIH0NCiAgICAgICAgV3JpdGUtSG9zdCAiW1NldC1SZWdpc3RyeV0gQXR0ZW1wdGluZyB0byBzZXQgcmVnaXN0cnkgdmFsdWUgJE5hbWUgYXQgcmVnaXN0cnkgcGF0aCAkcmVncGF0aCBhbmQgcmVnaXN0cnkgZGF0YSAkVmFsdWUiDQogICAgICAgIE5ldy1JdGVtUHJvcGVydHkgLVBhdGggJHJlZ1BhdGggLU5hbWUgJE5hbWUgLVZhbHVlICRWYWx1ZSAtUHJvcGVydHlUeXBlICRUeXBlIC1Gb3JjZSAtRXJyb3JBY3Rpb24gQ29udGludWUgDQogICAgfQ0KICAgIGNhdGNoIFtTeXN0ZW0uSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbl0gew0KICAgICAgICBXcml0ZS1FcnJvciAkXy5FeGNlcHRpb24uTWVzc2FnZWBuDQogICAgICAgIFdyaXRlLUhvc3QgIltTZXQtUmVnaXN0cnldIFVuYWJsZSB0byBjcmVhdGUgcmVnaXN0cnkgdmFsdWUgJE5hbWUgYXQgcmVnaXN0cnkgcGF0aCAkcmVnUGF0aCByZWdpc3RyeSBkYXRhICRWYWx1ZSINCiAgICB9DQogICAgY2F0Y2ggew0KICAgICAgICBXcml0ZS1FcnJvciAkXy5FeGNlcHRpb24uTWVzc2FnZWBuDQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBHZXQtUmVnaXN0cnkgew0KICAgIDwjDQogICAgICAgIC5TeW5vcHNpcw0KICAgICAgICAgICAgR2V0IHJlZ2lzdHJ5IHZhbHVlLg0KICAgICAgICAuRGVzY3JpcHRpb24NCiAgICAgICAgICAgIEZ1bmN0aW9uIHRvIG9idGFpbiByZWdpc3RyeSB2YWx1ZS4NCiAgICAgICAgLlBhcmFtZXRlcg0KICAgICAgICAgICAgLUhpdmUgJ0hLTE0nIC1QYXRoICdcU29mdHdhcmVcUG9saWNpZXNcTWljcm9zb2Z0XFdpbmRvd3NcU3lzdGVtJyAtTmFtZSAnQ2xlYW51cFByb2ZpbGVzJw0KICAgICAgICAuRXhhbXBsZQ0KICAgICAgICAgICAgR2V0LVJlZ2lzdHJ5IC1IaXZlICdIS0xNJyAtUGF0aCAnXFNvZnR3YXJlXFBvbGljaWVzXE1pY3Jvc29mdFxXaW5kb3dzXFN5c3RlbScgLU5hbWUgJ0NsZWFudXBQcm9maWxlcycNCiAgICAgICAgLklucHV0cw0KICAgICAgICAgICAgc3RyaW5nDQogICAgICAgIC5PdXRwdXRzDQogICAgICAgICAgICBzdHJpbmcNCiAgICAjPg0KICAgIHBhcmFtICgNCiAgICAgICAgW3BhcmFtZXRlcihtYW5kYXRvcnkpXSBbc3RyaW5nXSAkSGl2ZSwNCiAgICAgICAgW3BhcmFtZXRlcihtYW5kYXRvcnkpXSBbc3RyaW5nXSAkUGF0aCwNCiAgICAgICAgW3BhcmFtZXRlcihtYW5kYXRvcnkpXSBbc3RyaW5nXSAkTmFtZQ0KICAgICkNCiAgICAkcmVnUGF0aCA9ICd7MH06XHsxfScgLWYgJEhpdmUsICRQYXRoDQogICAgJHJlZ1ZhbHVlcyA9IEdldC1JdGVtUHJvcGVydHkgLVBhdGggJHJlZ1BhdGggLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUNCiAgICBpZiAoISRyZWdWYWx1ZXMpDQogICAgew0KICAgICAgICByZXR1cm4gJG51bGwNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICRyZWdWYWx1ZXMuJE5hbWUNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIFZlcmlmeU1pY3Jvc29mdEZpbGVTaWduYXR1cmUgew0KICAgIDwjDQogICAgICAgIC5TeW5vcHNpcw0KICAgICAgICAgICAgVmVyaWZpZXMgaWYgYSBmaWxlIGlzIE1pY3Jvc29mdCBTaWduZWQNCiAgICAgICAgLkRlc2NyaXB0aW9uDQogICAgICAgICAgICBDaGVja3MgaWYgYSBmaWxlIGlzIHNpZ25lZCBieSBhIGNlcnRpZmljYXRlIHdpdGggYSBtaWNyb3NvZnQgc3ViamVjdCBhbmQgcm9vdGVkIHRvIHRoZSBtaWNyb3NvZnQgcm9vdA0KICAgICAgICAuUGFyYW1ldGVyDQogICAgICAgICAgICAtRmlsZVBhdGgNCiAgICAgICAgLkV4YW1wbGUNCiAgICAgICAgICAgIFZlcmlmeU1pY3Jvc29mdEZpbGVTaWduYXR1cmUgLUZpbGVQYXRoICdDOlx0ZW1wXHRlbXAuY2FiJw0KICAgICAgICAuSW5wdXRzDQogICAgICAgICAgICBzdHJpbmcuDQogICAgICAgIC5PdXRwdXRzDQogICAgICAgICAgICBOb25lLg0KICAgICM+DQogICAgDQogICAgcGFyYW0gKA0KICAgICAgICBbcGFyYW1ldGVyKG1hbmRhdG9yeSldIFtzdHJpbmddICRGaWxlUGF0aA0KICAgICkNCiAgICANCiAgICAkc2lnbmF0dXJlID0gR2V0LUF1dGhlbnRpY29kZVNpZ25hdHVyZSAtRmlsZVBhdGggJEZpbGVQYXRoDQogICAgV3JpdGUtSG9zdCAnRGlnaXRhbCBzaWduYXR1cmUgdmFsaWRpdHk6JyAkc2lnbmF0dXJlLnN0YXR1cw0KICAgIFdyaXRlLUhvc3QgJ1NpZ25lciBDZXJ0aWZpY2F0ZSBzdWJqZWN0OicgJHNpZ25hdHVyZS5zaWduZXJDZXJ0aWZpY2F0ZS5zdWJqZWN0DQogICAgJGNlcnQgPSAkc2lnbmF0dXJlLlNpZ25lckNlcnRpZmljYXRlDQogICAgJGNoYWluID0gTmV3LU9iamVjdCAtVHlwZU5hbWUgU3lzdGVtLlNlY3VyaXR5LkNyeXB0b2dyYXBoeS5YNTA5Q2VydGlmaWNhdGVzLlg1MDlDaGFpbg0KICAgICRjaGFpbi5CdWlsZCgkY2VydCkNCiAgICAkcm9vdENlcnRTdWJqZWN0ID0gKCRjaGFpbi5DaGFpbkVsZW1lbnRzIHwgU2VsZWN0LU9iamVjdCAtTGFzdCAxKS5DZXJ0aWZpY2F0ZS5TdWJqZWN0DQogICAgV3JpdGUtSG9zdCAnUm9vdCBDZXJ0aWZpY2F0ZSBzdWJqZWN0OicgJHJvb3RDZXJ0U3ViamVjdA0KICAgIFdyaXRlLUhvc3QgJ0NoYWluIFN0YXR1czonICgkY2hhaW4uQ2hhaW5TdGF0dXMgfCBGb3JtYXQtTGlzdCkNCiAgICANCiAgICBpZiAoJGNoYWluLkNoYWluU3RhdHVzKQ0KICAgIHsNCiAgICAgICAgZm9yZWFjaCAoJGNoYWluU3RhdHVzIGluICRjaGFpbi5DaGFpblN0YXR1cykNCiAgICAgICAgew0KICAgICAgICAgICAgIyBXZSBhcmUgb25seSBva2F5IHdpdGggY2hhaW4gc3RhdHVzZXMgdGhhdCBhcmUgTm9FcnJvcigwKSBvciBOb3RUaW1lVmFsaWQoMSkNCiAgICAgICAgICAgIGlmICgoJGNoYWluU3RhdHVzLlN0YXR1cyAtZXEgMCkgLW9yICgkY2hhaW5TdGF0dXMuU3RhdHVzIC1lcSAxKSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRocm93ICJDaGFpbiBOb3QgVHJ1c3RlZC4gQ2hhaW4gU3RhdHVzOiAkY2hhaW5TdGF0dXMuU3RhdHVzIg0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgICMgQ2hlY2sgdGhhdCB0aGUgc2lnbmluZyBjZXJ0IGlzIHN5bnRhY3RpY2FsbHkgdmFsaWQsIGhhcyB0aGUgTWljcm9zb2Z0IHN1YmplY3QsIGlzIHJvb3RlZCB0byB0aGUgTWljcm9zb2Z0IHJvb3QgY2VydCwgYW5kIGhhcyBubyBlcnJvcnMgaW4gdGhlIGNoYWluDQogICAgaWYgKC1ub3QgKCRzaWduYXR1cmUuc3RhdHVzIC1lcSAndmFsaWQnIC1hbmQgKCRzaWduYXR1cmUuc2lnbmVyQ2VydGlmaWNhdGUuc3ViamVjdCAtZXEgJ0NOPU1pY3Jvc29mdCBDb3Jwb3JhdGlvbiwgTz1NaWNyb3NvZnQgQ29ycG9yYXRpb24sIEw9UmVkbW9uZCwgUz1XYXNoaW5ndG9uLCBDPVVTJyAtYW5kICgkcm9vdENlcnRTdWJqZWN0IC1lcSAnQ049TWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTEsIE89TWljcm9zb2Z0IENvcnBvcmF0aW9uLCBMPVJlZG1vbmQsIFM9V2FzaGluZ3RvbiwgQz1VUycpKSkpDQogICAgew0KICAgICAgICB0aHJvdyAiTm90IHNpZ25lZCBieSBNaWNyb3NvZnQgUFJTIENlcnQgd2l0aCBNaWNyb3NvZnQgUm9vdCINCiAgICB9DQp9DQoNCmZ1bmN0aW9uIEluc3RhbGxDbGllbnRMaWJyYXJ5DQp7DQogICAgaWYgKCRDYWJDbGllbnRMaWJyYXJ5VmVyc2lvbiAtbmUgJEN1cnJlbnRDbGllbnRMaWJyYXJ5VmVyc2lvbikgDQogICAgew0KICAgICAgICBXcml0ZS1Ib3N0ICJJbnN0YWxsaW5nIENsaWVudCBMaWJyYXJ5IFZlcnNpb24gJENhYkNsaWVudExpYnJhcnlWZXJzaW9uIg0KICAgICAgICBXcml0ZS1Ib3N0ICdDcmVhdGluZyBDbGllbnQgTGlicmFyeSB0ZW1wIGRpcmVjdG9yeScNCiAgICAgICAgJENsaWVudExpYnJhcnlUZW1wUGF0aCA9ICIkRXhwYW5kZWRDYWJEaXJlY3RvcnlcQ2xpZW50TGlicmFyeSINCiAgICAgICAgTmV3LUl0ZW0gLUZvcmNlIC1JdGVtVHlwZSBkaXJlY3RvcnkgLVBhdGggIiRFeHBhbmRlZENhYkRpcmVjdG9yeVxDbGllbnRMaWJyYXJ5Ig0KICAgICAgICBFeHBhbmQtQXJjaGl2ZSAtTGl0ZXJhbFBhdGggIiRFeHBhbmRlZENhYkRpcmVjdG9yeVxNbWRCcm9rZXIuemlwIiAtRGVzdGluYXRpb25QYXRoICRDbGllbnRMaWJyYXJ5VGVtcFBhdGgNCiAgICAgICAgJENsaWVudExpYnJhcnlJbnN0YWxsU2NyaXB0ID0gIiRDbGllbnRMaWJyYXJ5VGVtcFBhdGhcSW5zdGFsbE1tZEJyb2tlci5wczEiDQogICAgICAgICYgJENsaWVudExpYnJhcnlJbnN0YWxsU2NyaXB0IC1EaXNhYmxlVHJhbnNjcmlwdCAkdHJ1ZQ0KCQlXcml0ZS1Ib3N0ICJFeGl0IGNvZGUgZnJvbSBpbnN0YWxsaW5nIENsaWVudCBMaWJyYXJ5OiAkTEFTVEVYSVRDT0RFIiANCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgV3JpdGUtSG9zdCAnU2tpcHBpbmcgQ2xpZW50IExpYnJhcnkgSW5zdGFsbGF0aW9uJw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gSW5zdGFsbE1hbmFnZW1lbnRFeHRlbnNpb24NCnsNCiAgICBpZiAoJENhYk1hbmFnZW1lbnRFeHRlbnNpb25WZXJzaW9uIC1uZSAkQ3VycmVudE1hbmFnZW1lbnRFeHRlbnNpb25WZXJzaW9uKSANCiAgICB7DQogICAgICAgICRDbWRBZ2VudExvZ1BhdGggPSAiJExvZ1BhdGhcQXV0b3BhdGNoQ2xvdWRNYW5hZ2VkRGVza3RvcEV4dGVuc2lvbkluc3RhbGwiICsgJHN0YW1wRGF0ZS5Ub0ZpbGVUaW1lVXRjKCkgKyAnLmxvZycNCiAgICAgICAgJE1hbmFnZW1lbnRFeHRlbnNpb25Nc2kgPSAiJEV4cGFuZGVkQ2FiRGlyZWN0b3J5XGNtZGV4dGVuc2lvbi5tc2kiDQogICAgICAgIFdyaXRlLUhvc3QgIkluc3RhbGxpbmcgTWFuYWdlbWVudCBFeHRlbnNpb24gVmVyc2lvbiAkQ2FiTWFuYWdlbWVudEV4dGVuc2lvblZlcnNpb24iDQogICAgICAgIHRyeQ0KICAgICAgICB7DQogICAgICAgICAgICBWZXJpZnlNaWNyb3NvZnRGaWxlU2lnbmF0dXJlIC1GaWxlUGF0aCAkTWFuYWdlbWVudEV4dGVuc2lvbk1zaQ0KICAgICAgICB9DQogICAgICAgIGNhdGNoDQogICAgICAgIHsNCiAgICAgICAgICAgIFdyaXRlLUhvc3QgJ01hbmFnZW1lbnQgRXh0ZW5zaW9uIE1TSSBpcyBub3QgdHJ1c3RlZC4gU2tpcHBpbmcnDQogICAgICAgICAgICByZXR1cm4NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgIyBBdHRlbXB0IHRvIHNhdmUgY2VydGFpbiB2YWx1ZXMgZm9yIHJlaW5zdGFsbCBzY2VuYXJpb3MNCiAgICAgICAgJElvVERldmljZUlkID0gR2V0LVJlZ2lzdHJ5IC1IaXZlICdIS0xNJyAtUGF0aCAiJENtZFJlZ2lzdHJ5S2V5XFNldHRpbmdzIiAtTmFtZSAnSW9URGV2aWNlSWQnDQogICAgICAgICRJb1RIb3N0TmFtZSA9IEdldC1SZWdpc3RyeSAtSGl2ZSAnSEtMTScgLVBhdGggIiRDbWRSZWdpc3RyeUtleVxTZXR0aW5ncyIgLU5hbWUgJ0lvVEhvc3ROYW1lJw0KICAgICAgICAkRGV2aWNlUmVnaXN0cmF0aW9uVHlwZSA9IEdldC1SZWdpc3RyeSAtSGl2ZSAnSEtMTScgLVBhdGggIiRDbWRSZWdpc3RyeUtleVxTZXR0aW5ncyIgLU5hbWUgJ0RldmljZVJlZ2lzdHJhdGlvblR5cGUnDQoJCSRQYXJ0bmVycyA9IEdldC1SZWdpc3RyeSAtSGl2ZSAnSEtMTScgLVBhdGggIiRDbWRSZWdpc3RyeUtleVxTZXR0aW5ncyIgLU5hbWUgJ1BhcnRuZXJzJw0KCQkkUGFydG5lcnNOZXh0U3luY1RpbWUgPSBHZXQtUmVnaXN0cnkgLUhpdmUgJ0hLTE0nIC1QYXRoICIkQ21kUmVnaXN0cnlLZXlcU2V0dGluZ3MiIC1OYW1lICdQYXJ0bmVyc05leHRTeW5jVGltZScNCgkJDQogICAgICAgICRDbGllbnRBZ2VudE5hbWVzID0gQCgNCiAgICAgICAgICAgICJNaWNyb3NvZnQgQ01EIENsaWVudCBBZ2VudCINCiAgICAgICAgICAgICJXaW5kb3dzIENsaWVudCBBZ2VudCIsDQogICAgICAgICAgICAiTWljcm9zb2Z0IENsb3VkIE1hbmFnZWQgRGVza3RvcCBFeHRlbnNpb24iDQogICAgICAgICkNCg0KICAgICAgICBmb3JlYWNoICgkQWdlbnROYW1lIGluICRDbGllbnRBZ2VudE5hbWVzKXsNCiAgICAgICAgICAgICRhZ2VudCA9IEdldC1XbWlPYmplY3QgLWNsYXNzIFdpbjMyX1Byb2R1Y3QgLUZpbHRlciAiTmFtZT1gJyQoJEFnZW50TmFtZSlgJyINCiAgICAgICAgICAgIGlmICgkYWdlbnQpIHsNCiAgICAgICAgICAgICAgICAkcHJvZHVjdENvZGUgPSAkYWdlbnQuSWRlbnRpZnlpbmdOdW1iZXINCiAgICAgICAgICAgICAgICAkY3VycmVudFZlcnNpb24gPSBHZXQtSXRlbVByb3BlcnR5VmFsdWUgLVBhdGggIkhLTE06XFNPRlRXQVJFXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwkcHJvZHVjdENvZGUiIC1OYW1lICJEaXNwbGF5VmVyc2lvbiINCiAgICAgICAgICAgICAgICAkTVNJVW5pbnN0YWxsQXJndW1lbnRzID0gQCgNCiAgICAgICAgICAgICAgICAgICAgIi94Ig0KICAgICAgICAgICAgICAgICAgICAkcHJvZHVjdENvZGUNCiAgICAgICAgICAgICAgICAgICAgIi9xIg0KICAgICAgICAgICAgICAgICAgICAiL25vcmVzdGFydCINCiAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgU3RhcnQtUHJvY2VzcyAibXNpZXhlYy5leGUiIC1Bcmd1bWVudExpc3QgJE1TSVVuaW5zdGFsbEFyZ3VtZW50cyAtV2FpdCAtTm9OZXdXaW5kb3cNCiAgICAgICAgICAgICAgICBXcml0ZS1Ib3N0ICJGaW5pc2hlZCB1bmluc3RhbGwgY29tbWFuZCBsaW5lIHdpdGggcGFyYW0gJCgkTVNJVW5pbnN0YWxsQXJndW1lbnRzKSBmb3IgYWdlbnQgYCckKCRBZ2VudE5hbWUpYCcgd2l0aCB2ZXJzaW9uICQoJGN1cnJlbnRWZXJzaW9uKSINCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KCQkNCgkJIyBSZXN0b3JlIFJlZyBWYWx1ZXMgZm9yIFVwZ3JhZGUgU2NlbmFyaW8NCgkJaWYgKCRJb1REZXZpY2VJZCkNCiAgICAgICAgew0KICAgICAgICAgICAgV3JpdGUtSG9zdCAiUmV3cml0aW5nIElvVERldmljZUlkOiAkSW9URGV2aWNlSWQiDQogICAgICAgICAgICBTZXQtUmVnaXN0cnkgLUhpdmUgJ0hLTE0nIC1QYXRoICIkQ21kUmVnaXN0cnlLZXlcU2V0dGluZ3MiIC1OYW1lICdJb1REZXZpY2VJZCcgLVZhbHVlICRJb1REZXZpY2VJZCAtVHlwZSAnU3RyaW5nJw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKCRJb1RIb3N0TmFtZSkNCiAgICAgICAgew0KICAgICAgICAgICAgV3JpdGUtSG9zdCAiUmV3cml0aW5nIElvVEhvc3ROYW1lOiAkSW9USG9zdE5hbWUiDQogICAgICAgICAgICBTZXQtUmVnaXN0cnkgLUhpdmUgJ0hLTE0nIC1QYXRoICIkQ21kUmVnaXN0cnlLZXlcU2V0dGluZ3MiIC1OYW1lICdJb1RIb3N0TmFtZScgLVZhbHVlICRJb1RIb3N0TmFtZSAtVHlwZSAnU3RyaW5nJw0KICAgICAgICB9DQoJCQ0KCQlpZiAoJERldmljZVJlZ2lzdHJhdGlvblR5cGUpDQogICAgICAgIHsNCiAgICAgICAgICAgIFdyaXRlLUhvc3QgIlJld3JpdGluZyBEZXZpY2VSZWdpc3RyYXRpb25UeXBlOiAkRGV2aWNlUmVnaXN0cmF0aW9uVHlwZSINCiAgICAgICAgICAgIFNldC1SZWdpc3RyeSAtSGl2ZSAnSEtMTScgLVBhdGggIiRDbWRSZWdpc3RyeUtleVxTZXR0aW5ncyIgLU5hbWUgJ0RldmljZVJlZ2lzdHJhdGlvblR5cGUnIC1WYWx1ZSAkRGV2aWNlUmVnaXN0cmF0aW9uVHlwZSAtVHlwZSAnU3RyaW5nJw0KICAgICAgICB9DQoJCQ0KCQlpZiAoJFBhcnRuZXJzKQ0KICAgICAgICB7DQogICAgICAgICAgICBXcml0ZS1Ib3N0ICJSZXdyaXRpbmcgUGFydG5lcnM6ICRQYXJ0bmVycyINCiAgICAgICAgICAgIFNldC1SZWdpc3RyeSAtSGl2ZSAnSEtMTScgLVBhdGggIiRDbWRSZWdpc3RyeUtleVxTZXR0aW5ncyIgLU5hbWUgJ1BhcnRuZXJzJyAtVmFsdWUgJFBhcnRuZXJzIC1UeXBlICdTdHJpbmcnDQogICAgICAgIH0NCgkJDQoJCWlmICgkUGFydG5lcnNOZXh0U3luY1RpbWUpDQogICAgICAgIHsNCiAgICAgICAgICAgIFdyaXRlLUhvc3QgIlJld3JpdGluZyBQYXJ0bmVyc05leHRTeW5jVGltZTogJFBhcnRuZXJzTmV4dFN5bmNUaW1lIg0KICAgICAgICAgICAgU2V0LVJlZ2lzdHJ5IC1IaXZlICdIS0xNJyAtUGF0aCAiJENtZFJlZ2lzdHJ5S2V5XFNldHRpbmdzIiAtTmFtZSAnUGFydG5lcnNOZXh0U3luY1RpbWUnIC1WYWx1ZSAkUGFydG5lcnNOZXh0U3luY1RpbWUgLVR5cGUgJ1N0cmluZycNCiAgICAgICAgfQ0KCQkNCiAgICAgICAgJE1TSUluc3RhbGxBcmd1bWVudHMgPSBAKA0KICAgICAgICAgICAgIi9pIg0KICAgICAgICAgICAgIiRNYW5hZ2VtZW50RXh0ZW5zaW9uTXNpIg0KICAgICAgICAgICAgIlNWQ0VOVj0kQ2FiTWFuYWdlbWVudEV4dGVuc2lvbkVudmlyb25tZW50Ig0KICAgICAgICAgICAgIi9xYiEiDQogICAgICAgICAgICAiL2wqdiAkQ21kQWdlbnRMb2dQYXRoIg0KICAgICAgICAgICAgIi9ub3Jlc3RhcnQiDQogICAgICAgICkNCiAgICAgICAgU3RhcnQtUHJvY2VzcyAibXNpZXhlYy5leGUiIC1Bcmd1bWVudExpc3QgJE1TSUluc3RhbGxBcmd1bWVudHMgLVdhaXQgLU5vTmV3V2luZG93DQogICAgICAgIA0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBXcml0ZS1Ib3N0ICdTa2lwcGluZyBNYW5hZ2VtZW50IEV4dGVuc2lvbiBJbnN0YWxsYXRpb24nDQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBDbGVhbnVwIHsNCiAgICA8Iw0KICAgICAgICAuU3lub3BzaXMNCiAgICAgICAgICAgIENsZWFucyB1cCBmaWxlcywgZGlyZWN0b3JpZXMsIGFuZCBzY2hlZHVsZWQgdGFza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5zdGFsbCBwcm9jZXNzIGV4Y2VwdCB0aGlzIHNjcmlwdA0KICAgICAgICAuRGVzY3JpcHRpb24NCiAgICAgICAgICAgIENsZWFucyB1cCBmaWxlcywgZGlyZWN0b3JpZXMsIGFuZCBzY2hlZHVsZWQgdGFza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5zdGFsbCBwcm9jZXNzIGV4Y2VwdCB0aGlzIHNjcmlwdA0KICAgICAgICAuUGFyYW1ldGVyDQogICAgICAgICAgICAtU3VjY2Vzc2Z1bFJ1bg0KICAgICAgICAuRXhhbXBsZQ0KICAgICAgICAgICAgQ2xlYW51cCAtU3VjY2Vzc2Z1bFJ1biAkdHJ1ZQ0KICAgICAgICAuSW5wdXRzDQogICAgICAgICAgICBib29sZWFuLg0KICAgICAgICAuT3V0cHV0cw0KICAgICAgICAgICAgTm9uZS4NCiAgICAjPiAgDQogICAgcGFyYW0gKA0KICAgICAgICBbYm9vbGVhbl0gJFN1Y2Nlc3NmdWxSdW4gPSAkZmFsc2UNCiAgICApDQogICAgDQogICAgY2QgJFBTU2NyaXB0Um9vdA0KICAgIGlmIChUZXN0LVBhdGggJENhYkRpcmVjdG9yeSkgDQogICAgew0KICAgICAgICBXcml0ZS1Ib3N0ICdSZW1vdmluZyBDYWIgZGlyZWN0b3J5Jw0KICAgICAgICBSZW1vdmUtSXRlbSAtTGl0ZXJhbFBhdGggJENhYkRpcmVjdG9yeSAtRm9yY2UgLVJlY3Vyc2UNCiAgICB9DQogICAgDQogICAgaWYgKCRTdWNjZXNzZnVsUnVuKQ0KICAgIHsNCiAgICAgICAgIyBDbGVhbnVwIHNjaGVkdWxlZCB0YXNrIGlmIGl0IGV4aXN0cw0KICAgICAgICBVbnJlZ2lzdGVyLVNjaGVkdWxlZFRhc2sgLVRhc2tOYW1lICdBdXRvcGF0Y2ggQ2xpZW50IFNldHVwIEluc3RhbGxlcicgLUNvbmZpcm06JGZhbHNlIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlDQogICAgICAgIFdyaXRlLUhvc3QgIltTVUNDRVNTRlVMX0FVVE9QQVRDSF9DTElFTlRfU0VUVVBdIg0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICBXcml0ZS1Ib3N0ICJbRkFJTEVEX0FVVE9QQVRDSF9DTElFTlRfU0VUVVBdIg0KICAgIH0NCiAgICANCiAgICBpZiAoLW5vdCAkRGlzYWJsZVRyYW5zY3JpcHQpDQogICAgeyANCiAgICAgICAgIyBTdG9wIExvZ2dpbmcNCiAgICAgICAgU3RvcC1UcmFuc2NyaXB0IC1WZXJib3NlDQogICAgfQ0KfQ0KDQojIElmIFBvd2Vyc2hlbGwgaXMgcnVubmluZyB0aGUgMzItYml0IHZlcnNpb24gb24gYSA2NC1iaXQgbWFjaGluZSwgd2UgbmVlZCB0byBmb3JjZSBwb3dlcnNoZWxsIHRvIHJ1biBpbg0KIyA2NC1iaXQgbW9kZS4NCmlmICgkZW52OlBST0NFU1NPUl9BUkNISVRFVzY0MzIgLWVxICJBTUQ2NCIpIHsNCiAgICBpZiAoJG15SW52b2NhdGlvbi5MaW5lKSB7DQogICAgICAgICYiJGVudjpXSU5ESVJcc3lzbmF0aXZlXHdpbmRvd3Nwb3dlcnNoZWxsXHYxLjBccG93ZXJzaGVsbC5leGUiIC1Ob25JbnRlcmFjdGl2ZSAtTm9Qcm9maWxlICRteUludm9jYXRpb24uTGluZQ0KICAgIH0NCgllbHNlDQoJew0KICAgICAgICAmIiRlbnY6V0lORElSXHN5c25hdGl2ZVx3aW5kb3dzcG93ZXJzaGVsbFx2MS4wXHBvd2Vyc2hlbGwuZXhlIiAtTm9uSW50ZXJhY3RpdmUgLU5vUHJvZmlsZSAtZmlsZSAiJCgkbXlJbnZvY2F0aW9uLkludm9jYXRpb25OYW1lKSIgJGFyZ3MNCiAgICB9DQogICAgZXhpdCAkbGFzdGV4aXRjb2RlDQp9DQoNCg0KJENhYkRpcmVjdG9yeSA9ICIkZW52OlN5c3RlbURyaXZlXFByb2dyYW1EYXRhXE1pY3Jvc29mdFxBdXRvcGF0Y2hTZXR1cCINCiRMb2dQYXRoID0gIiRFbnY6d2luZGlyXGNjbVxsb2dzIg0KJExvZ1ByZWZpeCA9ICIkTG9nUGF0aFxBdXRvcGF0Y2hDbGllbnRTZXR1cEluc3RhbGxUYXNrIg0KJHN0YW1wRGF0ZSA9IEdldC1EYXRlDQojIFN0YXJ0IExvZ2dpbmcNCmlmICgtbm90ICREaXNhYmxlVHJhbnNjcmlwdCkNCnsNCiAgICAkbG9nRmlsZSA9ICRMb2dQcmVmaXggKyAkc3RhbXBEYXRlLlRvRmlsZVRpbWVVdGMoKSArICcubG9nJw0KICAgIFN0YXJ0LVRyYW5zY3JpcHQgLVBhdGggJGxvZ0ZpbGUNCn0NCg0KIyBSZW1vdmUgQXV0b3BhdGNoIEluc3RhbGwgbG9ncyB0aGF0IGFyZSA3KyBkYXlzIG9sZA0KJGN1dE9mZkRhdGUgPSAoR2V0LURhdGUpLkFkZERheXMoLTcpLlRvRmlsZVRpbWVVdGMoKQ0KZm9yZWFjaCAoJGxvZ0ZpbGUgaW4gR2V0LUNoaWxkSXRlbSAkTG9nUGF0aCkgew0KICAgIGlmICgkbG9nRmlsZS5OYW1lLlN0YXJ0c1dpdGgoJExvZ1ByZWZpeCkgLWFuZCAkbG9nRmlsZS5FeHRlbnNpb24uRXF1YWxzKCcubG9nJykpIHsNCiAgICAgICAgJGxvZ0RhdGVTdHIgPSAkbG9nRmlsZS5OYW1lLlN1YnN0cmluZygkTG9nUHJlZml4Lkxlbmd0aCkNCiAgICAgICAgJGxvZ0RhdGVTdHIgPSAkbG9nRGF0ZVN0ci5TdWJzdHJpbmcoMCwgJGxvZ0RhdGVTdHIuSW5kZXhPZignLicpKQ0KICAgICAgICAkbG9nRGF0ZSA9IDANCiAgICAgICAgaWYgKFt1aW50NjRdOjpUcnlQYXJzZSgkbG9nRGF0ZVN0ciwgW3JlZl0kbG9nRGF0ZSkgLWFuZCAkbG9nRGF0ZSAtbHQgJGN1dE9mZkRhdGUpIHsNCiAgICAgICAgICAgIFJlbW92ZS1JdGVtICgnezB9ezF9JyAtZiAkTG9nUGF0aCwgJGxvZ0ZpbGUpDQogICAgICAgICAgICBXcml0ZS1Ib3N0ICJSZW1vdmVkIG9sZCBsb2cgZmlsZSAkbG9nRmlsZSINCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KJE1tZFJlZ2lzdHJ5S2V5ID0gJ1xTb2Z0d2FyZVxNaWNyb3NvZnRcTU1EJw0KJENtZFJlZ2lzdHJ5S2V5ID0gJ1NvZnR3YXJlXE1pY3Jvc29mdFxDbG91ZE1hbmFnZW1lbnREZXNrdG9wXEV4dGVuc2lvbicNCg0KI0NoZWNrIEluc3RhbGxlZCB2ZXJzaW9ucyBmb3IgQ2xpZW50IExpYnJhcnkgYW5kIE1hbmFnZW1lbnQgRXh0ZW5zaW9uDQokQ3VycmVudENsaWVudExpYnJhcnlWZXJzaW9uID0gR2V0LVJlZ2lzdHJ5IC1IaXZlICdIS0xNJyAtUGF0aCAiJE1tZFJlZ2lzdHJ5S2V5XEJyb2tlciIgLU5hbWUgJ1ZlcnNpb24nDQokQ3VycmVudE1hbmFnZW1lbnRFeHRlbnNpb25WZXJzaW9uID0gR2V0LVJlZ2lzdHJ5IC1IaXZlICdIS0xNJyAtUGF0aCAiJENtZFJlZ2lzdHJ5S2V5XFByb2R1Y3RJbmZvIiAtTmFtZSAnVmVyc2lvbicNCldyaXRlLUhvc3QgIkluc3RhbGxlZCBDbGllbnQgTGlicmFyeSBWZXJzaW9uOiAkQ3VycmVudENsaWVudExpYnJhcnlWZXJzaW9uOyBJbnN0YWxsZWQgTWFuYWdlbWVudCBFeHRlbnNpb24gVmVyaXNvbjogJEN1cnJlbnRNYW5hZ2VtZW50RXh0ZW5zaW9uVmVyc2lvbiINCg0KaWYgKCgkQ2xpZW50TGlicmFyeVZlcnNpb24gLWVxICRDdXJyZW50Q2xpZW50TGlicmFyeVZlcnNpb24pIC1hbmQgKCRDbG91ZE1hbmFnZW1lbnRFeHRlbnNpb25WZXJzaW9uIC1lcSAkQ3VycmVudE1hbmFnZW1lbnRFeHRlbnNpb25WZXJzaW9uKSkNCnsNCiAgICBXcml0ZS1Ib3N0ICdDbGllbnQgTGlicmFyeSBhbmQgTWFuYWdlbWVudCBFeHRlbnNpb24gYXJlIHVwLXRvLWRhdGUuIEV4aXRpbmcgSW5zdGFsbGF0aW9uJw0KICAgIENsZWFudXAgLVN1Y2Nlc3NmdWxSdW4gJHRydWUNCiAgICBleGl0IDANCn0NCg0KJEV4cGFuZGVkQ2FiRGlyZWN0b3J5ID0gIiRlbnY6U3lzdGVtRHJpdmVcUHJvZ3JhbURhdGFcTWljcm9zb2Z0XEF1dG9wYXRjaFNldHVwXEZpbGVzIg0KJENhYkZpbGUgPSAiJENhYkRpcmVjdG9yeVxBdXRvcGF0Y2hTZXR1cFBhY2thZ2UuY2FiIg0KDQppZiAoVGVzdC1QYXRoICRDYWJEaXJlY3RvcnkpIA0Kew0KICAgIFdyaXRlLUhvc3QgJ1JlbW92aW5nIG9sZCBDYWIgZGlyZWN0b3J5Jw0KICAgIFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkQ2FiRGlyZWN0b3J5IC1Gb3JjZSAtUmVjdXJzZQ0KfQ0KV3JpdGUtSG9zdCAnQ3JlYXRpbmcgQ2FiIGRpcmVjdG9yeScNCk5ldy1JdGVtIC1Gb3JjZSAtSXRlbVR5cGUgZGlyZWN0b3J5IC1QYXRoICRDYWJEaXJlY3RvcnkNCg0KV3JpdGUtSG9zdCAiRG93bmxvYWRpbmcgQ2FiIGZyb20gJGNhYkRvd25sb2FkVXJpIg0KdHJ5IA0Kew0KICAgIEludm9rZS1XZWJSZXF1ZXN0IC1VUkkgJGNhYkRvd25sb2FkVXJpIC1PdXRGaWxlICRDYWJGaWxlDQp9DQpjYXRjaA0Kew0KICAgIFdyaXRlLUhvc3QgJF8uRXhjZXB0aW9uLk1lc3NhZ2Vgbg0KICAgIFdyaXRlLUhvc3QgIkZhaWxlZCB0byBkb3dubG9hZCBjYWIgZnJvbSAkY2FiRG93bmxvYWRVcmkiDQp9DQoNCmlmICgtbm90IChUZXN0LVBhdGggJENhYkZpbGUgLVBhdGhUeXBlIExlYWYpKQ0Kew0KICAgIFdyaXRlLUhvc3QgIkRvd25sb2FkaW5nIENhYiBmcm9tICRjYWJEb3dubG9hZFVyaUJhY2t1cCINCiAgICB0cnkgDQogICAgew0KICAgICAgICBJbnZva2UtV2ViUmVxdWVzdCAtVVJJICRjYWJEb3dubG9hZFVyaUJhY2t1cCAtT3V0RmlsZSAkQ2FiRmlsZQ0KICAgIH0NCiAgICBjYXRjaA0KICAgIHsNCiAgICAgICAgV3JpdGUtSG9zdCAkXy5FeGNlcHRpb24uTWVzc2FnZWBuDQogICAgICAgIFdyaXRlLUhvc3QgIkZhaWxlZCB0byBkb3dubG9hZCBjYWIgZnJvbSAkY2FiRG93bmxvYWRVcmlCYWNrdXAiDQogICAgICAgIENsZWFudXANCiAgICAgICAgZXhpdCAyDQogICAgfQ0KfQ0KDQojVmVyaWZ5IG1pY3Jvc29mdCBzaWduYXR1cmUgb24gY2FiDQp0cnkNCnsNCiAgICBWZXJpZnlNaWNyb3NvZnRGaWxlU2lnbmF0dXJlIC1GaWxlUGF0aCAkQ2FiRmlsZQ0KfQ0KY2F0Y2gNCnsNCiAgICBXcml0ZS1Ib3N0ICdDYWIgaXMgbm90IHRydXN0ZWQuIEV4aXRpbmcnDQogICAgQ2xlYW51cA0KICAgIGV4aXQgMw0KfQ0KDQpXcml0ZS1Ib3N0ICdDcmVhdGluZyBleHBhbmRlZCBDYWIgZGlyZWN0b3J5Jw0KTmV3LUl0ZW0gLUZvcmNlIC1JdGVtVHlwZSBkaXJlY3RvcnkgLVBhdGggJEV4cGFuZGVkQ2FiRGlyZWN0b3J5DQoNCldyaXRlLUhvc3QgJ0V4dHJhY3QgY2FiJw0KZXhwYW5kLmV4ZSAkQ2FiRmlsZSAtRjoqICRFeHBhbmRlZENhYkRpcmVjdG9yeQ0KDQpXcml0ZS1Ib3N0ICdQYXJzZSBjb25maWcgZmlsZScNCiRDb25maWdGaWxlTmFtZSA9ICIkRXhwYW5kZWRDYWJEaXJlY3RvcnlcY29uZmlnLmpzb24iDQokY29uZmlnUHJvcGVydGllcyA9IEB7fQ0KJGpzb24gPSBHZXQtQ29udGVudCAkQ29uZmlnRmlsZU5hbWUgfCBPdXQtU3RyaW5nDQooQ29udmVydEZyb20tSnNvbiAkanNvbikucHNvYmplY3QucHJvcGVydGllcyB8IEZvcmVhY2ggeyAkY29uZmlnUHJvcGVydGllc1skXy5OYW1lXSA9ICRfLlZhbHVlIH0NCiRDYWJNYW5hZ2VtZW50RXh0ZW5zaW9uRW52aXJvbm1lbnQgPSAkY29uZmlnUHJvcGVydGllc1snTWFuYWdlbWVudEV4dGVuc2lvbkVudmlyb25tZW50J10NCiRDYWJDbGllbnRMaWJyYXJ5VmVyc2lvbiA9ICRjb25maWdQcm9wZXJ0aWVzWydDbGllbnRMaWJyYXJ5VmVyc2lvbiddDQokQ2FiTWFuYWdlbWVudEV4dGVuc2lvblZlcnNpb24gPSAkY29uZmlnUHJvcGVydGllc1snTWFuYWdlbWVudEV4dGVuc2lvblZlcnNpb24nXQ0KV3JpdGUtSG9zdCAiQ2FiIENsaWVudCBMaWJyYXJ5IFZlcnNpb246ICRDYWJDbGllbnRMaWJyYXJ5VmVyc2lvbjsgQ2FiIE1hbmFnZW1lbnQgRXh0ZW5zaW9uIFZlcnNpb246ICRDYWJNYW5hZ2VtZW50RXh0ZW5zaW9uVmVyc2lvbiINCg0KSW5zdGFsbENsaWVudExpYnJhcnkNCkluc3RhbGxNYW5hZ2VtZW50RXh0ZW5zaW9uDQoNCiMgVmVyaWZ5IEluc3RhbGxhdGlvbnMNCiROZXdDbGllbnRMaWJyYXJ5VmVyc2lvbiA9IEdldC1SZWdpc3RyeSAtSGl2ZSAnSEtMTScgLVBhdGggIiRNbWRSZWdpc3RyeUtleVxCcm9rZXIiIC1OYW1lICdWZXJzaW9uJw0KJE5ld01hbmFnZW1lbnRFeHRlbnNpb25WZXJzaW9uID0gR2V0LVJlZ2lzdHJ5IC1IaXZlICdIS0xNJyAtUGF0aCAiJENtZFJlZ2lzdHJ5S2V5XFByb2R1Y3RJbmZvIiAtTmFtZSAnVmVyc2lvbicNCmlmICgoJENsaWVudExpYnJhcnlWZXJzaW9uIC1lcSAkTmV3Q2xpZW50TGlicmFyeVZlcnNpb24pIC1hbmQgKCRDbG91ZE1hbmFnZW1lbnRFeHRlbnNpb25WZXJzaW9uIC1lcSAkTmV3TWFuYWdlbWVudEV4dGVuc2lvblZlcnNpb24pKQ0Kew0KICAgIFdyaXRlLUhvc3QgJ0NsaWVudCBMaWJyYXJ5IGFuZCBNYW5hZ2VtZW50IEV4dGVuc2lvbiBoYXZlIGluc3RhbGxlZCBzdWNjZXNzZnVsbHkuIEV4aXRpbmcgSW5zdGFsbGF0aW9uJw0KCSMgU2V0dGluZyBBdXRvcGF0Y2ggcmVnaXN0cnkgdmFsdWUNCglTZXQtUmVnaXN0cnkgLUhpdmUgJ0hLTE0nIC1QYXRoICIkTW1kUmVnaXN0cnlLZXlcQnJva2VyIiAtTmFtZSAnQXV0b3BhdGNoJyAtVmFsdWUgJzEnIC1UeXBlICdEd29yZCcNCiAgICBDbGVhbnVwIC1TdWNjZXNzZnVsUnVuICR0cnVlDQogICAgZXhpdCAwDQp9DQplbHNlDQp7DQogICAgV3JpdGUtSG9zdCAnQ2xpZW50IExpYnJhcnkgYW5kIE1hbmFnZW1lbnQgRXh0ZW5zaW9uIGhhdmUgbm90IGluc3RhbGxlZCBzdWNjZXNzZnVsbHkuJw0KICAgIFdyaXRlLUhvc3QgIkV4cGVjdGVkIENsaWVudCBMaWJyYXJ5IFZlcnNpb246ICRDbGllbnRMaWJyYXJ5VmVyc2lvbjsgSW5zdGFsbGVkIENsaWVudCBMaWJyYXJ5IFZlcnNpb246ICROZXdDbGllbnRMaWJyYXJ5VmVyc2lvbi4iDQogICAgV3JpdGUtSG9zdCAiRXhwZWN0ZWQgTWFuYWdlbWVudCBFeHRlbnNpb24gVmVyc2lvbjogJENhYk1hbmFnZW1lbnRFeHRlbnNpb25WZXJzaW9uOyBJbnN0YWxsZWQgTWFuYWdlbWVudCBFeHRlbnNpb24gVmVyc2lvbjogJE5ld01hbmFnZW1lbnRFeHRlbnNpb25WZXJzaW9uLiINCiAgICBDbGVhbnVwDQogICAgZXhpdCA0DQp9'
if (-not (Test-Path $LogPath))
{
New-Item -Force -ItemType directory -Path $LogPath
}
Start-Transcript -Path $LogFile
#Cleanup lingering resources from previous runs
Setup
$content = [System.Convert]::FromBase64String($SystemScript)
New-Item -ItemType Directory -Force -Path $ScriptFolderPath
Set-Content -Path $SystemScriptPath -Value $content -Encoding Byte
$Trigger = New-ScheduledTaskTrigger -Once -At ((Get-Date).AddHours(4)) -RepetitionInterval (New-TimeSpan -Hours 4) # Specify the trigger settings
$Settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries
$User = "NT AUTHORITY\SYSTEM"
$Argument = "-ExecutionPolicy Bypass $SystemScriptPath"
$Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument $argument # Specify what program to run andtask with its parameters
Register-ScheduledTask -TaskName $ScheduledTaskName -Trigger $Trigger -User $User -Action $Action -Settings $Settings -RunLevel Highest -Force
$MaxRetries = 10
Start-ScheduledTask -TaskName $ScheduledTaskName
$ScheduledTask = Get-ScheduledTask -TaskName $ScheduledTaskName -ErrorAction SilentlyContinue
# Wait for the scheduled task to complete so its log can be read and uploaded
while (-not (($ScheduledTask.State -eq 'Ready') -or ($MaxRetries -eq 0)))
{
Write-Host "Waiting for scheduled task to complete"
Start-Sleep -seconds 60
$MaxRetries--
$ScheduledTask = Get-ScheduledTask -TaskName $ScheduledTaskName -ErrorAction SilentlyContinue
if (-not $ScheduledTask)
{
# The scheduled task was removed by the install script because it installed clients successfully
break
}
}
# Grab results from most recent log file and add them to the transcript
$InternalScriptPrefix = 'AutopatchClientSetupInstallTask'
foreach ($InstallLogFile in (Get-ChildItem $LogPath | Sort-Object LastAccessTime -Descending))
{
if ($InstallLogFile.Name.StartsWith($InternalScriptPrefix) -and $InstallLogFile.Extension.Equals('.log'))
{
Write-Host "----------[Start] Results from Install Task ----------"
$FullInstallLogPath = $LogPath + '\' + $InstallLogFile.Name
Get-Content $FullInstallLogPath
Write-Host "----------[End] Results from Install Task ----------"
break
}
}
if (-not $ScheduledTask)
{
# The scheduled task was removed by the install script because it installed clients successfully
Write-Host "[SUCCESSFUL_AUTOPATCH_CLIENT_SETUP_SCHEDULED]"
Cleanup
Stop-Transcript -Verbose
exit 0
}
if ($MaxRetries -ne 0)
{
# There was some error in attempting to install the clients
Write-Error "[FAILED_AUTOPATCH_CLIENT_SETUP_SCHEDULED]" -Category NotInstalled
}
else
{
# We timed out on waiting for the task to complete
Write-Error "[UNKNOWN_AUTOPATCH_CLIENT_SETUP_SCHEDULED]" -Category OperationTimeout
}
Stop-Transcript -Verbose
exit 8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment