diff --git a/ActiveSetup_AdminStudio/ActiveSetup.reg b/ActiveSetup_AdminStudio/ActiveSetup.reg new file mode 100644 index 0000000..db6883c Binary files /dev/null and b/ActiveSetup_AdminStudio/ActiveSetup.reg differ diff --git a/ActiveSetup_AdminStudio/readme.md b/ActiveSetup_AdminStudio/readme.md new file mode 100644 index 0000000..785d654 --- /dev/null +++ b/ActiveSetup_AdminStudio/readme.md @@ -0,0 +1,5 @@ +# Active Setup Template for AdminStudio + +This repository provides a **Windows Registry (.reg) template** to configure **Active Setup** for AdminStudio deployments. +It ensures applications are repaired or reinstalled per-user at login using MSI `msiexec`. + diff --git a/ActiveSetup_Example/ActiveSetup.reg b/ActiveSetup_Example/ActiveSetup.reg new file mode 100644 index 0000000..5390021 Binary files /dev/null and b/ActiveSetup_Example/ActiveSetup.reg differ diff --git a/ActiveSetup_Example/ScreenSaver.bat b/ActiveSetup_Example/ScreenSaver.bat new file mode 100644 index 0000000..566cfd8 --- /dev/null +++ b/ActiveSetup_Example/ScreenSaver.bat @@ -0,0 +1,3 @@ +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 0 /f +reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d 599940 /f +reg add "HKCU\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 0 /f \ No newline at end of file diff --git a/ActiveSetup_Example/install.bat b/ActiveSetup_Example/install.bat new file mode 100644 index 0000000..1d3c5f4 --- /dev/null +++ b/ActiveSetup_Example/install.bat @@ -0,0 +1,3 @@ +copy "%~dp0screensaver.bat" c:\windows\screensaver.bat /Y +regedit /s "%~dp0activeSetup.reg" +pause \ No newline at end of file diff --git a/ActiveSetup_Example/readme.md b/ActiveSetup_Example/readme.md new file mode 100644 index 0000000..8e777e4 --- /dev/null +++ b/ActiveSetup_Example/readme.md @@ -0,0 +1,13 @@ +# Active Setup Example – Screensaver + +This project is a **simple Active Setup example** that demonstrates how to register a per-user action during login. + +In this case, the example installs a **screensaver configuration** using: +- `ActiveSetup.reg` → Registry template for Active Setup +- `install.bat` → Installation script +- `ScreenSaver.bat` → Example payload executed for each user + +## 📌 Purpose + +The goal is to provide a **minimal working sample** showing how Active Setup can deploy or configure settings (like a screensaver) for all users automatically at logon. + diff --git a/AutoAdminLogon/Enable.ps1 b/AutoAdminLogon/Enable.ps1 new file mode 100644 index 0000000..52cc404 --- /dev/null +++ b/AutoAdminLogon/Enable.ps1 @@ -0,0 +1,10 @@ +$RegPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" +$DefaultUsername = "Compte" +$DefaultPassword = "Password" +$DefaultDomaine = "Domaine.local" + +Set-ItemProperty $RegPath "AutoAdminLogon" -Value "1" -type String +Set-ItemProperty $RegPath "DefaultUsername" -Value "$DefaultUsername" -type String +Set-ItemProperty $RegPath "DefaultDomainName" -Value "$DefaultDomaine" -type String +Set-ItemProperty $RegPath "ForceAutoLogon" -Value "1" -type String +Set-ItemProperty $RegPath "DefaultPassword" -Value "$DefaultPassword" -type String diff --git a/AutoAdminLogon/readme.md b/AutoAdminLogon/readme.md new file mode 100644 index 0000000..185c81f --- /dev/null +++ b/AutoAdminLogon/readme.md @@ -0,0 +1,5 @@ +# Documentation + +For the full documentation, please visit the link below: + +[Setting Up Automatic Login in Windows 10](https://blog.wuibaille.fr/2023/07/activate-autologon-with-windows-10/) diff --git a/Bios-ActiveTPM-Dell/ActiveTPM.ps1 b/Bios-ActiveTPM-Dell/ActiveTPM.ps1 new file mode 100644 index 0000000..0461e94 --- /dev/null +++ b/Bios-ActiveTPM-Dell/ActiveTPM.ps1 @@ -0,0 +1,23 @@ + + +Function Enable-TPM_Dell { + param( + [string] $BiosPassword = "" + ) + + $DellModulePath = "${env:ProgramFiles}\WindowsPowerShell\Modules\DellBIOSProvider" + if (test-path $DellModulePath) { + write-host "PASS" + import-module DellBIOSProvider + If ($BiosPassword -eq "") { + Set-Item -Path DellSmbios:\TpmSecurity\TpmSecurity "Enabled" + } Else { + Set-Item -Path DellSmbios:\TpmSecurity\TpmSecurity "Enabled" -Password $BiosPassword + } + } Else { + Write-Error "DellBIOSProvider Module Not Exist..." + } +} + + +Enable-TPM_Dell \ No newline at end of file diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/BIOSIntf.dll b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/BIOSIntf.dll new file mode 100644 index 0000000..8db84cc Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/BIOSIntf.dll differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Clear-DellAdminPassword.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Clear-DellAdminPassword.ps1 new file mode 100644 index 0000000..1ca2b8d --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Clear-DellAdminPassword.ps1 @@ -0,0 +1,244 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +Function Clear-DellAdminPassword { +<# + .Synopsis + Erases the Admin (Setup) BIOS password + .Description + This CmdLet clears the Admin password in BIOS. Provide the existing password using -Password parameter. + .Example + Clear-DellAdminPassword -Password +#> +param( + [Parameter(Mandatory=$true)][string] $Password + + ) + + BEGIN { + + } + PROCESS { + Set-Item DellSmbios:\Security\AdminPassword -value "" -password $Password -ErrorVariable ev + if ($ev){ + Write-Warning "$ev Error occured in $($ev.InvocationInfo.ScriptName)" + } + } + END{} + + } + +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBnCZnROMFGGubT +# sYmw2FhxtUMAgPN11xHMI1WoDUjSGaCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCA2n7uKW5ZRxEuVkVwmPTFfxFtp+wosUVGDjnSI0gHn +# czANBgkqhkiG9w0BAQEFAASCAYCI206u4XS7KYYq3+jc6URFjzG+ZA3OGOQSTI5f +# pcaCsYHIiCieTwgpsXlocGr3xy6NAeBcAdYpvNO+gwDBOClDyvifqlopogeWcetp +# l6LSmezbMD6AgSemdPhFkdTmaaG1QMNryJwvo+Kau2RQjPUJ7no35xC2G5m2qhdS +# PV7gc7SF648mD4UBpoTWk8UPfgy/7o1f6fXdqewBwLQ6MvxN3JoL20NQxI5S6e7k +# pJd0yzjXV+UZwfY2LrrIjKzPpAO1pNotMbKb5/kUBaiYCP/hDtXMmLSw1tlkzHV6 +# 9rUFfkz6MmmXtg3LH03EKFpKHCVuno/qQjHQzw+Ov5p5XhAP7l7gOOaGSa17VmvF +# dLUuJcd+q41UjTl9IUpZIuFmD85Xu3jdOgjLpYRjgkRNT2XBV42/SGO8BLa6a8Qn +# ypsnoXIufaSTE12Ckk1Py/bvtjU5CvPWp4X5QPgTvmPk7wgedNQSOLNXxK5PhWZq +# FtB5tTJkrTUxaYCudZ1GpvlzJ1Ohgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCARNHhry5Fs/Z0rzxSiq1vIAu+dGONOo/d/P3qKuToFtgIUfx59W5IB1zTva2Zp +# qFzRcJ3zsVUYDzIwMjIwOTI5MTA0MDUzWjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MDUzWjAvBgkqhkiG9w0BCQQxIgQgIN60wB/w +# 7ECeTaaxTWfaWAlyzBdhboWJyYYS4xvWgsowNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBABqthvodmyvZC0fdhxIOMT0SwxQhN+T8BWN/31AhooxrK89OncrgmFnyvfR8 +# wYMSomWekmOE81OWAdmCzd3s7IdUzxfcjYT60JhL5+C2dV34eHOe6TgWQZgHOizA +# xc6BS7Ha/i2bcGgYnqrqJmsx9pTFzUlPceMTCWxgds90iMa1D7VYbfpbOXBD042L +# +EjdiI4hEU1tNmkVaKUreQ5KzfDRDFj8bHHxOL43bBHczk9AavBS1L4uZaCB4o4h +# nOa0B8bc4z9oVZzTteDg/CsPlLNFJ5pN2bCi0pTaMi4OiR51MRFTRMEFmUBpXA92 +# bWD6nt/CzcFdR+wJpU2Dv/C0MGA= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_AdvancedBootOptions/DCPP_AdvancedBootOptions.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_AdvancedBootOptions/DCPP_AdvancedBootOptions.psm1 new file mode 100644 index 0000000..2cf2561 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_AdvancedBootOptions/DCPP_AdvancedBootOptions.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_AdvancedBootOptions/DCPP_AdvancedBootOptions.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_AdvancedBootOptions/DCPP_AdvancedBootOptions.schema.mof new file mode 100644 index 0000000..09f7fce Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_AdvancedBootOptions/DCPP_AdvancedBootOptions.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_AdvancedConfigurations/DCPP_AdvancedConfigurations.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_AdvancedConfigurations/DCPP_AdvancedConfigurations.psm1 new file mode 100644 index 0000000..80c4b93 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_AdvancedConfigurations/DCPP_AdvancedConfigurations.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_AdvancedConfigurations/DCPP_AdvancedConfigurations.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_AdvancedConfigurations/DCPP_AdvancedConfigurations.schema.mof new file mode 100644 index 0000000..391be86 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_AdvancedConfigurations/DCPP_AdvancedConfigurations.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_BIOSSetupAdvancedMode/DCPP_BIOSSetupAdvancedMode.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_BIOSSetupAdvancedMode/DCPP_BIOSSetupAdvancedMode.psm1 new file mode 100644 index 0000000..5346e1a Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_BIOSSetupAdvancedMode/DCPP_BIOSSetupAdvancedMode.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_BIOSSetupAdvancedMode/DCPP_BIOSSetupAdvancedMode.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_BIOSSetupAdvancedMode/DCPP_BIOSSetupAdvancedMode.schema.mof new file mode 100644 index 0000000..43fec41 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_BIOSSetupAdvancedMode/DCPP_BIOSSetupAdvancedMode.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_BootSequence/DCPP_BootSequence.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_BootSequence/DCPP_BootSequence.psm1 new file mode 100644 index 0000000..36f2fe9 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_BootSequence/DCPP_BootSequence.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_BootSequence/DCPP_BootSequence.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_BootSequence/DCPP_BootSequence.schema.mof new file mode 100644 index 0000000..801cda3 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_BootSequence/DCPP_BootSequence.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_IntelSoftwareGuardExtensions/DCPP_IntelSoftwareGuardExtensions.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_IntelSoftwareGuardExtensions/DCPP_IntelSoftwareGuardExtensions.psm1 new file mode 100644 index 0000000..69fd96b Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_IntelSoftwareGuardExtensions/DCPP_IntelSoftwareGuardExtensions.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_IntelSoftwareGuardExtensions/DCPP_IntelSoftwareGuardExtensions.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_IntelSoftwareGuardExtensions/DCPP_IntelSoftwareGuardExtensions.schema.mof new file mode 100644 index 0000000..dd7e452 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_IntelSoftwareGuardExtensions/DCPP_IntelSoftwareGuardExtensions.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Maintenance/DCPP_Maintenance.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Maintenance/DCPP_Maintenance.psm1 new file mode 100644 index 0000000..5e798fb Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Maintenance/DCPP_Maintenance.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Maintenance/DCPP_Maintenance.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Maintenance/DCPP_Maintenance.schema.mof new file mode 100644 index 0000000..0dbee8e Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Maintenance/DCPP_Maintenance.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Manageability/DCPP_Manageability.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Manageability/DCPP_Manageability.psm1 new file mode 100644 index 0000000..0b9f456 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Manageability/DCPP_Manageability.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Manageability/DCPP_Manageability.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Manageability/DCPP_Manageability.schema.mof new file mode 100644 index 0000000..5b4986f Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Manageability/DCPP_Manageability.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_MiscellaneousDevices/DCPP_MiscellaneousDevices.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_MiscellaneousDevices/DCPP_MiscellaneousDevices.psm1 new file mode 100644 index 0000000..d5432a9 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_MiscellaneousDevices/DCPP_MiscellaneousDevices.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_MiscellaneousDevices/DCPP_MiscellaneousDevices.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_MiscellaneousDevices/DCPP_MiscellaneousDevices.schema.mof new file mode 100644 index 0000000..a1624e3 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_MiscellaneousDevices/DCPP_MiscellaneousDevices.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_POSTBehavior/DCPP_POSTBehavior.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_POSTBehavior/DCPP_POSTBehavior.psm1 new file mode 100644 index 0000000..9319132 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_POSTBehavior/DCPP_POSTBehavior.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_POSTBehavior/DCPP_POSTBehavior.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_POSTBehavior/DCPP_POSTBehavior.schema.mof new file mode 100644 index 0000000..bc63cc9 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_POSTBehavior/DCPP_POSTBehavior.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Performance/DCPP_Performance.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Performance/DCPP_Performance.psm1 new file mode 100644 index 0000000..5a40835 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Performance/DCPP_Performance.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Performance/DCPP_Performance.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Performance/DCPP_Performance.schema.mof new file mode 100644 index 0000000..3cdf94b Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Performance/DCPP_Performance.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_PowerManagement/DCPP_PowerManagement.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_PowerManagement/DCPP_PowerManagement.psm1 new file mode 100644 index 0000000..9d580f2 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_PowerManagement/DCPP_PowerManagement.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_PowerManagement/DCPP_PowerManagement.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_PowerManagement/DCPP_PowerManagement.schema.mof new file mode 100644 index 0000000..64a132a Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_PowerManagement/DCPP_PowerManagement.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SecureBoot/DCPP_SecureBoot.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SecureBoot/DCPP_SecureBoot.psm1 new file mode 100644 index 0000000..9e1bd9f Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SecureBoot/DCPP_SecureBoot.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SecureBoot/DCPP_SecureBoot.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SecureBoot/DCPP_SecureBoot.schema.mof new file mode 100644 index 0000000..ee477a7 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SecureBoot/DCPP_SecureBoot.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Security/DCPP_Security.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Security/DCPP_Security.psm1 new file mode 100644 index 0000000..d16e3ae Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Security/DCPP_Security.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Security/DCPP_Security.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Security/DCPP_Security.schema.mof new file mode 100644 index 0000000..45638b7 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Security/DCPP_Security.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_StealthModeControl/DCPP_StealthModeControl.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_StealthModeControl/DCPP_StealthModeControl.psm1 new file mode 100644 index 0000000..e443485 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_StealthModeControl/DCPP_StealthModeControl.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_StealthModeControl/DCPP_StealthModeControl.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_StealthModeControl/DCPP_StealthModeControl.schema.mof new file mode 100644 index 0000000..d648af5 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_StealthModeControl/DCPP_StealthModeControl.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SupportAssistSystemResolution/DCPP_SupportAssistSystemResolution.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SupportAssistSystemResolution/DCPP_SupportAssistSystemResolution.psm1 new file mode 100644 index 0000000..ef798d2 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SupportAssistSystemResolution/DCPP_SupportAssistSystemResolution.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SupportAssistSystemResolution/DCPP_SupportAssistSystemResolution.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SupportAssistSystemResolution/DCPP_SupportAssistSystemResolution.schema.mof new file mode 100644 index 0000000..50a2311 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SupportAssistSystemResolution/DCPP_SupportAssistSystemResolution.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SystemConfiguration/DCPP_SystemConfiguration.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SystemConfiguration/DCPP_SystemConfiguration.psm1 new file mode 100644 index 0000000..eff383d Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SystemConfiguration/DCPP_SystemConfiguration.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SystemConfiguration/DCPP_SystemConfiguration.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SystemConfiguration/DCPP_SystemConfiguration.schema.mof new file mode 100644 index 0000000..60ce41d Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SystemConfiguration/DCPP_SystemConfiguration.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SystemLogs/DCPP_SystemLogs.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SystemLogs/DCPP_SystemLogs.psm1 new file mode 100644 index 0000000..17dc861 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SystemLogs/DCPP_SystemLogs.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SystemLogs/DCPP_SystemLogs.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SystemLogs/DCPP_SystemLogs.schema.mof new file mode 100644 index 0000000..2fbd083 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_SystemLogs/DCPP_SystemLogs.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_TPMSecurity/DCPP_TPMSecurity.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_TPMSecurity/DCPP_TPMSecurity.psm1 new file mode 100644 index 0000000..5e7d3d3 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_TPMSecurity/DCPP_TPMSecurity.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_TPMSecurity/DCPP_TPMSecurity.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_TPMSecurity/DCPP_TPMSecurity.schema.mof new file mode 100644 index 0000000..c85b5db Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_TPMSecurity/DCPP_TPMSecurity.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_USBConfiguration/DCPP_USBConfiguration.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_USBConfiguration/DCPP_USBConfiguration.psm1 new file mode 100644 index 0000000..3bd248f Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_USBConfiguration/DCPP_USBConfiguration.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_USBConfiguration/DCPP_USBConfiguration.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_USBConfiguration/DCPP_USBConfiguration.schema.mof new file mode 100644 index 0000000..b4beb30 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_USBConfiguration/DCPP_USBConfiguration.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Video/DCPP_Video.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Video/DCPP_Video.psm1 new file mode 100644 index 0000000..8974eef Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Video/DCPP_Video.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Video/DCPP_Video.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Video/DCPP_Video.schema.mof new file mode 100644 index 0000000..9207189 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Video/DCPP_Video.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_VirtualizationSupport/DCPP_VirtualizationSupport.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_VirtualizationSupport/DCPP_VirtualizationSupport.psm1 new file mode 100644 index 0000000..644cf92 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_VirtualizationSupport/DCPP_VirtualizationSupport.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_VirtualizationSupport/DCPP_VirtualizationSupport.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_VirtualizationSupport/DCPP_VirtualizationSupport.schema.mof new file mode 100644 index 0000000..531ac12 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_VirtualizationSupport/DCPP_VirtualizationSupport.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Wireless/DCPP_Wireless.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Wireless/DCPP_Wireless.psm1 new file mode 100644 index 0000000..29964f2 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Wireless/DCPP_Wireless.psm1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Wireless/DCPP_Wireless.schema.mof b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Wireless/DCPP_Wireless.schema.mof new file mode 100644 index 0000000..8729a8a Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSCResources/DCPP_Wireless/DCPP_Wireless.schema.mof differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_All.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_All.ps1 new file mode 100644 index 0000000..6306346 --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_All.ps1 @@ -0,0 +1,279 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +#$pwwd=Get-Content "c:\temp\userpwd.txt" +Configuration MultipleCatConfiguration +{ + + + Import-DscResource -ModuleName DellBIOSProvider + + + + Node localhost { + POSTBehavior POSTBehaviorSettings #resource name + { + Category = "POSTBehavior" + Keypad = "EnabledByNumlock" + PowerWarn = "Disabled" + Numlock = "Disabled" + #Password = "" + #SecurePassword=$pwwd.ToString() + } + + PowerManagement PowerManagementSettings #resource name + { + Category = "PowerManagement" + BlockDefinition="1" + AutoOnHr=15 + AutoOnMn=42 + AdvancedBatteryChargeConfiguration = "Tuesday" + BeginningOfDay = "10:30" + WorkPeriod = "15:45" + PeakShiftDayConfiguration = "Saturday" + StartTime = "10:30" + EndTime = "12:30" + ChargeStartTime = "13:30" + #Password = "" + #SecurePassword=$pwwd.ToString() + #PathToKey="" + } + + PowerManagement PowerManagementSettings_next #resource name + { + Category = "PowerManagement" + BlockDefinition="2" + PeakShiftDayConfiguration = "Sunday" + StartTime = "10:30" + EndTime = "12:30" + ChargeStartTime = "19:45" + #Password = "" + #SecurePassword=$pwwd.ToString() + } + } +} + +# Call the configuration. +# It will create a folder with the same name as configuration name (\POSTBehaviorConfiguration)and will contain mof output file. + +MultipleCatConfiguration + + +#Push Mof +Start-DscConfiguration -Path .\MultipleCatConfiguration\ -wait -verbose -debug -force + + +# SIG # Begin signature block +# MIIkoQYJKoZIhvcNAQcCoIIkkjCCJI4CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDw2beasxL/YG0b +# KBZ3ludp9KRJ+Pc/vURtzv9W9XfeIKCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOEwghDdAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCCRpZXU/oxrEwkzoSo/Y2aVMMHpoPhBxyTCCLVRq1KZ +# zjANBgkqhkiG9w0BAQEFAASCAYB7GwbDdDOSl534/5t7h4KYXJq1E7u5m+xQQLU/ +# tiRhFxQdXPSrR2fzF6K1z8DlhhHcARx+r4+zWnCqDSuj5A30viY6iuEME3rxJ30c +# jmM4cM8kPnlANEPBUBoFTd8dUhUzu9fmIPjR6krHB3Y+Y2vyarKqSOJGcwGOy1y0 +# 7W8IypziyFVAI0QgI1XYxpbiDFbClMr45q61ltwrAbMiGO14zl0PBPx22KbAqTCJ +# iqO1ISYkJEe8Wu3cQukkrmEEKO1CspE4ZtC9EtClx1PoD80L99qqUwYkmLSYFBxx +# x6Nv8xRO+FSAQOkJxhFgAtmMGgpl05M2pPQz92YHahay1McdgNm4uvSk3lY18/kA +# sUjYTjCDu5Lm2+5UhAGwXQWZw4RVqVlLiu/rSj8YJ/nvFQPTE4BdSjObi8SPJm+S +# c9Wgvagd9XF4Xh0eBVTvymF4knYJ4kdScIuFGeM7666BYWzRrxBTucw9Ft+i1EbD +# JqZl74hfM+0TOqeNUcxpw+sEsAyhgg49MIIOOQYKKwYBBAGCNwMDATGCDikwgg4l +# BgkqhkiG9w0BBwKggg4WMIIOEgIBAzENMAsGCWCGSAFlAwQCATCCAQ8GCyqGSIb3 +# DQEJEAEEoIH/BIH8MIH5AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCC7IFAmRwSztHH1/BOE9lTlnYM/wKtIATPqDmZFwhbk4QIVAJWztADU4ZBD3zA0 +# WttMBHJS/i//GA8yMDIyMDkyOTEwNDExOFowAwIBHqCBhqSBgzCBgDELMAkGA1UE +# BhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZT +# eW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYg +# VGltZVN0YW1waW5nIFNpZ25lciAtIEczoIIKizCCBTgwggQgoAMCAQICEHsFsdRJ +# aFFE98mJ0pwZnRIwDQYJKoZIhvcNAQELBQAwgb0xCzAJBgNVBAYTAlVTMRcwFQYD +# VQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0 +# d29yazE6MDgGA1UECxMxKGMpIDIwMDggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0 +# aG9yaXplZCB1c2Ugb25seTE4MDYGA1UEAxMvVmVyaVNpZ24gVW5pdmVyc2FsIFJv +# b3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTYwMTEyMDAwMDAwWhcNMzEw +# MTExMjM1OTU5WjB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29y +# cG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNV +# BAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggEiMA0GCSqGSIb3 +# DQEBAQUAA4IBDwAwggEKAoIBAQC7WZ1ZVU+djHJdGoGi61XzsAGtPHGsMo8Fa4aa +# JwAyl2pNyWQUSym7wtkpuS7sY7Phzz8LVpD4Yht+66YH4t5/Xm1AONSRBudBfHkc +# y8utG7/YlZHz8O5s+K2WOS5/wSe4eDnFhKXt7a+Hjs6Nx23q0pi1Oh8eOZ3D9Jqo +# 9IThxNF8ccYGKbQ/5IMNJsN7CD5N+Qq3M0n/yjvU9bKbS+GImRr1wOkzFNbfx4Db +# ke7+vJJXcnf0zajM/gn1kze+lYhqxdz0sUvUzugJkV+1hHk1inisGTKPI8EyQRtZ +# Dqk+scz51ivvt9jk1R1tETqS9pPJnONI7rtTDtQ2l4Z4xaE3AgMBAAGjggF3MIIB +# czAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADBmBgNVHSAEXzBd +# MFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5j +# b20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMC4G +# CCsGAQUFBwEBBCIwIDAeBggrBgEFBQcwAYYSaHR0cDovL3Muc3ltY2QuY29tMDYG +# A1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9zLnN5bWNiLmNvbS91bml2ZXJzYWwtcm9v +# dC5jcmwwEwYDVR0lBAwwCgYIKwYBBQUHAwgwKAYDVR0RBCEwH6QdMBsxGTAXBgNV +# BAMTEFRpbWVTdGFtcC0yMDQ4LTMwHQYDVR0OBBYEFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMB8GA1UdIwQYMBaAFLZ3+mlIR59TEtXC6gcydgfRlwcZMA0GCSqGSIb3DQEB +# CwUAA4IBAQB16rAt1TQZXDJF/g7h1E+meMFv1+rd3E/zociBiPenjxXmQCmt5l30 +# otlWZIRxMCrdHmEXZiBWBpgZjV1x8viXvAn9HJFHyeLojQP7zJAv1gpsTjPs1rST +# yEyQY0g5QCHE3dZuiZg8tZiX6KkGtwnJj1NXQZAv4R5NTtzKEHhsQm7wtsX4YVxS +# 9U72a433Snq+8839A9fZ9gOoD+NT9wp17MZ1LqpmhQSZt/gGV+HGDvbor9rsmxgf +# qrnjOgC/zoqUywHbnsc4uw9Sq9HjlANgCk2g/idtFDL8P5dA4b+ZidvkORS92uTT +# w+orWrOVWFUEfcea7CMDjYUq0v+uqWGBMIIFSzCCBDOgAwIBAgIQe9Tlr7rMBz+h +# ASMEIkFNEjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMU +# U3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5l +# dHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0Ew +# HhcNMTcxMjIzMDAwMDAwWhcNMjkwMzIyMjM1OTU5WjCBgDELMAkGA1UEBhMCVVMx +# HTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRl +# YyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYgVGltZVN0 +# YW1waW5nIFNpZ25lciAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +# AQEArw6Kqvjcv2l7VBdxRwm9jTyB+HQVd2eQnP3eTgKeS3b25TY+ZdUkIG0w+d0d +# g+k/J0ozTm0WiuSNQI0iqr6nCxvSB7Y8tRokKPgbclE9yAmIJgg6+fpDI3VHcAyz +# X1uPCB1ySFdlTa8CPED39N0yOJM/5Sym81kjy4DeE035EMmqChhsVWFX0fECLMS1 +# q/JsI9KfDQ8ZbK2FYmn9ToXBilIxq1vYyXRS41dsIr9Vf2/KBqs/SrcidmXs7Dby +# lpWBJiz9u5iqATjTryVAmwlT8ClXhVhe6oVIQSGH5d600yaye0BTWHmOUjEGTZQD +# RcTOPAPstwDyOiLFtG/l77CKmwIDAQABo4IBxzCCAcMwDAYDVR0TAQH/BAIwADBm +# BgNVHSAEXzBdMFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8v +# ZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5j +# b20vcnBhMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly90cy1jcmwud3Muc3ltYW50 +# ZWMuY29tL3NoYTI1Ni10c3MtY2EuY3JsMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MA4GA1UdDwEB/wQEAwIHgDB3BggrBgEFBQcBAQRrMGkwKgYIKwYBBQUHMAGGHmh0 +# dHA6Ly90cy1vY3NwLndzLnN5bWFudGVjLmNvbTA7BggrBgEFBQcwAoYvaHR0cDov +# L3RzLWFpYS53cy5zeW1hbnRlYy5jb20vc2hhMjU2LXRzcy1jYS5jZXIwKAYDVR0R +# BCEwH6QdMBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTYwHQYDVR0OBBYEFKUT +# AamfhcwbbhYeXzsxqnk2AHsdMB8GA1UdIwQYMBaAFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMA0GCSqGSIb3DQEBCwUAA4IBAQBGnq/wuKJfoplIz6gnSyHNsrmmcnBjL+NV +# KXs5Rk7nfmUGWIu8V4qSDQjYELo2JPoKe/s702K/SpQV5oLbilRt/yj+Z89xP+Yz +# CdmiWRD0Hkr+Zcze1GvjUil1AEorpczLm+ipTfe0F1mSQcO3P4bm9sB/RDxGXBda +# 46Q71Wkm1SF94YBnfmKst04uFZrlnCOvWxHqcalB+Q15OKmhDc+0sdo+mnrHIsV0 +# zd9HCYbE/JElshuW6YUI6N3qdGBuYKVWeg3IRFjc5vlIFJ7lv94AvXexmBRyFCTf +# xxEsHwA/w0sUxmcczB4Go5BfXFSLPuMzW4IPxbeGAk5xn+lmRT92MYICWjCCAlYC +# AQEwgYswdzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0 +# aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9T +# eW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIENBAhB71OWvuswHP6EBIwQiQU0S +# MAsGCWCGSAFlAwQCAaCBpDAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJ +# KoZIhvcNAQkFMQ8XDTIyMDkyOTEwNDExOFowLwYJKoZIhvcNAQkEMSIEIHhkkm/S +# IolWFmboV8/R2y6VRpCtjA6n9psf/Rb2reMvMDcGCyqGSIb3DQEJEAIvMSgwJjAk +# MCIEIMR0znYAfQI5Tg2l5N58FMaA+eKCATz+9lPvXbcf32H4MAsGCSqGSIb3DQEB +# AQSCAQBWlS80hjZf/rib3YV3xYEhL6RHuqVIbX3QkS3UctmI7Jwn+iDdHMIVulLW +# s5FqTtFUwO6BXlGqFbwwEKP6osbHemmZ3QcuZoiiGZU/MzAssFcYJfagt5J8Z/7V +# t1IgplrfZm6OuCYasxa36B7YIMgECvHA3EOmVH9n4ymz1ybXnxA+MHriVeb6GNBU +# InakLQIy9oD4YlcSl9ZMgeohn2Cze/MTDfpzRu6+9HzkBEpgxb4E2N/2QaO192ie +# fQn1xuJ+UrOQao0VHmlsdmMde6THrpr0W5Y0TaQjm6LKoq9SLppxsI/zXgjP1mzk +# j3kBG0ftzHywa/ZR+GXfo1nRipE5 +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_ChangeLCMMetaConfig.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_ChangeLCMMetaConfig.ps1 new file mode 100644 index 0000000..51e84b7 --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_ChangeLCMMetaConfig.ps1 @@ -0,0 +1,253 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +Configuration LCMForRef +{ +param +( +[string]$ComputerName +) + + +Node $ComputerName +{ +LocalConfigurationManager +{ +ConfigurationMode = "ApplyAndAutoCorrect" +} +} + + +} + +LCMForRef -ComputerName 10.94.174.165 +$secpwd=ConvertTo-SecureString "dell_123" -AsPlainText -force +$mycred=New-Object System.Management.Automation.PSCredential("administrator",$secpwd) + + +Set-DscLocalConfigurationManager -Path .\LCMForRef -Credential $mycred -Force + + + +#### +# +#For user's info: commands to immediately apply config without waiting for freq +# Invoke-CimMethod -Namespace root/Microsoft/Windows/DesiredStateConfiguration -class MSFT_DSCLocalConfigurationManager -MethodName PerformRequiredConfigurationChecks -Arguments @{flags=[uint32]1} +# OR +# Invoke-CimMethod -ComputerName "10.94.23.45" -Namespace root/Microsoft/Windows/DesiredStateConfiguration -class MSFT_DSCLocalConfigurationManager -MethodName PerformRequiredConfigurationChecks -Arguments @{flags=[uint32]1} +#### + +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAhwQscUSjsplWD +# aL4y7faC5unn+kipABoUdRYLV0se0KCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCDNiNuM34L3kOlWUY35/Z1U0jdjUitt6y6ATeig0TR1 +# cDANBgkqhkiG9w0BAQEFAASCAYB6GpUfBMIjcHzwIUMC/PFdyuRpq4WG18wGMTQx +# CGLldG/MS7N5fraT7vT/yqu0Nrlaa7NHTwXIpPF1MkMOSEJ2u3gmA8WZbyrGi5x7 +# Rmtym0PKhByRVi8HzoXUkx/fQGWFPUQuNOvKshsTTYV4wYvjb85F1JoF9/ZZWhmF +# 2g2X1qp8ZnSPNSeb3P/md5Op8yAcz6QuRiil1RPmL8LXO1Wj6t2jOKPa/H/TuvCw +# 6k6BSvF2D9d10ldkEihbwScbtx/VoqWMNQnlz1Ce8yD6WgNJOMItvBC3jVxun9YW +# EfBgRZIijk8mzvl2LQZwGXgh9mUdFV/yUP27Kg+CgSc+bcSGaorTljderydIbPGN +# qqIN07iVWgbuxvGVFYgziEEP2+1S4h2LMTg494IhJDBVU1W8CDQR/vyDcXoqWKw/ +# 6rK1o8prBe2TTSOuQ2Qsz5t9wyQpu2MaAeH02XkeuFEEi9SHfd70f2vgevz90B3p +# GYRFvqguPdrGyM/O9+hP7JDDVEyhgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCD/23D4jW4oBooCPv7XxzqKuhmOzTRUC+8FhWzTdGmB4gIUb+cIecAOAC8R87RW +# n3rmENtZqRUYDzIwMjIwOTI5MTA0MTIwWjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MTIwWjAvBgkqhkiG9w0BCQQxIgQg5mFI+5Ss +# Af9EnhHgF+JGyEdXCFbSHUX8lfK8wRUVwGUwNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBAJmj4UDjFC/FpXcXCA54tgzbjoWXFZ5UfbCfd5ISgEb5r/POflADI6h+Xwn8 +# 5lxi9HgkHykj/c3c+k4Q8d68vKrA+KOrb9mjMc1hsyVxjeLF1yiLcd7mlsK5FEg2 +# /Lft39PQXHpC7Ciwf4EBxpA8aHgcfCZon5sWlGAWBlfIrSSTC6GmAJCALfz0XwRE +# Tt1P4qgH0VLArAKrqGmBEtMhbRe0Y6hQjXJL+oP7+YmoEmhun1qwlMn7xCOY20uH +# Y0o66XbLta2/sOYGlwZ4k/rxe9bwkYPcTdbdPe2HI8cC9Y8MKXE+kPVzgbF4qtgH +# 9B/1A0qRLalTi0e5ar+VpO1CJk8= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_MultipleNodes_1.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_MultipleNodes_1.ps1 new file mode 100644 index 0000000..d1b0a68 --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_MultipleNodes_1.ps1 @@ -0,0 +1,291 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +#$pwwd=Get-Content "c:\temp\userpwd.txt" +Configuration MultipleCatConfiguration +{ + + + Import-DscResource -ModuleName DellBIOSProvider + + + + Node $ComputerName { + POSTBehavior POSTBehaviorSettings #resource name + { + Category = "POSTBehavior" + Keypad = "EnabledByNumlock" + PowerWarn = "Disabled" + Numlock = "Disabled" + #Password = "" + #SecurePassword=$pwwd.ToString() + } + + PowerManagement PowerManagementSettings #resource name + { + Category = "PowerManagement" + BlockDefinition="1" + AutoOnHr=15 + AutoOnMn=42 + AdvancedBatteryChargeConfiguration = "Tuesday" + BeginningOfDay = "10:30" + WorkPeriod = "15:45" + PeakShiftDayConfiguration = "Saturday" + StartTime = "10:30" + EndTime = "12:30" + ChargeStartTime = "13:30" + #Password = "" + #SecurePassword=$pwwd.ToString() + #PathToKey="" + } + + + + PowerManagement PowerManagementSettings_next #resource name + { + Category = "PowerManagement" + BlockDefinition="2" + PeakShiftDayConfiguration = "Sunday" + StartTime = "10:30" + EndTime = "12:30" + ChargeStartTime = "21:45" + #Password = "" + #SecurePassword=$pwwd.ToString() + } + } + + Node 10.194.23.55 + { + POSTBehavior customSettings + { + Category = "POSTBehavior" + Numlock = "Disabled" + } + } + +} + +# Call the configuration. +# It will create a folder with the same name as configuration name (\POSTBehaviorConfiguration)and will contain mof output file. + +MultipleCatConfiguration + + +#Push Mof +Start-DscConfiguration -Path .\MultipleCatConfiguration\ -wait -verbose -debug -force + + +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBq/dTr/BmS4DVW +# hdRO3SE0boFbyzY8iKhKgveP0AlNEaCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCBThJ3emvUgiS5ryR2VIcY32ZXH0DG4XhE2+J4DlWPj +# 4zANBgkqhkiG9w0BAQEFAASCAYBW6Ft3UfDdLvHw5yO+5o1UBdg71XOikp+bQ4RV +# OdTeW3lN9mRo8BWEbdBLNraLg92lhCnNyCBj3OYixiAXo2Zo+jhNxK8ox4273RZk +# vofhwkouvwz0HO+fJMVxTqwMQZi8ozAY+pPDc8bbPFC3Njqv8GEpkGA+y4yG20Nx +# zDz5dbACNeFLtzAsB7AmK6OKG8ZZtSb2zYGpN0U5OSTbhmyQMc7irXDRZu6AHPZG +# em8ZPT8zRMWvTXdlzOk7rSpBxUwyCzWxHS4F9yCg3ikVEKbC/isBicUA0nwn+9D+ +# OaHI5oOpaF0zEP+6AGkGxLilMggTLhX+kmGw/ljRtBCiP7TvdQveOAdH2oF4jZmx +# s6mwXRf9Vj13rgxoh326XPhxk0zY89YKHHGgsaOMk3HqwNxR8yw4OWv+AXuCul6p +# 7k+gog8gFtQNrAvt+4V+IkyD4Qv/2oxZemXfJdS4bnuiTvOOEYcqYou22pP9cDos +# ILQvJoIk9xTFGpezDXInR40lqKyhgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCC1iCoXKpPhhj4a4pzKpWldptEdepOzZ3R/y9Ao5GZXogIUHzzR7BUx1g/JtOxl +# /Lz/lZm97mIYDzIwMjIwOTI5MTA0MTIyWjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MTIyWjAvBgkqhkiG9w0BCQQxIgQgSKjMP8ir +# V8V6bf4AmgX6hVN5+bg+C//rbWUm3iqDHfYwNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBAF4Si3qpL1hZHTg40nglf1G1pgJ05FJgiGBwAKFm1SmvZClPJ9Z0XRK+SF3f +# WlnwL6n348hq9SrXqABAYky1L8J1uLOzjyE86qWw+SI9Ci+GU46vGeNNqQ4lvAST +# cyYainBr9dGPIQ8F3N/OmMHAXls20TywPWi813DgwnChVigoaK2SNthSEQXOX+lg +# EER5bfALwEKfZxxPB5nVym06/+O4OCFLNgHd6aPi2i4f5Wz7gjoe/BJGLsapuvJu +# nY0a86lNcRcS9ucphjxnZ3X3m5J15u6a5QREyBhqPDw0XP08Wz/5+dPdGfYfQknL +# 14KCSlCO+EDX7U5il3D262ktbos= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_MultipleNodes_2.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_MultipleNodes_2.ps1 new file mode 100644 index 0000000..13617c0 --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_MultipleNodes_2.ps1 @@ -0,0 +1,286 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +#$pwwd=Get-Content "c:\temp\userpwd.txt" +Configuration MultipleCatConfiguration +{ + param +( +[string]$ComputerName +) + + Import-DscResource -ModuleName DellBIOSProvider + + + + Node $ComputerName { + POSTBehavior POSTBehaviorSettings #resource name + { + Category = "POSTBehavior" + Keypad = "EnabledByNumlock" + PowerWarn = "Disabled" + Numlock = "Disabled" + #Password = "" + #SecurePassword=$pwwd.ToString() + } + + PowerManagement PowerManagementSettings #resource name + { + Category = "PowerManagement" + BlockDefinition="1" + AutoOnHr=15 + AutoOnMn=42 + AdvancedBatteryChargeConfiguration = "Tuesday" + BeginningOfDay = "10:30" + WorkPeriod = "15:45" + PeakShiftDayConfiguration = "Saturday" + StartTime = "10:30" + EndTime = "12:30" + ChargeStartTime = "13:30" + #Password = "" + #SecurePassword=$pwwd.ToString() + #PathToKey="" + } + + + + PowerManagement PowerManagementSettings_next #resource name + { + Category = "PowerManagement" + BlockDefinition="2" + PeakShiftDayConfiguration = "Sunday" + StartTime = "10:30" + EndTime = "12:30" + ChargeStartTime = "21:45" + #Password = "" + #SecurePassword=$pwwd.ToString() + } + } + +} + +# Call the configuration. +# It will create a folder with the same name as configuration name (\POSTBehaviorConfiguration)and will contain mof output file. + +MultipleCatConfiguration -ComputerName localhost +MultipleCatConfiguration -ComputerName 10.194.23.66 + + +#Push Mof +Start-DscConfiguration -Path .\MultipleCatConfiguration\ -wait -verbose -debug -force + + +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCA+bHGptEQp+1kZ +# e5WFTZKTPVGiGLwjZGJGi1ALA5jVbqCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCCfk2TD734TKr68ubJ6EkWwiKx5x4B8QBqX2bGsFftQ +# BjANBgkqhkiG9w0BAQEFAASCAYApjOzFn/C6DC1R35IYlItG5UOXFH0s3FsTGMl/ +# sdqJ+hO+3bxLWP+eQ0ZIhXVum45YPd3g0EwfvtGhWKo4nHf2Wif5qNV/vt7ew3mp +# VZaSg6L1xisvrdN7TGZdo3/4jl4UQl9IqK6KAdorLjHW/2SpL6Mfx3ybBizJ/GiQ +# sZ88ov5y+XsJu2t9qDwy9GD5FTLsL3E4w2D+7qGSRxCtPUUzyo0MyByPoLA1Xx4p +# KoTku9+dBuH/Wjaxq61n/B6zXtOj0SRrdHghLvT8kq/Mh6qbSV3I3hzEAme5pHek +# /BYuubR3H3qYjEK+TUPeRAHzTjeq6h+F6WL3NkXbsA+F23vZcuhiZSAujnnHjNEK +# HdScM7YHIa//sKZuAY3xk4Bi+NTsS/3OwYmYhQXuXZwJzG/dnF6pZD9fGnn/SHZM +# ltSHpXIMKjPR9EpiDwYHbcafSjdsm7NNaQDISk5uKOQ6TnKwbi4OKxBbgHCPZ6pp +# OabypJ5zJPilNeFyZaroKXSyNPChgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCDv7DU0FOQMilOOVySrgmMwpJXXPf9bqFbg/CbToj9pugIUEW2w2wIUN+YGHBDa +# SHaPOYAgtf4YDzIwMjIwOTI5MTA0MTIzWjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MTIzWjAvBgkqhkiG9w0BCQQxIgQgcmE3Bc4t +# TJg7Ym4rb+9YGYneKOKzwzHZbqwf2F/P0bMwNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBAKLAc8VEvx39KTPriPaHtpAXqCCgNh3Ft0k79cTYTT79oG0bUigMqIx/HkLo +# KGXeMNu+CWp19i7lpKQTNye7ERUhzm1E1mBqZ4Q+zj/+d/utapdCw34qg21U+nLe +# 5nuBCXooi9WR8XrjekPh9oremFtdabhtIB3jFBtwgi24FN8/vFMW1VrodZ2QXvke +# m+ezBn/yJhPXppSCMvPUCBYoHzE8W8W3QIOKtoumSKTZt1gnOaHKqsDE4LkyNyFx +# /hQhjSJIp9FVncVazRppWH08oa4c22xX1IW1aMjAnZx5E4JxTsYssB3eYRhDtxKm +# PLSeB83VHB18COVNo8yF8BTXlQA= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_POSTBehavior.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_POSTBehavior.ps1 new file mode 100644 index 0000000..a0758fc --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_POSTBehavior.ps1 @@ -0,0 +1,250 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +#$pwwd=Get-Content "c:\temp\userpwd.txt" +Configuration POSTBehaviorConfiguration +{ + + + Import-DscResource -ModuleName DellBIOSProvider + + + + Node localhost { + POSTBehavior POSTBehaviorSettings #resource name + { + Category = "POSTBehavior" + Keypad = "EnabledByNumlock" + PowerWarn = "Disabled" + Numlock = "Disabled" + #Password = "" + #SecurePassword=$pwwd.ToString() + } + + } +} + +# Call the configuration. +# It will create a folder with the same name as configuration name (\POSTBehaviorConfiguration)and will contain mof output file. + +POSTBehaviorConfiguration + + +#Push Mof +Start-DscConfiguration -Path .\POSTBehaviorConfiguration\ -wait -verbose -debug -force + + +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCD3g/bPw26EvKpk +# 4HKs7bB2fy2FTspwcGgJPIfyGOSyjaCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCDbFXOV7Ix2RQLIcvyHz/xvVbx/CMfImjD8mYIEf113 +# FDANBgkqhkiG9w0BAQEFAASCAYCLj8NF6fhHD1OObHtTYZARXndVs4lyGAAk+mim +# FeaTJXanTW+84TaKKqe39NL/G3Xj9tnaP7clDCM21BIx1+7st5XQvOsqXeT89IZw +# 43YrChiSKTGU2EeNoUrMl2OV+iewzgAA1Fp+ag/aD1tgUrcGLuAYPcR9CHNdb0fc +# 0EkHEDKH8Sln7F+Eg1lOr/7TMXI79FMqIrJZ3+XSoLNic/yhuJuPTf5oIlNYoFYH +# TEPEWDETToRiwd3e8hTcXQkipM/7RN+wTS3k0g+U1c++235AQJ51dYhpXfSKuqgl +# YJk2trHbaO7+6Z/ozPO3l6dUzhJTpfM4JuSVz7+IItMfN7yJbblztaxHy/t6Q4BR +# QmbiXdUgkCAWMVBFwccIijtiLyKfwtKZawp7QEcP+HMwrG6AGFjd6CDc7Nz7BCxh +# A5m63dMgLPuHz12ORvwAwoHoLgsxbX8lJLo/uH8B3DMtmmxxvp7bXyfmKwZhJWNl +# 0egKuZpGAlG0RMMBEpB0vFbazBmhgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCBLvKb5uXk9F8ZtvTWTxSSd3ctG5JSkoe7+CDTCa/1MfgIUfxBNwhw0yCsgQ5oU +# doCIAd9P1XQYDzIwMjIwOTI5MTA0MTI3WjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MTI3WjAvBgkqhkiG9w0BCQQxIgQgqxWlC5KU +# Tmuo2osrDvF77Fzb90VwWHFqDBJ192FwiecwNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBAFKc9+u6qnDcNQOUg107/9C+OIpYRcjzQfHefSMkyNjBJ38fYCX+MSqQ/5qO +# JgmSVjtAM0/CzHlQw4sBDw1aEu79MhvBmNznA2RBpHwh5NuSnJubIrti5dLk9qRj +# P9aU1e5ZEDyoof34qYBP0KsXMILChUegZMUv6fXW7MlaXZ8G6uKauiHR312Q7O0x +# tfGD/0i9ouWxto5HgrY075YjRpg0IkRim9E3o8pcJQcM9P6AuSLMUUWKHH4zA0pG +# EijquoOHWSvkF/RvBpePImrt8iTGMRWN+lYnaJ2vNIeys0xIdrtr3eq+t1kPCdt6 +# 87S/6mWB3Zg5dbDDF1FWgiFvcgY= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_PassingCredentials.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_PassingCredentials.ps1 new file mode 100644 index 0000000..9d87254 --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_PassingCredentials.ps1 @@ -0,0 +1,286 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +#$pwwd=Get-Content "c:\temp\userpwd.txt" +Configuration MultipleCatConfiguration +{ + + + Import-DscResource -ModuleName DellBIOSProvider + + + + Node 10.94.43.77 { + POSTBehavior POSTBehaviorSettings #resource name + { + Category = "POSTBehavior" + Keypad = "EnabledByNumlock" + PowerWarn = "Disabled" + Numlock = "Disabled" + #Password = "" + #SecurePassword=$pwwd.ToString() + } + + PowerManagement PowerManagementSettings #resource name + { + Category = "PowerManagement" + BlockDefinition="1" + AutoOnHr=15 + AutoOnMn=42 + AdvancedBatteryChargeConfiguration = "Tuesday" + BeginningOfDay = "10:30" + WorkPeriod = "15:45" + PeakShiftDayConfiguration = "Saturday" + StartTime = "10:30" + EndTime = "12:30" + ChargeStartTime = "13:30" + #Password = "" + #SecurePassword=$pwwd.ToString() + #PathToKey="" + } + + + + PowerManagement PowerManagementSettings_next #resource name + { + Category = "PowerManagement" + BlockDefinition="2" + PeakShiftDayConfiguration = "Sunday" + StartTime = "10:30" + EndTime = "12:30" + ChargeStartTime = "21:45" + #Password = "" + #SecurePassword=$pwwd.ToString() + } + } + +} + +# Call the configuration. +# It will create a folder with the same name as configuration name (\POSTBehaviorConfiguration)and will contain mof output file. + +MultipleCatConfiguration + + +#Push Mof + +$secpasswd = ConvertTo-SecureString PlainTextPassword -AsPlainText -Force +$mycreds = New-Object System.Management.Automation.PSCredential (username, $secpasswd) + +Start-DscConfiguration -Path .\MultipleCatConfiguration\ -wait -verbose -debug -force -Credential $mycreds + + +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAjyxd7AB2sAcFb +# JY2gT2DYaCFamEU4Nh2OxgnREK5iCqCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCDUvIBitfNA6aQuDKKVSB1QjsnC8g2a7un0skqcaLwG +# ZDANBgkqhkiG9w0BAQEFAASCAYAaAoRvpx2hl8qlPui78UhMEHdoMjTJMcufHyHm +# 2/hXzaNTNP3tJnxMF9SYU9wZ4nAgIywxGs+fW5Kr1jYGLq1m6MGa4K0El1aNi28f +# N4DtVh/BUtLLczLW5hb0HKi+vswtDns2ac6vMHD6P04oUTz9BP6SUtT0rf0V0b7L +# QAP6N8uz7LWrE93leYuOu1QCzxUPB1I8bd9ec/n8+hmFZY+6tcmwUe8bAvE4/jf+ +# WA/ORnc9/L0b316bdci+8vJ0KVJRD0G+0ZJeehrnaoV8IltuBYi8G52fYGT5IYMi +# 88JgIRj6itRjQqHum4SI5i0x7dWfCi5g/4i+9CxYojtwLBHo0sRmTRRQb6I2EnuD +# VD+tREB4JXqTAbPW18NuYgmdWwIthyOX4xK5I9JVKq/BAgClYGGruRYY8B47HG0Q +# L7iMR/ckEs10nz83qclMBd4jKq4w0rLt8vpTBlSCoJxhaoz8oX5++BlZM1XFAH4f +# q9vmKIasQMff/xgskFbaKKDHrkmhgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCA7Pw0MqClgfY7WjBQmAQvEq5/oCShGUjxdrjfrkv4PkQIUC8i8rQ4vVy03wNgR +# 0WkzZYiK7KIYDzIwMjIwOTI5MTA0MTI1WjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MTI1WjAvBgkqhkiG9w0BCQQxIgQgHra1mcmq +# 1leluYJbpw0RAuNjPwtR4tjn6YtD5m39G7swNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBAKMSJqRF0WEm1GVUK0zKPAyVyZ6WXgnC9+WdyXdKeWbuqFOeJK4sGHTSli+X +# 8UmzJf6A28FBOcGgzBPcropk3iJ+2CsRbIQDiw9X8s7SHjIo64/HZqtrER7Erv/E +# nUVLT+m6SF0JmQibCOOrRYnnloWqLX4nhc6eoYl20qXr/l2RofBQk3R2YHD56/Hb +# 3TuEjGfR/12CPM6eC7CZMFpqD5wajIhmYgVFna+PVwaIwJ8r8fH0WFVuug9lQ4Uo +# Sgs1MMuQ9XHNr185qICRejiRsYddCQyyP2KzwgWVJ+NzsjzJMk8scQt0rTfAXPzR +# UWs0J8UZll1ur5a7tA6piVKDEVc= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_PowerManagement.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_PowerManagement.ps1 new file mode 100644 index 0000000..c149db3 --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_PowerManagement.ps1 @@ -0,0 +1,264 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +#$pwwd=Get-Content "c:\temp\userpwd.txt" +Configuration PowerManagementConfiguration +{ + Import-DscResource -ModuleName DellBIOSProvider + + Node localhost { + PowerManagement PowerManagementSettings #resource name + { + Category = "PowerManagement" + BlockDefinition="1" + AutoOnHr=15 + AutoOnMn=42 + AdvancedBatteryChargeConfiguration = "Tuesday" + BeginningOfDay = "10:30" + WorkPeriod = "15:45" + PeakShiftDayConfiguration = "Saturday" + StartTime = "10:30" + EndTime = "12:30" + ChargeStartTime = "13:30" + #Password = "" + #SecurePassword=$pwwd.ToString() + #PathToKey="" + } + + PowerManagement PowerManagementSettings_next #resource name + { + Category = "PowerManagement" + BlockDefinition="2" + PeakShiftDayConfiguration = "Sunday" + StartTime = "10:30" + EndTime = "12:30" + ChargeStartTime = "19:45" + #Password = "" + #SecurePassword=$pwwd.ToString() + } + } +} + +# Call the configuration. +# It will create a folder with the same name as configuration name (\POSTBehaviorConfiguration)and will contain mof output file. + +PowerManagementConfiguration + +#Push Mof +Start-DscConfiguration -Path .\PowerManagementConfiguration\ -wait -verbose -debug -force + + +# SIG # Begin signature block +# MIIkoQYJKoZIhvcNAQcCoIIkkjCCJI4CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCD3DRvP4Ge+oqvb +# NPL4kJX6XrKBUkP4OtmxNABi9SvD46CCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOEwghDdAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCCgzGFVz4jaODIArbxrSNF1Epj9HOQ2sq1GChoiOkqt +# ODANBgkqhkiG9w0BAQEFAASCAYBcgs1k+YLFeY2/OTG0jH40qh2t7KfRNxgW734W +# SzjUODIkFGyBSybGAu9Gh8FF0PeGqjQO6PDJBLNuauLy8BVcj7XS03w2Qnc052B1 +# GiM2gC+JAIJ/4uS2O7wwoDxUF45P5cCPWX4BHyjGCaMqd70Vq3hJKW1A7LEYWm1r +# wHWqeJuAAGsr1JBP8Z7YqI5t8NWgRJnwDjpG67RHBSSz9sFJ1/AEYJEZl2/U2xFT +# v5yg63vXuGJprUKBIviCYdiq6qMO0/FOA3uqI8cYs6ncLQO/cgjsY3kTaZD5M7rR +# axDhnEAfR+JhHNXEwrn8TjmOe7j3LMiYNQzO6kaa3FCq+c4Xr/acDSDk7gugIDpK +# ZQinfiEhZoSblb3IsScZ1fXjaZAxbtXDDkiIY7pu2DZYx/BGtKB5IxhNO6/oeny0 +# c5z1JtAl4ip7LK8qzYPKio/YKjHSSqzcxg0SeQq1Bez1amNfFogfgOYOTS8rIZ5x +# HG1xGkhoIyx5TwXUMwmMuXuVfsmhgg49MIIOOQYKKwYBBAGCNwMDATGCDikwgg4l +# BgkqhkiG9w0BBwKggg4WMIIOEgIBAzENMAsGCWCGSAFlAwQCATCCAQ8GCyqGSIb3 +# DQEJEAEEoIH/BIH8MIH5AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCCr5fgvTFSnHPTr3NqXClRjJcWVGu61//MfZOkLy3SR1gIVAJka+eyHEjy0TZfQ +# nYLb8YzUXga/GA8yMDIyMDkyOTEwNDEzMVowAwIBHqCBhqSBgzCBgDELMAkGA1UE +# BhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZT +# eW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYg +# VGltZVN0YW1waW5nIFNpZ25lciAtIEczoIIKizCCBTgwggQgoAMCAQICEHsFsdRJ +# aFFE98mJ0pwZnRIwDQYJKoZIhvcNAQELBQAwgb0xCzAJBgNVBAYTAlVTMRcwFQYD +# VQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0 +# d29yazE6MDgGA1UECxMxKGMpIDIwMDggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0 +# aG9yaXplZCB1c2Ugb25seTE4MDYGA1UEAxMvVmVyaVNpZ24gVW5pdmVyc2FsIFJv +# b3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTYwMTEyMDAwMDAwWhcNMzEw +# MTExMjM1OTU5WjB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29y +# cG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNV +# BAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggEiMA0GCSqGSIb3 +# DQEBAQUAA4IBDwAwggEKAoIBAQC7WZ1ZVU+djHJdGoGi61XzsAGtPHGsMo8Fa4aa +# JwAyl2pNyWQUSym7wtkpuS7sY7Phzz8LVpD4Yht+66YH4t5/Xm1AONSRBudBfHkc +# y8utG7/YlZHz8O5s+K2WOS5/wSe4eDnFhKXt7a+Hjs6Nx23q0pi1Oh8eOZ3D9Jqo +# 9IThxNF8ccYGKbQ/5IMNJsN7CD5N+Qq3M0n/yjvU9bKbS+GImRr1wOkzFNbfx4Db +# ke7+vJJXcnf0zajM/gn1kze+lYhqxdz0sUvUzugJkV+1hHk1inisGTKPI8EyQRtZ +# Dqk+scz51ivvt9jk1R1tETqS9pPJnONI7rtTDtQ2l4Z4xaE3AgMBAAGjggF3MIIB +# czAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADBmBgNVHSAEXzBd +# MFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5j +# b20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMC4G +# CCsGAQUFBwEBBCIwIDAeBggrBgEFBQcwAYYSaHR0cDovL3Muc3ltY2QuY29tMDYG +# A1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9zLnN5bWNiLmNvbS91bml2ZXJzYWwtcm9v +# dC5jcmwwEwYDVR0lBAwwCgYIKwYBBQUHAwgwKAYDVR0RBCEwH6QdMBsxGTAXBgNV +# BAMTEFRpbWVTdGFtcC0yMDQ4LTMwHQYDVR0OBBYEFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMB8GA1UdIwQYMBaAFLZ3+mlIR59TEtXC6gcydgfRlwcZMA0GCSqGSIb3DQEB +# CwUAA4IBAQB16rAt1TQZXDJF/g7h1E+meMFv1+rd3E/zociBiPenjxXmQCmt5l30 +# otlWZIRxMCrdHmEXZiBWBpgZjV1x8viXvAn9HJFHyeLojQP7zJAv1gpsTjPs1rST +# yEyQY0g5QCHE3dZuiZg8tZiX6KkGtwnJj1NXQZAv4R5NTtzKEHhsQm7wtsX4YVxS +# 9U72a433Snq+8839A9fZ9gOoD+NT9wp17MZ1LqpmhQSZt/gGV+HGDvbor9rsmxgf +# qrnjOgC/zoqUywHbnsc4uw9Sq9HjlANgCk2g/idtFDL8P5dA4b+ZidvkORS92uTT +# w+orWrOVWFUEfcea7CMDjYUq0v+uqWGBMIIFSzCCBDOgAwIBAgIQe9Tlr7rMBz+h +# ASMEIkFNEjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMU +# U3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5l +# dHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0Ew +# HhcNMTcxMjIzMDAwMDAwWhcNMjkwMzIyMjM1OTU5WjCBgDELMAkGA1UEBhMCVVMx +# HTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRl +# YyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYgVGltZVN0 +# YW1waW5nIFNpZ25lciAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +# AQEArw6Kqvjcv2l7VBdxRwm9jTyB+HQVd2eQnP3eTgKeS3b25TY+ZdUkIG0w+d0d +# g+k/J0ozTm0WiuSNQI0iqr6nCxvSB7Y8tRokKPgbclE9yAmIJgg6+fpDI3VHcAyz +# X1uPCB1ySFdlTa8CPED39N0yOJM/5Sym81kjy4DeE035EMmqChhsVWFX0fECLMS1 +# q/JsI9KfDQ8ZbK2FYmn9ToXBilIxq1vYyXRS41dsIr9Vf2/KBqs/SrcidmXs7Dby +# lpWBJiz9u5iqATjTryVAmwlT8ClXhVhe6oVIQSGH5d600yaye0BTWHmOUjEGTZQD +# RcTOPAPstwDyOiLFtG/l77CKmwIDAQABo4IBxzCCAcMwDAYDVR0TAQH/BAIwADBm +# BgNVHSAEXzBdMFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8v +# ZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5j +# b20vcnBhMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly90cy1jcmwud3Muc3ltYW50 +# ZWMuY29tL3NoYTI1Ni10c3MtY2EuY3JsMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MA4GA1UdDwEB/wQEAwIHgDB3BggrBgEFBQcBAQRrMGkwKgYIKwYBBQUHMAGGHmh0 +# dHA6Ly90cy1vY3NwLndzLnN5bWFudGVjLmNvbTA7BggrBgEFBQcwAoYvaHR0cDov +# L3RzLWFpYS53cy5zeW1hbnRlYy5jb20vc2hhMjU2LXRzcy1jYS5jZXIwKAYDVR0R +# BCEwH6QdMBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTYwHQYDVR0OBBYEFKUT +# AamfhcwbbhYeXzsxqnk2AHsdMB8GA1UdIwQYMBaAFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMA0GCSqGSIb3DQEBCwUAA4IBAQBGnq/wuKJfoplIz6gnSyHNsrmmcnBjL+NV +# KXs5Rk7nfmUGWIu8V4qSDQjYELo2JPoKe/s702K/SpQV5oLbilRt/yj+Z89xP+Yz +# CdmiWRD0Hkr+Zcze1GvjUil1AEorpczLm+ipTfe0F1mSQcO3P4bm9sB/RDxGXBda +# 46Q71Wkm1SF94YBnfmKst04uFZrlnCOvWxHqcalB+Q15OKmhDc+0sdo+mnrHIsV0 +# zd9HCYbE/JElshuW6YUI6N3qdGBuYKVWeg3IRFjc5vlIFJ7lv94AvXexmBRyFCTf +# xxEsHwA/w0sUxmcczB4Go5BfXFSLPuMzW4IPxbeGAk5xn+lmRT92MYICWjCCAlYC +# AQEwgYswdzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0 +# aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9T +# eW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIENBAhB71OWvuswHP6EBIwQiQU0S +# MAsGCWCGSAFlAwQCAaCBpDAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJ +# KoZIhvcNAQkFMQ8XDTIyMDkyOTEwNDEzMVowLwYJKoZIhvcNAQkEMSIEIJJWWp89 +# xw1stKFvJkYUhfsVfGPEZEQsrmtnnrh3Ma9uMDcGCyqGSIb3DQEJEAIvMSgwJjAk +# MCIEIMR0znYAfQI5Tg2l5N58FMaA+eKCATz+9lPvXbcf32H4MAsGCSqGSIb3DQEB +# AQSCAQCMtmHjzn/uMpWxQGENlayVd7CxpIlmVVjBJ/ndbXFLKF83+sG5jYoKZAtt +# oXhQpMJnNmKMpwS39S9LgmZ8BqtUv9PY4Bug884qda6W6A2ZzJZWQPhFtRke/pdE +# xhNQUBnAFMFXc6i+4/RV693IjB3tF3x7KfByJDI7J+KhsFt5PZc6iZIM8hlt6FXG +# oew9FW9YK7H7KoKNxiTLpeWHrD+AnG9MYu7pf4HassK9pYtNaa3ejAh4BU9xnmDS +# wEf/7qEDJ118p7psMa9itxiYJp3NRYnM0wCwl1VGQNmmkg0dupHO8sfNWRVXgeqJ +# k3saYpBiudH/CI5+t6dp3OAJWIUu +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_SecureKey.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_SecureKey.ps1 new file mode 100644 index 0000000..4e74fdf --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSC_SampleScripts/Sample_SecureKey.ps1 @@ -0,0 +1,281 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +$KeyFile = "\\Machine1\MySecurePath\AES.key" +$Key = New-Object Byte[] 16 # You can use 16, 24, or 32 for AES +[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($Key) +$Key | out-file $KeyFile + +$PasswordFile = "\\Machine1\SharedPath\Password.txt" +$Key_file = Get-Content $KeyFile +$Password = "P@ssword1" | ConvertTo-SecureString -AsPlainText -Force +$Password | ConvertFrom-SecureString -key $Key_file | Out-File $PasswordFile + +$secure_pwd=Get-Content $PasswordFile + +Configuration MultipleCatConfiguration +{ + param + ( + [string]$ComputerName + ) + + Import-DscResource -ModuleName DellBIOSProvider + + + + Node $ComputerName { + POSTBehavior POSTBehaviorSettings #resource name + { + Category = "POSTBehavior" + Keypad = "EnabledByNumlock" + PowerWarn = "Disabled" + Numlock = "Disabled" + SecurePassword=$secure_pwd.ToString() + PathToKey = "\\Machine1\MySecurePath\AES.key" + } + + PowerManagement PowerManagementSettings #resource name + { + Category = "PowerManagement" + BlockDefinition="1" + AutoOnHr=15 + AutoOnMn=42 + AdvancedBatteryChargeConfiguration = "Tuesday" + BeginningOfDay = "10:30" + WorkPeriod = "15:45" + PeakShiftDayConfiguration = "Saturday" + StartTime = "10:30" + EndTime = "12:30" + ChargeStartTime = "13:30" + SecurePassword=$secure_pwd.ToString() + PathToKey = "\\Machine1\MySecurePath\AES.key" + } + + } +} + +# Call the configuration. +# It will create a folder with the same name as configuration name (\POSTBehaviorConfiguration)and will contain mof output file. + +MultipleCatConfiguration -ComputerName 10.194.23.66 + + +#Push Mof +Start-DscConfiguration -Path .\MultipleCatConfiguration\ -wait -verbose -debug -force + + +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCB8Dxx7TEzYlFBa +# +NUFMmqDWJUvS7iYhu5SkkUyq4kGTaCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCAQDFwPCz+zeee1aV1VGWlo6MO5aWoPqzpO84arV93j +# qDANBgkqhkiG9w0BAQEFAASCAYBiljVCy/m4gt/+n1jiiHlGYUy0/XicnJxlV7Fn +# b/w3ITTnPrLXZOWTJNBkdLy6Sy7Z/mQp7FxKsh+U07WhZ/t/mnDxTAuVGsyeEJa+ +# oOWIbJ/lXa+fxAvGCz4yxcc0VYQ2aziA69HnXCZKEYVswoB9vtb1X0JEhLHAKvBP +# FlsZ7rc3ztte7GY67MgJiebqyNW/JtU4yS9GYjf/IEqyVAwOD5AYN+SzeU24s8XP +# IPJ+EYP+EAmVYz0ZElKwvHGPFDF1GiJ6479+ha/WX5DwcyJcAevFcoCFzqazbZlG +# FJvllKTPLrAIfJsVsGTPMTEZWZF0IS5wZaYEOhRgMDihn8rh7J4IdJR7u7cJUbuq +# DWE1mDjHHgAFzav/1fSeRE7gOwmErsIK+H/uHH3zLwqzFjXOx1ptb/6nDFs25ee3 +# vuoir3cxJcnZMUqTzDAEQdmxHvGyCCZTp+8R9uo8Ao4JzlNw5dhCsgftL/yZVu8s +# VVMisb6XDITo3KrzLqpp/8O0CH6hgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCBcURq+u/+e3YVpYPEyF+qgfRWC7ZBuZZ9144mTa06KJQIUA9Q5OHoZLWiIO6FN +# 91e9TndjXzIYDzIwMjIwOTI5MTA0MTMyWjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MTMyWjAvBgkqhkiG9w0BCQQxIgQge6Yy7cKg +# ykhzhm/M3lf4KQTMkk+L79mM9s0j0Mdbc1MwNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBAFsrohW72Sl7/sTqcTt5Qq4G5ChmvFcKX9PQZ1iHBxAaKGZnQUOJGkiMjKDF +# PMwBhpmxmmjzr8ibHgr8VUb2W3rxUBduFAKW9KY6F476NQ0UMyrakApThj5QxKUW +# iZqR3tpR01kuxW5QDwN0RnfjVOIh5+nLPnnNi1drW0SGhexIFr+bt6WVajDiadhL +# fqC/QiTCevpwngWGClEwo8S+Yoll4wR4Op66bVPHRZgi7LkW4rzbeTAr68DEC3uu +# fOLLfN/zpFX+5PE+UaQNZlN50Im6MTRGyTAiESCBersXwS7wYvTuaTYEcZVWIf4q +# A0CcYiCJkmtht0i4eA8SpAFgLHI= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSMBLibWrapper.dll b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSMBLibWrapper.dll new file mode 100644 index 0000000..605edb3 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSMBLibWrapper.dll differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSMBLibrary.dll b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSMBLibrary.dll new file mode 100644 index 0000000..fe0dd85 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DSMBLibrary.dll differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Dell Command PowerShell Provider Third Party Licenses.pdf b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Dell Command PowerShell Provider Third Party Licenses.pdf new file mode 100644 index 0000000..47851bf Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Dell Command PowerShell Provider Third Party Licenses.pdf differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DellBIOSProvider.PSM1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DellBIOSProvider.PSM1 new file mode 100644 index 0000000..8cc9ba3 --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DellBIOSProvider.PSM1 @@ -0,0 +1,203 @@ +.$psScriptRoot\Set-Dell1stBootdevice.ps1 +.$psScriptRoot\Get-DellBiosSettings.ps1 +.$psScriptRoot\Clear-DellAdminPassword.ps1 +.$psScriptRoot\Set-DellAutoOnForSelectDays.ps1 + +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCqk7xcV+QeNJfV +# FnSHvf5v5VkaEpGffoq26PNDAn0GQKCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCBHcramWTMRAaAgEX6wJt0CXR3uMc/14u9sekH29o00 +# rDANBgkqhkiG9w0BAQEFAASCAYCcHDhvKonFzg2AhAuZZwfBa8U1/9SUItTh0N94 +# 8pDCs27lIUtVGqN+VcdB7VVcrHlpkaGjVpjbof/2S2xY/FsY0TuZcxWfrH9hF/bh +# 122MPd2hqIDGSX+yD0X3cib3hsV5PUrUVnu/WFPdzgGGC4NVYiKmd6I+49xjIKOQ +# QjFgmDsyeaYMT0Q7n9Jl0eGhfO9+Xa9UXkuxVt3bOFUynjLYveBelB3olRpJ6+zB +# 109hyvido73U7bmL/ZLXO6s36jO2JcDsxM0XTTWF9kqnCsxVkhJTfFmGfRTICr2G +# puF0yjNBkP4lQDfEwRwzJaIzr7x1wukx2k1NenpHpVXhdf69WKSh+nKETA8YH+5e +# cmZqb9KxiLo9PijTl1wHcZXPa4L7XDKNOyAwQPQr9MOT0AjdcLio//xTpJYGETc0 +# W6pT8jbH67EYjWJJV02UzoHBXys8eDx0rej9KSscWugEALcjVVnlqbCyJIWPzzVN +# vT1LXEwsk8bNUxyDxa/21dod31ahgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCDssAoblnEcNnECqzsbOE0ur9IhZCA4GKw8EbfuH9wEiAIUN/c6JVKPLbfG2R7D +# MWYQZ+A4cd4YDzIwMjIwOTI5MTA0MTEwWjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MTEwWjAvBgkqhkiG9w0BCQQxIgQgWxD5fIa5 +# /DOwbWV2IJOZgRMrfcfEw0g7ELa4uEuE82gwNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBAIts3Yz0EtND27RaCWD+85xK8rOtyM5QDycINskufP0bCGOmZzmE7V63vva/ +# BwXFALh43bAMLohqo/IN/3vO8APqahykqFFFeXZabSLWhssaqgJZlxryfATiAN0e +# 4Oh6PBjbEvIomXc1eH8lkcG3rKXGqFWblwsoD6TQ7iGHHTDVIswdFK1JAAdz7i1H +# 8WuvrcQSzpqVysEEfVOGI/X9eIA9QJNUvRxdXxDRccCxufqnk03Hop28y3JRP/fM +# f28IByRjLqGnv7ZeKX6vR9VIDWCHDZYdEeg5sM93Ec5LDbtPxsFCJveDA+tH9rCT +# PypbOLhQVBFhfWTKCpWGlV8bhV0= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DellBIOSProvider.cat b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DellBIOSProvider.cat new file mode 100644 index 0000000..9cfc43f Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DellBIOSProvider.cat differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DellBIOSProvider.dll b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DellBIOSProvider.dll new file mode 100644 index 0000000..c39fdc9 Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DellBIOSProvider.dll differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DellBIOSProvider.psd1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DellBIOSProvider.psd1 new file mode 100644 index 0000000..a7ff53c Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/DellBIOSProvider.psd1 differ diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Get-DellBiosSettings.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Get-DellBiosSettings.ps1 new file mode 100644 index 0000000..76de16e --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Get-DellBiosSettings.ps1 @@ -0,0 +1,240 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +function Get-DellBiosSettings { +<# + .Synopsis + retrieves all BIOS settings applicable to the system + .Description + This CmdLet retrieves the BIOS settings that are applicable to the system. + .Example + Get-DellBiosSettings +#> + + BEGIN { } + PROCESS { + $DellBIOS = get-childitem -path DellSmbios:\ | select category | + foreach { + get-childitem -path @("DellSmbios:\" + $_.Category) | select attribute, currentvalue, possiblevalues, PSPath + } + $DellBIOS | Out-GridView + } + END{ } + + } + + +# SIG # Begin signature block +# MIIkoQYJKoZIhvcNAQcCoIIkkjCCJI4CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBGTzFZkerUKZIw +# xqejkv6nKBJWa0Zy3DwoUCljJzIVMKCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOEwghDdAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCAf6E8+YPplF/3Fbw3NDQ2hA458D3ovXkP8Ls/APv9v +# bjANBgkqhkiG9w0BAQEFAASCAYCHE4crgwhq+KevDa3mEzBb4hzDVO8IzTbmJjVW +# 2tdkDjNa5JJ07o+GeyghJJRzD7uuepfHjT0u8KtpCIzbHNkMU+eEKPgSMRUiIo54 +# FPeuUxcnW4dSwEyfkdcsZejWiNUzhHjXhjAWvaYoXx8JwX9buu74zBWrSOhB/n0L +# vbAepL7flACT/jft9VTa9JEsUgOYb8Y5o5zF3ZQ8us0qvVt0ZiRkj2tYxENl+wL/ +# zaJAa/EvrBgI6GIlRxb9oVIUlbmw3TwBjy4X1irdKfdg3WisR5bieY58lR6xfcTs +# +mWFy/OHsj0zoYkyBc2wmz46rbvan+QDf0kfSfDmdlbPqC7iJHkVw3LhfJwdSr8Q +# 37ftNAes4IWRg0avzFG2tFXMPcD660p6EhQvHFmBloR/ZabQWC+bXR6x33OrR/i5 +# l3lWFunDdKyswb+sjQ9H5IdqlpMRPheWlvcu2DA74HbJM2fR/3mGCHgsUls3/mzA +# pUMXR3cgEYbd9NrCRCQL7mBj98Ohgg49MIIOOQYKKwYBBAGCNwMDATGCDikwgg4l +# BgkqhkiG9w0BBwKggg4WMIIOEgIBAzENMAsGCWCGSAFlAwQCATCCAQ8GCyqGSIb3 +# DQEJEAEEoIH/BIH8MIH5AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCDiNiiEBLq/VjmH7K9vhLU8m7xaZzDXSjDbYsTPjCqfNAIVAMg9CmbbD8usGMUg +# 1Q3vWffOEUdGGA8yMDIyMDkyOTEwNDA1NlowAwIBHqCBhqSBgzCBgDELMAkGA1UE +# BhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZT +# eW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYg +# VGltZVN0YW1waW5nIFNpZ25lciAtIEczoIIKizCCBTgwggQgoAMCAQICEHsFsdRJ +# aFFE98mJ0pwZnRIwDQYJKoZIhvcNAQELBQAwgb0xCzAJBgNVBAYTAlVTMRcwFQYD +# VQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0 +# d29yazE6MDgGA1UECxMxKGMpIDIwMDggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0 +# aG9yaXplZCB1c2Ugb25seTE4MDYGA1UEAxMvVmVyaVNpZ24gVW5pdmVyc2FsIFJv +# b3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTYwMTEyMDAwMDAwWhcNMzEw +# MTExMjM1OTU5WjB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29y +# cG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNV +# BAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggEiMA0GCSqGSIb3 +# DQEBAQUAA4IBDwAwggEKAoIBAQC7WZ1ZVU+djHJdGoGi61XzsAGtPHGsMo8Fa4aa +# JwAyl2pNyWQUSym7wtkpuS7sY7Phzz8LVpD4Yht+66YH4t5/Xm1AONSRBudBfHkc +# y8utG7/YlZHz8O5s+K2WOS5/wSe4eDnFhKXt7a+Hjs6Nx23q0pi1Oh8eOZ3D9Jqo +# 9IThxNF8ccYGKbQ/5IMNJsN7CD5N+Qq3M0n/yjvU9bKbS+GImRr1wOkzFNbfx4Db +# ke7+vJJXcnf0zajM/gn1kze+lYhqxdz0sUvUzugJkV+1hHk1inisGTKPI8EyQRtZ +# Dqk+scz51ivvt9jk1R1tETqS9pPJnONI7rtTDtQ2l4Z4xaE3AgMBAAGjggF3MIIB +# czAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADBmBgNVHSAEXzBd +# MFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5j +# b20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMC4G +# CCsGAQUFBwEBBCIwIDAeBggrBgEFBQcwAYYSaHR0cDovL3Muc3ltY2QuY29tMDYG +# A1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9zLnN5bWNiLmNvbS91bml2ZXJzYWwtcm9v +# dC5jcmwwEwYDVR0lBAwwCgYIKwYBBQUHAwgwKAYDVR0RBCEwH6QdMBsxGTAXBgNV +# BAMTEFRpbWVTdGFtcC0yMDQ4LTMwHQYDVR0OBBYEFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMB8GA1UdIwQYMBaAFLZ3+mlIR59TEtXC6gcydgfRlwcZMA0GCSqGSIb3DQEB +# CwUAA4IBAQB16rAt1TQZXDJF/g7h1E+meMFv1+rd3E/zociBiPenjxXmQCmt5l30 +# otlWZIRxMCrdHmEXZiBWBpgZjV1x8viXvAn9HJFHyeLojQP7zJAv1gpsTjPs1rST +# yEyQY0g5QCHE3dZuiZg8tZiX6KkGtwnJj1NXQZAv4R5NTtzKEHhsQm7wtsX4YVxS +# 9U72a433Snq+8839A9fZ9gOoD+NT9wp17MZ1LqpmhQSZt/gGV+HGDvbor9rsmxgf +# qrnjOgC/zoqUywHbnsc4uw9Sq9HjlANgCk2g/idtFDL8P5dA4b+ZidvkORS92uTT +# w+orWrOVWFUEfcea7CMDjYUq0v+uqWGBMIIFSzCCBDOgAwIBAgIQe9Tlr7rMBz+h +# ASMEIkFNEjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMU +# U3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5l +# dHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0Ew +# HhcNMTcxMjIzMDAwMDAwWhcNMjkwMzIyMjM1OTU5WjCBgDELMAkGA1UEBhMCVVMx +# HTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRl +# YyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYgVGltZVN0 +# YW1waW5nIFNpZ25lciAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +# AQEArw6Kqvjcv2l7VBdxRwm9jTyB+HQVd2eQnP3eTgKeS3b25TY+ZdUkIG0w+d0d +# g+k/J0ozTm0WiuSNQI0iqr6nCxvSB7Y8tRokKPgbclE9yAmIJgg6+fpDI3VHcAyz +# X1uPCB1ySFdlTa8CPED39N0yOJM/5Sym81kjy4DeE035EMmqChhsVWFX0fECLMS1 +# q/JsI9KfDQ8ZbK2FYmn9ToXBilIxq1vYyXRS41dsIr9Vf2/KBqs/SrcidmXs7Dby +# lpWBJiz9u5iqATjTryVAmwlT8ClXhVhe6oVIQSGH5d600yaye0BTWHmOUjEGTZQD +# RcTOPAPstwDyOiLFtG/l77CKmwIDAQABo4IBxzCCAcMwDAYDVR0TAQH/BAIwADBm +# BgNVHSAEXzBdMFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8v +# ZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5j +# b20vcnBhMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly90cy1jcmwud3Muc3ltYW50 +# ZWMuY29tL3NoYTI1Ni10c3MtY2EuY3JsMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MA4GA1UdDwEB/wQEAwIHgDB3BggrBgEFBQcBAQRrMGkwKgYIKwYBBQUHMAGGHmh0 +# dHA6Ly90cy1vY3NwLndzLnN5bWFudGVjLmNvbTA7BggrBgEFBQcwAoYvaHR0cDov +# L3RzLWFpYS53cy5zeW1hbnRlYy5jb20vc2hhMjU2LXRzcy1jYS5jZXIwKAYDVR0R +# BCEwH6QdMBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTYwHQYDVR0OBBYEFKUT +# AamfhcwbbhYeXzsxqnk2AHsdMB8GA1UdIwQYMBaAFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMA0GCSqGSIb3DQEBCwUAA4IBAQBGnq/wuKJfoplIz6gnSyHNsrmmcnBjL+NV +# KXs5Rk7nfmUGWIu8V4qSDQjYELo2JPoKe/s702K/SpQV5oLbilRt/yj+Z89xP+Yz +# CdmiWRD0Hkr+Zcze1GvjUil1AEorpczLm+ipTfe0F1mSQcO3P4bm9sB/RDxGXBda +# 46Q71Wkm1SF94YBnfmKst04uFZrlnCOvWxHqcalB+Q15OKmhDc+0sdo+mnrHIsV0 +# zd9HCYbE/JElshuW6YUI6N3qdGBuYKVWeg3IRFjc5vlIFJ7lv94AvXexmBRyFCTf +# xxEsHwA/w0sUxmcczB4Go5BfXFSLPuMzW4IPxbeGAk5xn+lmRT92MYICWjCCAlYC +# AQEwgYswdzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0 +# aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9T +# eW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIENBAhB71OWvuswHP6EBIwQiQU0S +# MAsGCWCGSAFlAwQCAaCBpDAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJ +# KoZIhvcNAQkFMQ8XDTIyMDkyOTEwNDA1NlowLwYJKoZIhvcNAQkEMSIEIB5kyQha +# k+ZD9GLG5/qIhAVhkMYWt16A4bE1Q1exSHFUMDcGCyqGSIb3DQEJEAIvMSgwJjAk +# MCIEIMR0znYAfQI5Tg2l5N58FMaA+eKCATz+9lPvXbcf32H4MAsGCSqGSIb3DQEB +# AQSCAQA9A3PmnN0VW6dv2cnjGUi60JigHolEHKiYoQT+1cuXcyHYWIwPdk0iAWcS +# FRdSjSIHrvHFF76TMVea9p9vV5T9KOgZUzTgguJ/8losOKpanHJ+JggPw1GhQrkV +# oTrPiNRK0Q2j16ewkiqhIEmU0c3z5epMCG+RingSWyyP0iLxMkO4ebfAaQXOjhtd +# rqh66J+77Zn1wi1qwicwAzrV6CPZAFdUjLREktY3ykw/n9reE5gdrsnXPwa1DGcc +# d303mn5Q3oQ+C8SkVbYJDXAGoAciSL8jOps/ia6AHpbk/0cnEaZP820BTvea5Ay3 +# BfL7gK3t4RRyTVBK3IWJD+1aAIAH +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Install-instructions.txt b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Install-instructions.txt new file mode 100644 index 0000000..d47eb90 --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Install-instructions.txt @@ -0,0 +1,23 @@ +1. DellCommandPowerShellProvider2.7.0_.zip might be blocked on your system. + Use the following PowerShell Cmdlet to unblock the file - + Unblock-File .\DellCommandPowerShellProvider2.7.0_.zip + +2. Extract the contents of the zip after it is unblocked. + + +3. For a 32-bit OS, copy the files from DellBIOSProviderX86 folder to the following location: + +Use ${env:ProgramFiles}\WindowsPowerShell\Modules\DellBIOSProviderX86 + + For a 64-bit OS, copy the files from DellBIOSProvider folder to the following location: + ${env:ProgramFiles}\WindowsPowerShell\Modules\DellBIOSProvider + + + Note: - You can create a module folder using following command from PowerShell console - + + New-Item -Type Container -Force -path + +4. Open Windows PowerShell console and import the DellBIOSProvider module. + Or you can modify the Load-DellBIOSProvider.ps1 as per your requirements and then run the script file. + + Note: - To automatically load then module when Windows PowerShell is started, add Import-Module DellBIOSProvider to the Windows PowerShell Profile.ps1 file. \ No newline at end of file diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Load-DellBIOSProvider.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Load-DellBIOSProvider.ps1 new file mode 100644 index 0000000..5937dd5 --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Load-DellBIOSProvider.ps1 @@ -0,0 +1,278 @@ +<# +Load-DellBIOSProvider.ps1 +############################################################################# + + Copyright 2015-2018 Dell Inc. All rights reserved. + + THIS SOFTWARE IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT IS + PROVIDED “AS IS” WITHOUT ANY WARRANTY, EXPRESS, IMPLIED OR OTHERWISE, + INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTY OF MERCHANTABILITY OR + FITNESS FOR A PARTICULAR PURPOSE OR ANY WARRANTY REGARDING TITLE OR + AGAINST INFRINGEMENT. IN NO EVENT SHALL DELL BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTUTUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +############################################################################# +#> + +# This is a sample script that works for Dell Command | PowerShell Provider 64-bit Module; however, this script can be modified for 32-bit module. + +if ( 2 -eq $PSVersionTable.PSVersion.Major ) +{ + "PowerShell version is 2.x which is not supported as of now." + break +} + +# Check if module is already imported or loaded into the current session +if (get-module -name DellBIOSProvider) { + Write-Host "DellBIOSProvider has been imported in the current session. exiting." + break +} + + +# Module must already be copied to the path on your local computer in $Dellmodulepath\DellBIOSProvider +$DellModulePath = "${env:ProgramFiles}\Dell\PowerShell\Modules\" + + +$p = [Environment]::GetEnvironmentVariable("PSModulePath") + +# Have the user set the env var machine or user only once. +$Paths = $p.Split(";") +if ($Paths.Contains($DellModulePath)) +{ + Write-Host $DellModulePath "is already added to PSModulePath." +} +else +{ + $p += ";$DellModulePath" + #Environment variable target, Choose from "Process", "User", "Machine". Default is current process. + $target = "Machine" + [Environment]::SetEnvironmentVariable("PSModulePath",$p, $target) + +} + + +# Write-Host "Creating module directory" +# New-Item -Type Container -Force -path $DellModulePath | out-null + + + +if (Test-path -path $DellModulePath\DellBIOSProvider) +{ + cd $DellModulePath\DellBIOSProvider + import-module .\DellBIOSProvider.psd1 -Verbose + + cd DellSmbios: +} + +else { + Write-Host "Please check the path where module is copied." +} + +# import a module from a remote computer +# $s = New-PSSession -ComputerName Server01 +# Get-Module -PSSession $s -ListAvailable -Name DellBIOSProvider +#Import-Module -PSSession $s -Name DellBIOSProvider +# SIG # Begin signature block +# MIIkoQYJKoZIhvcNAQcCoIIkkjCCJI4CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBAzjp7/Q6ffEQ+ +# 1SijdktGgf4Pk972jO+AQu0Zxix3vaCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOEwghDdAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCAnenNkLnhwcXM6y0ukcFYwwN8QijqagI+WD/NfrCs1 +# lzANBgkqhkiG9w0BAQEFAASCAYAIVUMfnlFl5yPY+tCzKVvzD9u/h3BJAmJvNjeg +# 6WKOMXkU/vEooKbokFiH9R4l1PmFMM0atxgKCnf9Fc79PeRONOSPOV6r5NYiaSUx +# AYvKwpfqikyK/AcxEjX3tTWqYRtabUXFkCwt3e10pYLe8KxTbjo6A3Z4mVfAg4tB +# N4jZp6UY4jcpq+4ho34dx6V0CyKtERHV61woE+7Rm0DsuvDTglmwz7NeVfX473k8 +# aKavrTV8pDBIly7HStfhYQuN68RiwhmWvwloFSP8L6koqK1FSq9T8zKc3bpTfCBI +# JRNFXbyUqmYvrcyVgrZTaPlQzXjtbNY5wWYjBC09Xz9bdqXTJhCNBq2lL5Q/yaaO +# B79CoqoNTclPJQYlo6EaSNPx7qzhTz3xFTmUTPmMv+s8IMDu+COxHtcvra0h1Hop +# aEtV0Qx9qoLt7BaVV9kohR/gICiOODmDbBVrcTxGiOr7vhMnA8j+Y01tZ+z0SPwL +# egD2q4L5cQ2HnvK968k/7DRtIxehgg49MIIOOQYKKwYBBAGCNwMDATGCDikwgg4l +# BgkqhkiG9w0BBwKggg4WMIIOEgIBAzENMAsGCWCGSAFlAwQCATCCAQ8GCyqGSIb3 +# DQEJEAEEoIH/BIH8MIH5AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCCleXqHclt1h7DNtfjfLjWgyo8ArFt09Ryf167Ht1QxQwIVAPirYxhwIEtLDaHi +# MqFdcyVUgBDxGA8yMDIyMDkyOTEwNDA1OFowAwIBHqCBhqSBgzCBgDELMAkGA1UE +# BhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZT +# eW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYg +# VGltZVN0YW1waW5nIFNpZ25lciAtIEczoIIKizCCBTgwggQgoAMCAQICEHsFsdRJ +# aFFE98mJ0pwZnRIwDQYJKoZIhvcNAQELBQAwgb0xCzAJBgNVBAYTAlVTMRcwFQYD +# VQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0 +# d29yazE6MDgGA1UECxMxKGMpIDIwMDggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0 +# aG9yaXplZCB1c2Ugb25seTE4MDYGA1UEAxMvVmVyaVNpZ24gVW5pdmVyc2FsIFJv +# b3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTYwMTEyMDAwMDAwWhcNMzEw +# MTExMjM1OTU5WjB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29y +# cG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNV +# BAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggEiMA0GCSqGSIb3 +# DQEBAQUAA4IBDwAwggEKAoIBAQC7WZ1ZVU+djHJdGoGi61XzsAGtPHGsMo8Fa4aa +# JwAyl2pNyWQUSym7wtkpuS7sY7Phzz8LVpD4Yht+66YH4t5/Xm1AONSRBudBfHkc +# y8utG7/YlZHz8O5s+K2WOS5/wSe4eDnFhKXt7a+Hjs6Nx23q0pi1Oh8eOZ3D9Jqo +# 9IThxNF8ccYGKbQ/5IMNJsN7CD5N+Qq3M0n/yjvU9bKbS+GImRr1wOkzFNbfx4Db +# ke7+vJJXcnf0zajM/gn1kze+lYhqxdz0sUvUzugJkV+1hHk1inisGTKPI8EyQRtZ +# Dqk+scz51ivvt9jk1R1tETqS9pPJnONI7rtTDtQ2l4Z4xaE3AgMBAAGjggF3MIIB +# czAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADBmBgNVHSAEXzBd +# MFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5j +# b20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMC4G +# CCsGAQUFBwEBBCIwIDAeBggrBgEFBQcwAYYSaHR0cDovL3Muc3ltY2QuY29tMDYG +# A1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9zLnN5bWNiLmNvbS91bml2ZXJzYWwtcm9v +# dC5jcmwwEwYDVR0lBAwwCgYIKwYBBQUHAwgwKAYDVR0RBCEwH6QdMBsxGTAXBgNV +# BAMTEFRpbWVTdGFtcC0yMDQ4LTMwHQYDVR0OBBYEFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMB8GA1UdIwQYMBaAFLZ3+mlIR59TEtXC6gcydgfRlwcZMA0GCSqGSIb3DQEB +# CwUAA4IBAQB16rAt1TQZXDJF/g7h1E+meMFv1+rd3E/zociBiPenjxXmQCmt5l30 +# otlWZIRxMCrdHmEXZiBWBpgZjV1x8viXvAn9HJFHyeLojQP7zJAv1gpsTjPs1rST +# yEyQY0g5QCHE3dZuiZg8tZiX6KkGtwnJj1NXQZAv4R5NTtzKEHhsQm7wtsX4YVxS +# 9U72a433Snq+8839A9fZ9gOoD+NT9wp17MZ1LqpmhQSZt/gGV+HGDvbor9rsmxgf +# qrnjOgC/zoqUywHbnsc4uw9Sq9HjlANgCk2g/idtFDL8P5dA4b+ZidvkORS92uTT +# w+orWrOVWFUEfcea7CMDjYUq0v+uqWGBMIIFSzCCBDOgAwIBAgIQe9Tlr7rMBz+h +# ASMEIkFNEjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMU +# U3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5l +# dHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0Ew +# HhcNMTcxMjIzMDAwMDAwWhcNMjkwMzIyMjM1OTU5WjCBgDELMAkGA1UEBhMCVVMx +# HTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRl +# YyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYgVGltZVN0 +# YW1waW5nIFNpZ25lciAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +# AQEArw6Kqvjcv2l7VBdxRwm9jTyB+HQVd2eQnP3eTgKeS3b25TY+ZdUkIG0w+d0d +# g+k/J0ozTm0WiuSNQI0iqr6nCxvSB7Y8tRokKPgbclE9yAmIJgg6+fpDI3VHcAyz +# X1uPCB1ySFdlTa8CPED39N0yOJM/5Sym81kjy4DeE035EMmqChhsVWFX0fECLMS1 +# q/JsI9KfDQ8ZbK2FYmn9ToXBilIxq1vYyXRS41dsIr9Vf2/KBqs/SrcidmXs7Dby +# lpWBJiz9u5iqATjTryVAmwlT8ClXhVhe6oVIQSGH5d600yaye0BTWHmOUjEGTZQD +# RcTOPAPstwDyOiLFtG/l77CKmwIDAQABo4IBxzCCAcMwDAYDVR0TAQH/BAIwADBm +# BgNVHSAEXzBdMFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8v +# ZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5j +# b20vcnBhMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly90cy1jcmwud3Muc3ltYW50 +# ZWMuY29tL3NoYTI1Ni10c3MtY2EuY3JsMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MA4GA1UdDwEB/wQEAwIHgDB3BggrBgEFBQcBAQRrMGkwKgYIKwYBBQUHMAGGHmh0 +# dHA6Ly90cy1vY3NwLndzLnN5bWFudGVjLmNvbTA7BggrBgEFBQcwAoYvaHR0cDov +# L3RzLWFpYS53cy5zeW1hbnRlYy5jb20vc2hhMjU2LXRzcy1jYS5jZXIwKAYDVR0R +# BCEwH6QdMBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTYwHQYDVR0OBBYEFKUT +# AamfhcwbbhYeXzsxqnk2AHsdMB8GA1UdIwQYMBaAFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMA0GCSqGSIb3DQEBCwUAA4IBAQBGnq/wuKJfoplIz6gnSyHNsrmmcnBjL+NV +# KXs5Rk7nfmUGWIu8V4qSDQjYELo2JPoKe/s702K/SpQV5oLbilRt/yj+Z89xP+Yz +# CdmiWRD0Hkr+Zcze1GvjUil1AEorpczLm+ipTfe0F1mSQcO3P4bm9sB/RDxGXBda +# 46Q71Wkm1SF94YBnfmKst04uFZrlnCOvWxHqcalB+Q15OKmhDc+0sdo+mnrHIsV0 +# zd9HCYbE/JElshuW6YUI6N3qdGBuYKVWeg3IRFjc5vlIFJ7lv94AvXexmBRyFCTf +# xxEsHwA/w0sUxmcczB4Go5BfXFSLPuMzW4IPxbeGAk5xn+lmRT92MYICWjCCAlYC +# AQEwgYswdzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0 +# aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9T +# eW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIENBAhB71OWvuswHP6EBIwQiQU0S +# MAsGCWCGSAFlAwQCAaCBpDAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJ +# KoZIhvcNAQkFMQ8XDTIyMDkyOTEwNDA1OFowLwYJKoZIhvcNAQkEMSIEIFZ6WD2D +# 3+r32WEPFY1tUeoZ3XUY1hLlQwSlXth1i3oyMDcGCyqGSIb3DQEJEAIvMSgwJjAk +# MCIEIMR0znYAfQI5Tg2l5N58FMaA+eKCATz+9lPvXbcf32H4MAsGCSqGSIb3DQEB +# AQSCAQAfCxh+/6q6afU+UvGUA0d/DRKnzZuxLH2dcuev9EPi4uUEp0hEm7NtDxOn +# p+HGRzPaVv/0Xkqw3qxPws5avwnVdUEQjj7UC8UmgM41l698a/6gJTq5MWXMdtcJ +# ftZFUIbxbSomV1UjFRjId/urZ9FYndlaBRYvCxwRSId9Pgs4r5GdTL0gywevC7dG +# EQ6K2oT5VbediPnMrxamt+IqMyglSv89NhWeZjHrRV6l7kj5gBtnf5txOnx0aZR9 +# 1XTu0/LksH0TFuSzU28TDTLsqbPzXLeGxsqW25YMh7oTtG8TRUr6t737DqEXOqg3 +# RjJob43zaDcAO3CZM/pwosptBhe9 +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Misc/helper.psm1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Misc/helper.psm1 new file mode 100644 index 0000000..587d28d --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Misc/helper.psm1 @@ -0,0 +1,286 @@ +# Helper functions to be used across resources + +Function New-DellEventLog{ +[CmdletBinding()] + param( + [Parameter (Mandatory=$false)][System.string] $LogName="DellClientBIOS PowerShell", + [Parameter (Mandatory=$false)][System.string] $SourceName="DellBIOSProvider DSC" + ) + + $CustomLog = Get-EventLog -list | Where-object { $_.logdisplayname -eq $LogName} + if (! $CustomLog) { + $ErrorActionPreference = "Continue" + try{ + New-EventLog -LogName $LogName -Source $SourceName + Write-EventLog -LogName $LogName -Source $SourceName -EntryType Information -EventID 0 -Message "DellBIOSProvider DSC started." + } + + catch [System.Security.SecurityException] { + Write-Error "Error: Run as elevated user. Unable to write or read to event logs." + } + } + + +} + +Function Write-DellEventLog{ + +[CmdletBinding()] + [OutputType([int])] + param( + [Parameter (Mandatory=$false)] [System.string]$LogName="DellClientBIOS PowerShell", + [Parameter (Mandatory=$false)] [System.string] $SourceName = "DellBIOSProvider DSC", + [Parameter (Mandatory=$false)] [System.Int16] $EventID=0, + [Parameter (Mandatory=$false)] [System.String] $EntryType='Information', + [Parameter(Mandatory=$true)] [string]$Message + ) + + $CustomLog = Get-EventLog -list | Where-object { $_.logdisplayname -eq $LogName} + if (! $CustomLog) { + New-DellEventLog + } + Write-EventLog -LogName $LogName -Source $SourceName -EntryType $EntryType -EventID $EventID -Message $Message + + +} + +function Confirm-DellPSDrive{ + [CmdletBinding()] + + # Check if DellBIOSProvider module has already been loaded into the PS session + + $DellPSProvider = Get-Module -name DellBIOSProvider + + if ( !$DellPSProvider) + { + Write-Verbose "Drive DellSmbios is not found. Importing DellBiosProvider." + import-module -name DellBiosProvider -verbose -force -ErrorVariable errorInModule + If ($errorInModule) + { + $Message = Module DellBiosProvider failed to import. Errors returned: $($errorInModule.exception.message) + Throw $Message + } + else { + return $false # Module was not already loaded + } + } + else + { + return $true} +} + + +function CheckModuleLoaded{ + [CmdletBinding()] + + # Check if DellBIOSProvider module has already been loaded into the PS session + + $DellPSProvider = Get-Module -name DellBIOSProvider + + if ( !$DellPSProvider) + { + return $false # Module was not already loaded + } + else + { + return $true + } +} +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCC6x9zLFGpcQgL3 +# nD3MHa+Ep3xyKa03AHXTmy14xLaVWKCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCCYtuHKhjCijL6XsuOl5aBvIQdrVfWu6NyuB4ORz727 +# 3DANBgkqhkiG9w0BAQEFAASCAYAvVoCq8OYa1HNIGlf1FrAZdU5d/nd16DPQDhP8 +# fsIkFcUnMbVAkt8QxUD9fZRV52d3MzKwflyLF33VStcd7sXSqRrlDD4I4WspWL7G +# 3OLojt265d+Kl4SnuTYoPh7/TtQsnnNA8dL77gRXHXqxAlEBennIc4IDyvl7qWUa +# BSZcRwSQ2TyWbQ/780t7DjCwo4OSt2qsD9Su+ttIsC4wlJpAwKdx3ldtw3LnVV1w +# y0UeoCzVCw7k2rsrwWRvZKl8DsiXGyLQNHH8Hh+XVzXtxCMjLCMPQXE7lrKrCy0v +# dnMhqQh2gYcsURjr+9Gjoq2FX7dFA23U1GNWGopdbMcpLsVRnyu1lQk80cy4aUxI +# 4GEudxUVb1lexxVotd8UedtMe8pUYHBQ3wMDpLP30IY3WiCl9b79I1eyqd0Z0nfm +# bLZ7KSZECir2hloE5e7NVJHXl05NVQRoX6gp0fVneBlb1i/bh+ucBiqGhgJ0qVFh +# 7xg5S459D0OsHN4TYWas6zqm5Bahgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCCiqzNrKZ8jHBZ6rber75/pVYg3zsGspyli5I++te2xmQIUc6j638vOHp0fA4n4 +# fTpEOLxp6vUYDzIwMjIwOTI5MTA0MzMwWjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MzMwWjAvBgkqhkiG9w0BCQQxIgQgYCvqHTpb +# 483jRzQABgk3W2A9+50VoUq6LCNw+jluVl8wNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBAHn4FTZNNd7dfyTb2of5j3D32VobHbOK9KYmEIOiqkoq0lzesyCEI1rcbYIi +# xf+fPYHx7LEOemMirX4EQtvnfJjhqPlTN97ihBC3uUJlX4IF4vFQLV+4uAd/I3SP +# PKRv7Y3QX5IY4D/HLXDdhE4MFivMju4aDIa1ognLTAylsfl6OxzO2lwfxBLaWncx +# hXn4BemjdreNta98zSRRJ/qh27O9jl5FYtVJqHRZlY0qtoDZL1yASmY1Kv0r01jr +# T7IhS8EiTAVO6uP2+iW+Y2PshJ72TPzlUNJfbgwe4rvZt4JlXpkzw2cme7JnaPow +# p+igJDfjNmG3bv/fcwlmNcBPIbo= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-AdvancedBootOptionsSchema.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-AdvancedBootOptionsSchema.ps1 new file mode 100644 index 0000000..f30d8dd --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-AdvancedBootOptionsSchema.ps1 @@ -0,0 +1,233 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +<# +This is a Resource designer script which generates a mof schema for DCPP_POSTBehavior resource in DellBIOSProvider module. + + +#> + +$category = New-xDscResourceProperty -name Category -Type String -Attribute Key +$enablelegacyoptionroms = New-xDscResourceProperty -name EnableLegacyOptionROMs -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$Password = New-xDscResourceProperty -Name Password -Type string -Attribute Write -Description "Password" +$SecurePassword = New-xDscResourceProperty -Name SecurePassword -Type string -Attribute Write -Description "SecurePassword" +$PathToKey = New-xDscResourceProperty -Name PathToKey -Type string -Attribute Write + +$properties = @($category,$enablelegacyoptionroms,$Password,$SecurePassword,$PathToKey) + +New-xDscResource -ModuleName DellBIOSProviderX86 -Name DCPP_AdvancedBootOptions -Property $properties -Path 'C:\Program Files\WindowsPowerShell\Modules' -FriendlyName "AdvancedBootOptions" -Force -Verbose + +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCEu4CxnM5+hZWV +# JT2ZUesKYTfmxVURI568htUevx2sq6CCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCBsRlwHGsxAHBEARsKvyHWM6kHSYvp/Dxt6AgBnvMNJ +# 1DANBgkqhkiG9w0BAQEFAASCAYAfYNf01ee4RpoKoyE0RUA9874Sy6CdGkfqZm4N +# VCAtAtpJXskFEiSsCxXzLxwr/v1qeS8kKLO0ztbJJkWtCb+Xif1viZlnVhtzjMtL +# CsJg5Mxxu9ILKIRxnjz63YbfGhSwjMhUHbiPYAm0wWc1CRK6YyfSEY7uTMmxIGIx +# qq1zAcc50gjPJbMWQeo3+QKHdxUtuT/q/mpobQyUKSAMDBoBrMuphOG++H/GRL2a +# Kj4pos6Mj+5o7G15h8qOkCcQrHTMdnt2Sj47PnwBCCi8fXrkpuaO06Tpm3ubKeaE +# G2aT1aYa5OnIH/DsR+NeXTPs8e4/19wJbIZBcI6G4WBQNO0MNam/iiq+idYqYSLH +# /fGr92E+vqb2ynbS79+58vNuynfOSq1IRXapXFVrFVs5XE8Zfy9B7Ll2XEifRZ1x +# xAq7qlRF1RG4cbbL09KqZs6CyBxCEQt33yykP51rClZXxUQvIcsdXjLjqDno1+iq +# 2C3GqcSSKjAh8OtRFciKPiYP4Gihgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCAC+Kmg55ZLrwWmXZcn5AuM+lwtjEVaXA2UfUHyi23R9AIUYLZIQiVurSQhlYFr +# q3kbQoMSYgQYDzIwMjIwOTI5MTA0MTM0WjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MTM0WjAvBgkqhkiG9w0BCQQxIgQgeM54cpul +# uyLtN+0bKDgFtGTXhHnkZ99NRg7Gfcd0qIswNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBABIkQY9rIN/AD+Gl5RT8IY5JzMiuYQXtJ40sM+rMEEfVHGt/WtvfnxXlM4xc +# VtuR3ojRDJ3//BrKBkVnhso5uIKYs2ahM7Ba+sPsOErlbDSFjrQ92CWlEtyqgoRw +# Ii6JBe3KKFkZwZLV2Gax3PTY9Jh+F+gfZmlQuRVp92oQLrJmnII7OVW8hr0VgKo0 +# oUv78QD8tFO2ym9pr5muaiSb2+EbO+k8+DRO+sytUiUOZ1iA5e1V68OnBkJOIoXl +# iLmf16lGOMM6EWQeguuNayiHx81kaXH9rR2Pt9exFWzzUGEEgFVBLMNhPtnIxDQS +# X949QakHYQZpmA4uEB6gP984otg= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-BootSequenceSchema.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-BootSequenceSchema.ps1 new file mode 100644 index 0000000..14f6e5a --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-BootSequenceSchema.ps1 @@ -0,0 +1,234 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +<# +This is a Resource designer script which generates a mof schema for DCPP_POSTBehavior resource in DellBIOSProvider module. + + +#> + +$category = New-xDscResourceProperty -name Category -Type String -Attribute Key +$bootlistoption = New-xDscResourceProperty -name BootListOption -Type String -Attribute Write -ValidateSet @("Legacy", "UEFI") +$bootsequence = New-xDscResourceProperty -name BootSequence -Type String -Attribute Write +$Password = New-xDscResourceProperty -Name Password -Type string -Attribute Write -Description "Password" +$SecurePassword = New-xDscResourceProperty -Name SecurePassword -Type string -Attribute Write -Description "SecurePassword" +$PathToKey = New-xDscResourceProperty -Name PathToKey -Type string -Attribute Write + +$properties = @($category,$bootlistoption,$bootsequence,$Password,$SecurePassword,$PathToKey) + +New-xDscResource -ModuleName DellBIOSProviderX86 -Name DCPP_BootSequence -Property $properties -Path 'C:\Program Files\WindowsPowerShell\Modules' -FriendlyName "BootSequence" -Force -Verbose + +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCrLxfjJ7q/atV6 +# YuC/Rl6znq5GWh21yOq+gvb74igDN6CCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCBjGtoWEPwbfTIVAmTWpPY4lPKCVYM7fh558p5pVJ+u +# 4jANBgkqhkiG9w0BAQEFAASCAYAWqROhQn0d163jATcscVh5vKX8kj742XIoX/Tk +# sP8wtD07WNziEAzDsucHRHnjWF1LhdsPTYkL/RYlVH/qxXhTk6JTsy5CC5dgnnM5 +# qkfU8QUZFAPKZpIoXQeIyNsLipwPXn0MmMpuzk7k6ix9QrOw4WRJXCHYhlJEKx6I +# cN185vwmVLPanMEDcoFsAtavrALlr+Dqg4wymew4GB0kbEpnvt9pYaFXR0Kl50qm +# pAew1EzpubSPCumTjqjUQ3afnQLSHSHUvSoVHTfaf5xCrIkYWSQtqhB/dKAA+rAG +# cK5PG38p8BfCI5By1nQTgheLycUdzFvNeXWCrtrFF7/q779Fh48VXwdEc+x4KUxK +# E+sHUSbnatp3Hqf7b4M1jXv1/sQM9FU0KpJWXaMRaEt6auXz/OztM2L66xIjmjED +# bC7tfS86pWCwdzI8dYmNAOGUC62SbfASJs5b1ZsT4YWmtDiDK0SzX+jPkWNlGOOe +# 0XL2p5KjGzLz2Mykh0ZbKZxDEyehgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCDsmG5megS3klowSH8Xt3kBdppDzv9KyVFt+yvY2jZqNwIUCF+4Ri9+QDjR6GkL +# +Imi1r6P7XcYDzIwMjIwOTI5MTA0MTM2WjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MTM2WjAvBgkqhkiG9w0BCQQxIgQgCIR+oIxr +# xNIfIgQrVsZtIxXynj5Xq1PWxUPlpzLxVQ8wNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBADkTSFgkCQg6yXBh6evdZ2oHiyQbk170vCm/3YyC4wsbbBxuH31/jkhD/lAy +# ECv2FNql15h5FfFQSezYmJMiItPV0VIcQKNV2BTu5vODmRJFF9vbUaT9ycJns02t +# L5UxUyJvuBdJYbE2CQh4ZOMAm/d3jWN/IEfbk4v6ZNYVWxbOrcQ3/ZeBa2NlNfil +# 8c8treIOIgkUK3WQNMoghkA4hZQ48bQOVZbhk1zFv79KSG81paWxR3S4QdAwXLy/ +# gGiVVkri6ro1TestjSDTPWnL8FAgmXsuBzVGOlUGeTZxA5yw9hHjoEX8NkhXu+H1 +# 4+C5Jov5VIi5gF2d3yR/UlIBcYw= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-MiscellaneousDevicesSchema.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-MiscellaneousDevicesSchema.ps1 new file mode 100644 index 0000000..8d2cf40 --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-MiscellaneousDevicesSchema.ps1 @@ -0,0 +1,238 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +<# +This is a Resource designer script which generates a mof schema for DCPP_POSTBehavior resource in DellBIOSProvider module. + + +#> + +$category = New-xDscResourceProperty -name Category -Type String -Attribute Key +$microphone = New-xDscResourceProperty -name Microphone -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$camera = New-xDscResourceProperty -name Camera -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$harddrivefreefallprotection = New-xDscResourceProperty -name HardDriveFreeFallProtection -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$mediacard = New-xDscResourceProperty -name MediaCard -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$Password = New-xDscResourceProperty -Name Password -Type string -Attribute Write -Description "Password" +$SecurePassword = New-xDscResourceProperty -Name SecurePassword -Type string -Attribute Write -Description "SecurePassword" +$PathToKey = New-xDscResourceProperty -Name PathToKey -Type string -Attribute Write + + + +$properties = @($category, $microphone, $camera, $harddrivefreefallprotection, $mediacard,$Password,$SecurePassword,$PathToKey) + +New-xDscResource -ModuleName DellBIOSProviderX86 -Name DCPP_MiscellaneousDevices -Property $properties -Path 'C:\Program Files\WindowsPowerShell\Modules' -FriendlyName "MiscellaneousDevices" -Force -Verbose + +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDa5f2ZqfueDXTz +# 2yJskYRi0txPOOJz4ReHKllWHlMBrKCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCDMq3zuBRDF6xqizBQ4E2cQY2RxKFkLo/tApQol5F8W +# tjANBgkqhkiG9w0BAQEFAASCAYCF19sIX7dEYCF1nlGQnn1O0BIpSu3yAhrsJbDt +# 9jBHv/u+/EPXt1y84pREpWvloPG9GAabpif4qcmRJfHBPXyME7Nc3AL9ury3ifEs +# 04J+4UUuhKcQYSmx9GA9B1jBNljzjH63rikWWRv/F/Cx/tN1DlXR8RGKvKZFrej/ +# L+V7owqMDzSktNDHmCqcAsK+vuTEQzhb2y4agHSSwcgrWSTuqg1/h322Rfw9v4l9 +# kICcmzM1INSqG5wRwu2zwynq5XfgG1BL7GW58eaT74ZlUEgl0A7rxuEeah/qsjHG +# 6VZoDMTI6Y+8r5GZ/CrLYL1MpPG2G7oKCDprPqK8Z+V7i/5xhCJwA8H5YgBHbhyq +# fsRGzSprCC3gNMfCmeUDMkntaindXxhqNXJqeeCJE9dyvKNdZSPdyfMh4AJjuGZf +# DASJYdQ/8iOhp5RTY8Wv8/ZDcvFta0u6O1auFNaxhtDEE1K0jAfbJ4j2wlnXdWOq +# cKKODfmAdOblioOVif4yG52YR3qhgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCCgWa/srw3H5dEacjrFy7/solycShVo7giDsDkIkfCAuAIUZZZQb0QPTVcL7L+2 +# a24713dUGBcYDzIwMjIwOTI5MTA0MTM5WjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MTM5WjAvBgkqhkiG9w0BCQQxIgQgbRmJBjUm +# plJuJh+eLF482hOsmxOt4fRMnIwfRd8t1wswNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBAC227zHrDZ5+5Oaq0aD9tWMwsGBgythdrJXZ6nFO2LjaMkyqjqCglA5sP6oD +# W0Wg9kYJfeEpvKpMrIiZW5W3iyq3jUGlPWv2hW8hOkayrm+RoVXUeQnY+Avhrcdk +# 7UsQZF+E/NX2XYm9w5O9jz6V364Ny7QbfIyK288X6CX9GyQ2EXiyBrOmpzfByfal +# 0Py7xQIL8x+Urh7AY0JQL8bMeFsmn0WVZ5FB4tOsATh44E5JrFQ/QEtMWv2TmJ72 +# 1uw7E+oPtnnXk8QD//MUrMwMA3w/VYEtpZofdMIlhXxzjid/4WZXsZAIZWahPh3S +# p7qdaibqoJLjpBA2xAN6+f2kncA= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-POSTBehaviorSchema.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-POSTBehaviorSchema.ps1 new file mode 100644 index 0000000..76a3470 --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-POSTBehaviorSchema.ps1 @@ -0,0 +1,248 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +<# +This is a Resource designer script which generates a mof schema for DCPP_POSTBehavior resource in DellBIOSProvider module. + + +#> + +$category = New-xDscResourceProperty -name Category -Type String -Attribute Key +$keypad = New-xDscResourceProperty -name Keypad -Type String -Attribute Write -ValidateSet @("EnabledByFnKey", "EnabledByNumlock") +$numlock = New-xDscResourceProperty -Name Numlock -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") -Description "Numlock" +$posthotkeys = New-xDscResourceProperty -Name PostMebxKey -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") +$Fastboot = New-xDscResourceProperty -Name Fastboot -Type string -Attribute Write -ValidateSet @("Minimal", "Thorough", "Automatic") -Description "Fastboot" +$fnlock = New-xDscResourceProperty -name FnLock -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$fnlockmode = New-xDscResourceProperty -name FnLockMode -Type String -Attribute Write -ValidateSet @("Secondary", "Standard") +$Password = New-xDscResourceProperty -Name Password -Type string -Attribute Write -Description "Password" +$SecurePassword = New-xDscResourceProperty -Name SecurePassword -Type string -Attribute Write -Description "SecurePassword" +$PathToKey = New-xDscResourceProperty -Name PathToKey -Type string -Attribute Write +$warnAndErr = New-xDscResourceProperty -Name WarningsAndErr -Type string -Attribute Write -ValidateSet @("PromptWrnErr", "ContWrn", "ContWrnErr") -Description "WarningsAndErr" +$powerWarn = New-xDscResourceProperty -Name PowerWarn -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") -Description "PowerWarn" +$pntDevice = New-xDscResourceProperty -Name PntDevice -Type string -Attribute Write -ValidateSet @("SerialMouse", "Ps2Mouse","Touchpad","SwitchToExternalPS2") -Description "PowerWarn" +$externalHotKey = New-xDscResourceProperty -Name ExternalHotKey -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") -Description "PowerWarn" +$postF2Key = New-xDscResourceProperty -Name PostF2Key -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") -Description "PowerWarn" +$postF12Key = New-xDscResourceProperty -Name PostF12Key -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") -Description "PowerWarn" +$rptKeyErr = New-xDscResourceProperty -Name RptKeyErr -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") -Description "PowerWarn" +$extPostTime = New-xDscResourceProperty -Name ExtPostTime -Type string -Attribute Write -ValidateSet @("0s", "5s","10s") -Description "PowerWarn" +$signoflife = New-xDscResourceProperty -Name SignOfLifeIndication -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") -Description "PowerWarn" +$wyseP25 = New-xDscResourceProperty -Name WyseP25Access -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") -Description "PowerWarn" + +$properties = @($category, $keypad, $numlock, $posthotkeys, $Fastboot,$fnlock,$fnlockmode, $Password,$SecurePassword,$PathToKey,$warnAndErr,$powerWarn,$pntDevice,$externalHotKey,$postF2Key,$postF12Key,$rptKeyErr,$extPostTime,$signoflife,$wyseP25) + +New-xDscResource -ModuleName DellBIOSProviderX86 -Name DCPP_POSTBehavior -Property $properties -Path 'C:\Program Files\WindowsPowerShell\Modules' -FriendlyName "POSTBehavior" -Force -Verbose + +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCA02bGaPdIZYXmo +# BEQEBqTXDP4b31zHfIaLvGwYzpZQrKCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCCk89f8dWpyprC+8CVvlUIRski33t74orIplfpm4/iu +# LTANBgkqhkiG9w0BAQEFAASCAYBk6Gr0wCFMcwaGlbcpWcTMihAhro2wVr2bx8ql +# RkPRkAuPzY4AMNU7CfYNEsiRiHRB/tAUHJXjUGcmyIuYJ0X8KpPbYu26usmmsc5F +# C0L4J7QN/RaEhEUT+yn7ANxkarPNyoP+u4BVfV8dlXEJYn/1mAo26aTz1fQNQ7w9 +# 1Dq3r93CJZfCE0ZSOUTGIQH1J0qP27/9mnd/zMl63Z8cSk7b6xgPuUyV093RvOKe +# Ghq2+t5iY1J0YZ2+95ccvDgsA/ChaUwKeyOBiP/eWSXV/4qfHXy9GhUDSTu7KIYt +# dpr9i6N5y8KpJ/6f/ih0azkYC813PJJPsXyp+I7Q194Vjf3WzkHdI48Mi+qx66T9 +# bUXmBgxZkBfx3ZESLFbDnTLgiI1XiPvtG8q8j2W+R6i+LN5P/Ui/09Z+tR0q00Cd +# rTaDtDIbf4+V9XICGSwJs2GCcYnpiMu8V1RJH6/4mWpR08yuvQyk1HX2NFWHjPdk +# YdiRiOPi2zaIFdPbZziZHE6OVlGhgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCDKoapasxjHLOGjQnOZLEKqoR/ogr8bedXPhOnuUlhg8gIUJRgUqIslfL2EXnQ/ +# S8ypr0yQjogYDzIwMjIwOTI5MTA0MTQ1WjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MTQ1WjAvBgkqhkiG9w0BCQQxIgQgpt1K2nnW +# uW1aE4ornZ0UhkUKugDrnftbe8DuIrcYHOowNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBAJdPY3osykVdr/O3WSK1e8R3st/AFvG5LvWooEGX7WeKOmi/AMoJai8+JyUc +# 28zwUI7r9UNmv+Bbd6H7Qy9Jgp7bIB1WzEjhT5WeTVCQ575q2+Pe9n9Oda1vFcyu +# CfioErWcBsimJKRPjc4dvz0V7jXKegHG8y1rp06JYSCymU7ctje5B6VMpPLaWT5S +# GT8afohYwWyES7lTqyJXtbCPPz1MNzwSW7+rBZk6LsLmgy8nBUL7xXJpWvlykse/ +# 6d9HUMUhNEtUn43ekkQB9iJtadj+AX+IDk0Gg/AG2EKEWxwzowHhp2PI9JL+kVYp +# 7blimJhsTR6w4NOfE409Qqs2RZw= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-PerformanceSchema.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-PerformanceSchema.ps1 new file mode 100644 index 0000000..07c5c5d --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-PerformanceSchema.ps1 @@ -0,0 +1,238 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +<# +This is a Resource designer script which generates a mof schema for DCPP_POSTBehavior resource in DellBIOSProvider module. + + +#> + +$category = New-xDscResourceProperty -name Category -Type String -Attribute Key +$multiCoreSupport = New-xDscResourceProperty -name MultiCoreSupport -Type String -Attribute Write -ValidateSet @("1", "2", "4", "6", "8", "10", "12", "14", "16", "All") +$intelSpeedStep = New-xDscResourceProperty -name IntelSpeedStep -Type String -Attribute Write -ValidateSet @("Disabled", "Automatic", "Maximum Performance", "Maximum Battery") +$cstates = New-xDscResourceProperty -name CStates -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$intelTurboBoost = New-xDscResourceProperty -name IntelTurboBoost -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$hyperThreadControl = New-xDscResourceProperty -name HyperThreadControl -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$Password = New-xDscResourceProperty -Name Password -Type string -Attribute Write -Description "Password" +$SecurePassword = New-xDscResourceProperty -Name SecurePassword -Type string -Attribute Write -Description "SecurePassword" +$PathToKey = New-xDscResourceProperty -Name PathToKey -Type string -Attribute Write + + +$properties = @($category, $multiCoreSupport, $intelSpeedStep, $cstates, $intelTurboBoost, $hyperThreadControl,$Password,$SecurePassword,$PathToKey) + +New-xDscResource -ModuleName DellBIOSProviderX86 -Name DCPP_Performance -Property $properties -Path 'C:\Program Files\WindowsPowerShell\Modules' -FriendlyName "Performance" -Force -Verbose + +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDRN0ztfRVkzCad +# jnHgjcx326KVqohYTl3E0bhj7YYgIqCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCCX1DpkZadbFF36YTnYwufx8ntsAQeSanOvVFNdkNBe +# 9DANBgkqhkiG9w0BAQEFAASCAYCQUHiMhRMEWiFenAMu/p190lvU8Wh8IGaX0eoe +# Fvb+3EVc9i8GHliwpDcLskbjEaUE0A/cLy9IE/soiZCy5gvUkTC8XyBxrJ7SSJZs +# 8w+KkSxDU/5wXcGDIDOXur3fCGhm0ewvsgOMt7MATfcYI7v/bChryApQqU8eIpeg +# nAbrtKs2tIqvij2pRqQcRXNnfBkCqpbdinCmysUWkKrI9TzR/93sH0YIoFQKpNOL +# OUDQnlSTdqv0qQd9ZOI8s1dVMBNtIsJUJkFXeVCGRpyQPZGb1fJsnl1uPSwBXVJF +# 25WpuLl9DQfQzwS7WqyQT37vUfDzqI1PcUEyNaIx2vGgulbiGG79dXw17ARP+eMP +# 3/3MPO9rrtEuK/mJXg6FoUIp1XFQ62ct1JzEKKzxbKwj0XvUN3BFb+vxlt1Dv4yq +# MWeEMFqJKM2/hR2q7IPDPkNZP0g2I9TAEfYqtddY535ZPw7Um8tTFGCDPUKrxvbh +# e9nMOlL2exRAwCk25Ps2DrTPDLWhgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCDdQrP/WPBkLVvi2E/WPx18LdXcuaeoo2Bg7ZpcF9/SUQIUK8S3o/ZGP+NhPfxh +# C+bW5tfa/fgYDzIwMjIwOTI5MTA0MTQzWjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MTQzWjAvBgkqhkiG9w0BCQQxIgQgeipQ5T7T +# 1aPmqtAneg5dkrmpM5IkaG2Gy3otaN3wnRMwNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBAAT/45C5k6E6wJkGViPCgTzbshG972+icAim30tjeJBBqfleJjdj6hIUuVW2 +# HpsuT3a/FDU7tEY46I++DMZzSwu8WUHTHuSt0whnD/mr3M3C4iLRM9ca8quDN+do +# tnf7nkQj3zthM67xJ8W4LgOlfxr36ltC+ss16DIr6BmQy77HFQUDuNyHHE5rbuz0 +# siqkWuJIZPW46MOJss1bPwpiHldb1pfdVB6E5imYnsfo2bdsSLv5mmFWpytjRXmB +# N8YjM/XxDNPduhFVEeo5v+M8yGSXTrhtxnuqRMea9/vaJjhcV2eQwfm7xFISjw52 +# sb2jHwyOcr2XiB0aQb9Ztd3jPlM= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-PowerManagementSchema.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-PowerManagementSchema.ps1 new file mode 100644 index 0000000..324b54f --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-PowerManagementSchema.ps1 @@ -0,0 +1,280 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +<# +This is a Resource designer script which generates a mof schema for DCPP_POSTBehavior resource in DellBIOSProvider module. + + +#> + +$blockdefinition = New-xDscResourceProperty -name BlockDefinition -Type String -Attribute Key +$category = New-xDscResourceProperty -name Category -Type String -Attribute Write +$autoon = New-xDscResourceProperty -name AutoOn -Type String -Attribute Write -ValidateSet @("EveryDay", "Disabled", "WeekDays", "SelectDays") +$autoonhour = New-xDscResourceProperty -name AutoOnHr -Type Uint16 -Attribute Write +$autoonminute = New-xDscResourceProperty -name AutoOnMn -Type Uint16 -Attribute Write +$autoonsunday= New-xDscResourceProperty -name AutoOnSun -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") +$autoonmonday= New-xDscResourceProperty -name AutoOnMon -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") +$autoontuesday= New-xDscResourceProperty -name AutoOnTue -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") +$autoonwednesday= New-xDscResourceProperty -name AutoOnWed -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") +$autoonthursday= New-xDscResourceProperty -name AutoOnThur -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") +$autoonfriday= New-xDscResourceProperty -name AutoOnFri -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") +$autoonsaturday= New-xDscResourceProperty -name AutoOnSat -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") +$deepsleepcontrol = New-xDscResourceProperty -name DeepSleepCtrl -Type String -Attribute Write -ValidateSet @("Disabled", "S5Only", "S4AndS5") +$fanspeedcontrol= New-xDscResourceProperty -name FanSpeed -Type string -Attribute Write -ValidateSet @("Auto", "High", "Med", "Low", "MedHigh", "MedLow" ) +$fanspeedlevel = New-xDscResourceProperty -name FanSpeedLvl -Type Uint16 -Attribute Write +$usbwakesupport= New-xDscResourceProperty -name UsbWake -Type string -Attribute Write -ValidateSet @("Disabled", "Enabled") +$fancontroloverride= New-xDscResourceProperty -name FanCtrlOvrd -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") +$acbehavior= New-xDscResourceProperty -name AcPwrRcvry -Type string -Attribute Write -ValidateSet @("Off", "On", "Last") +$wakeonLAN= New-xDscResourceProperty -name WakeOnLan -Type string -Attribute Write -ValidateSet @("AddInCard","Onboard", "Disabled", "LanOnly","LanWithPxeBoot", "WlanOnly", "LanWlan" ) +$sfpwakeonLAN= New-xDscResourceProperty -name SfpwakeOnLan -Type string -Attribute Write -ValidateSet @("SFP","LANSFP", "SFPPXE") +$wakeOnAc = New-xDscResourceProperty -name WakeOnAc -Type String -Attribute Write -ValidateSet @("Disabled", "Enabled") +$wakeOnDock = New-xDscResourceProperty -name WakeOnDock -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") +$lidSwitch = New-xDscResourceProperty -name LidSwitch -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") +$blinkPowerSupply1LED = New-xDscResourceProperty -name BlinkPowerSupply1LED -Type string -Attribute Write -ValidateSet @("Enabled") +$blinkPowerSupply2LED = New-xDscResourceProperty -name BlinkPowerSupply2LED -Type string -Attribute Write -ValidateSet @("Enabled") +$wlanAutoSense = New-xDscResourceProperty -name WlanAutoSense -Type String -Attribute Write -ValidateSet @("Disabled", "Enabled") +$wwanAutoSense = New-xDscResourceProperty -name WwanAutoSense -Type String -Attribute Write -ValidateSet @("Disabled", "Enabled") +$blocksleep= New-xDscResourceProperty -name BlockSleep -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") +$sleepMode= New-xDscResourceProperty -name SleepMode -Type string -Attribute Write -ValidateSet @("OSAutomaticSelection", "ForceS3") +$primarybatterychargeconfiguration= New-xDscResourceProperty -name PrimaryBattChargeCfg -Type string -Attribute Write -ValidateSet @("Auto", "Standard", "Express", "PrimAcUse", "Custom" ) +$customChargeStart = New-xDscResourceProperty -name CustomChargeStart -Type Uint16 -Attribute Write +$customChargeEnd = New-xDscResourceProperty -name CustomChargeStop -Type Uint16 -Attribute Write +$batteryslicechargeconfiguration= New-xDscResourceProperty -name SliceBattChargeCfg -Type string -Attribute Write -ValidateSet @("Standard", "Express") +$modbatteryconfiguration= New-xDscResourceProperty -name ModBattChargeCfg -Type string -Attribute Write -ValidateSet @("Standard", "Express") +$dockbatteryconfiguration= New-xDscResourceProperty -name DockBatteryChargeConfiguration -Type string -Attribute Write -ValidateSet @("Standard", "Express") +$intelsmartconnect= New-xDscResourceProperty -name IntlSmartConnect -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") +$intelreadymode= New-xDscResourceProperty -name IntelReadyModeEn -Type string -Attribute Write -ValidateSet @("Enabled", "Disabled") +$peakshift = New-xDscResourceProperty -name PeakShiftCfg -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$peakshiftbatterythreshold = New-xDscResourceProperty -name PeakShiftBatteryThreshold -Type Uint16 -Attribute Write +$peakshiftdayconfiguration = New-xDscResourceProperty -name PeakShiftDayConfiguration -Type String -Attribute Write +$starttime = New-xDscResourceProperty -name StartTime -Type String -Attribute Write +$endtime = New-xDscResourceProperty -name EndTime -Type String -Attribute Write +$chargestarttime = New-xDscResourceProperty -name ChargeStartTime -Type String -Attribute Write +$advancedbatterychargingmode = New-xDscResourceProperty -name AdvBatteryChargeCfg -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$advancedbatterychargeconfiguration = New-xDscResourceProperty -name AdvancedBatteryChargeConfiguration -Type String -Attribute Write +$typeCOverload = New-xDscResourceProperty -name Type_CBatteryOverloadProtection -Type String -Attribute Write -ValidateSet @("7.5Watts", "15Watts") +$beginningofday = New-xDscResourceProperty -name BeginningOfDay -Type String -Attribute Write +$workperiod = New-xDscResourceProperty -name WorkPeriod -Type String -Attribute Write +$docksupportonbattery = New-xDscResourceProperty -name DockSupportOnBattery -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$Password = New-xDscResourceProperty -Name Password -Type string -Attribute Write -Description "Password" +$SecurePassword = New-xDscResourceProperty -Name SecurePassword -Type string -Attribute Write -Description "SecurePassword" +$PathToKey = New-xDscResourceProperty -Name PathToKey -Type string -Attribute Write + +$properties = @($blockdefinition,$category,$autoon,$autoonhour,$autoonminute,$autoonsunday,$autoonmonday,$autoontuesday,$autoonwednesday,$autoonthursday,$autoonfriday,$autoonsaturday,$deepsleepcontrol,$fanspeedcontrol,$fanspeedlevel,$usbwakesupport,$fancontroloverride,$acbehavior,$wakeonLAN,$sfpwakeonLAN,$wakeOnAc,$wakeOnDock,$lidSwitch,$blinkPowerSupply1LED,$blinkPowerSupply2LED,$wlanAutoSense,$wwanAutoSense,$blocksleep,$sleepMode,$primarybatterychargeconfiguration,$customChargeStart,$customChargeEnd,$batteryslicechargeconfiguration,$modbatteryconfiguration,$dockbatteryconfiguration,$intelsmartconnect,$intelreadymode,$peakshift,$peakshiftbatterythreshold,$peakshiftdayconfiguration,$starttime,$endtime,$chargestarttime,$advancedbatterychargingmode,$advancedbatterychargeconfiguration,$typeCOverload,$beginningofday,$workperiod,$docksupportonbattery,$Password,$SecurePassword,$PathToKey) + +New-xDscResource -ModuleName DellBIOSProviderX86 -Name DCPP_PowerManagement -Property $properties -Path 'C:\Program Files\WindowsPowerShell\Modules' -FriendlyName "PowerManagement" -Force -Verbose + +# SIG # Begin signature block +# MIIkoQYJKoZIhvcNAQcCoIIkkjCCJI4CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBNYEBbpcvnqxl7 +# yLtaimWktGw8w3vlsix3e5v4or04LaCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOEwghDdAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCB89geUH2ogQr+5iUte4ZvajAjwVjARNQUJfQeiYNRp +# +zANBgkqhkiG9w0BAQEFAASCAYCHVIhcTE1GdLTXIoviZJ6uGqLCfTW2/3yDo72v +# LyGjw2JC7WNjakz9dcjuhPi0YkpkRWObe46lQxL5R/D1dIiLnHufoQaqW02eCnbo +# JIjo9oIXenKTowt2FgniX+Mcc+Ogq4cyilOcKPWkDIf+oBdPdafLbBerfqEEwI6d +# lFemBsX2qJbOnyCx4s0JlboQvmSAzLDQDVDdaBEByo0fyAkWCEyeDneeL3kOu++S +# mqCBWV3dvkpGn6YIVaQi+A1jQy2cLvLm+wcmzUWgDMfgneafPcW3GVv7KnDs79Ac +# MbdQAwn+RRd3DZzasqpW1bo73lQS72cz4xIeXLJ3F7XUlq4nn0tsFdE178BYwic0 +# EZNXbaKExgYpW1Hx3as0ZBOzKDSSTzXOLjx6h6w3n2QDlW5XrQn7A1aOsj7z0Gd/ +# hV5L5+s+i7wJWZ5tvqJKDoACoWYtGed36Whn5G9DkBIRmWtOKH14pjizXO55CV2K +# 62VAMjEHX2sbfwb6XUsd4vbL/JKhgg49MIIOOQYKKwYBBAGCNwMDATGCDikwgg4l +# BgkqhkiG9w0BBwKggg4WMIIOEgIBAzENMAsGCWCGSAFlAwQCATCCAQ8GCyqGSIb3 +# DQEJEAEEoIH/BIH8MIH5AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCBvDz4wAgbo82qmd/iR9riDwOgNjbJMUII6pI/zMzSmvgIVAP/hwTV1/OJBBscI +# UmG01EiOAh/DGA8yMDIyMDkyOTEwNDE0N1owAwIBHqCBhqSBgzCBgDELMAkGA1UE +# BhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZT +# eW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYg +# VGltZVN0YW1waW5nIFNpZ25lciAtIEczoIIKizCCBTgwggQgoAMCAQICEHsFsdRJ +# aFFE98mJ0pwZnRIwDQYJKoZIhvcNAQELBQAwgb0xCzAJBgNVBAYTAlVTMRcwFQYD +# VQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0 +# d29yazE6MDgGA1UECxMxKGMpIDIwMDggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0 +# aG9yaXplZCB1c2Ugb25seTE4MDYGA1UEAxMvVmVyaVNpZ24gVW5pdmVyc2FsIFJv +# b3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTYwMTEyMDAwMDAwWhcNMzEw +# MTExMjM1OTU5WjB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29y +# cG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNV +# BAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggEiMA0GCSqGSIb3 +# DQEBAQUAA4IBDwAwggEKAoIBAQC7WZ1ZVU+djHJdGoGi61XzsAGtPHGsMo8Fa4aa +# JwAyl2pNyWQUSym7wtkpuS7sY7Phzz8LVpD4Yht+66YH4t5/Xm1AONSRBudBfHkc +# y8utG7/YlZHz8O5s+K2WOS5/wSe4eDnFhKXt7a+Hjs6Nx23q0pi1Oh8eOZ3D9Jqo +# 9IThxNF8ccYGKbQ/5IMNJsN7CD5N+Qq3M0n/yjvU9bKbS+GImRr1wOkzFNbfx4Db +# ke7+vJJXcnf0zajM/gn1kze+lYhqxdz0sUvUzugJkV+1hHk1inisGTKPI8EyQRtZ +# Dqk+scz51ivvt9jk1R1tETqS9pPJnONI7rtTDtQ2l4Z4xaE3AgMBAAGjggF3MIIB +# czAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADBmBgNVHSAEXzBd +# MFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5j +# b20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMC4G +# CCsGAQUFBwEBBCIwIDAeBggrBgEFBQcwAYYSaHR0cDovL3Muc3ltY2QuY29tMDYG +# A1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9zLnN5bWNiLmNvbS91bml2ZXJzYWwtcm9v +# dC5jcmwwEwYDVR0lBAwwCgYIKwYBBQUHAwgwKAYDVR0RBCEwH6QdMBsxGTAXBgNV +# BAMTEFRpbWVTdGFtcC0yMDQ4LTMwHQYDVR0OBBYEFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMB8GA1UdIwQYMBaAFLZ3+mlIR59TEtXC6gcydgfRlwcZMA0GCSqGSIb3DQEB +# CwUAA4IBAQB16rAt1TQZXDJF/g7h1E+meMFv1+rd3E/zociBiPenjxXmQCmt5l30 +# otlWZIRxMCrdHmEXZiBWBpgZjV1x8viXvAn9HJFHyeLojQP7zJAv1gpsTjPs1rST +# yEyQY0g5QCHE3dZuiZg8tZiX6KkGtwnJj1NXQZAv4R5NTtzKEHhsQm7wtsX4YVxS +# 9U72a433Snq+8839A9fZ9gOoD+NT9wp17MZ1LqpmhQSZt/gGV+HGDvbor9rsmxgf +# qrnjOgC/zoqUywHbnsc4uw9Sq9HjlANgCk2g/idtFDL8P5dA4b+ZidvkORS92uTT +# w+orWrOVWFUEfcea7CMDjYUq0v+uqWGBMIIFSzCCBDOgAwIBAgIQe9Tlr7rMBz+h +# ASMEIkFNEjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMU +# U3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5l +# dHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0Ew +# HhcNMTcxMjIzMDAwMDAwWhcNMjkwMzIyMjM1OTU5WjCBgDELMAkGA1UEBhMCVVMx +# HTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRl +# YyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYgVGltZVN0 +# YW1waW5nIFNpZ25lciAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +# AQEArw6Kqvjcv2l7VBdxRwm9jTyB+HQVd2eQnP3eTgKeS3b25TY+ZdUkIG0w+d0d +# g+k/J0ozTm0WiuSNQI0iqr6nCxvSB7Y8tRokKPgbclE9yAmIJgg6+fpDI3VHcAyz +# X1uPCB1ySFdlTa8CPED39N0yOJM/5Sym81kjy4DeE035EMmqChhsVWFX0fECLMS1 +# q/JsI9KfDQ8ZbK2FYmn9ToXBilIxq1vYyXRS41dsIr9Vf2/KBqs/SrcidmXs7Dby +# lpWBJiz9u5iqATjTryVAmwlT8ClXhVhe6oVIQSGH5d600yaye0BTWHmOUjEGTZQD +# RcTOPAPstwDyOiLFtG/l77CKmwIDAQABo4IBxzCCAcMwDAYDVR0TAQH/BAIwADBm +# BgNVHSAEXzBdMFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8v +# ZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5j +# b20vcnBhMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly90cy1jcmwud3Muc3ltYW50 +# ZWMuY29tL3NoYTI1Ni10c3MtY2EuY3JsMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MA4GA1UdDwEB/wQEAwIHgDB3BggrBgEFBQcBAQRrMGkwKgYIKwYBBQUHMAGGHmh0 +# dHA6Ly90cy1vY3NwLndzLnN5bWFudGVjLmNvbTA7BggrBgEFBQcwAoYvaHR0cDov +# L3RzLWFpYS53cy5zeW1hbnRlYy5jb20vc2hhMjU2LXRzcy1jYS5jZXIwKAYDVR0R +# BCEwH6QdMBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTYwHQYDVR0OBBYEFKUT +# AamfhcwbbhYeXzsxqnk2AHsdMB8GA1UdIwQYMBaAFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMA0GCSqGSIb3DQEBCwUAA4IBAQBGnq/wuKJfoplIz6gnSyHNsrmmcnBjL+NV +# KXs5Rk7nfmUGWIu8V4qSDQjYELo2JPoKe/s702K/SpQV5oLbilRt/yj+Z89xP+Yz +# CdmiWRD0Hkr+Zcze1GvjUil1AEorpczLm+ipTfe0F1mSQcO3P4bm9sB/RDxGXBda +# 46Q71Wkm1SF94YBnfmKst04uFZrlnCOvWxHqcalB+Q15OKmhDc+0sdo+mnrHIsV0 +# zd9HCYbE/JElshuW6YUI6N3qdGBuYKVWeg3IRFjc5vlIFJ7lv94AvXexmBRyFCTf +# xxEsHwA/w0sUxmcczB4Go5BfXFSLPuMzW4IPxbeGAk5xn+lmRT92MYICWjCCAlYC +# AQEwgYswdzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0 +# aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9T +# eW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIENBAhB71OWvuswHP6EBIwQiQU0S +# MAsGCWCGSAFlAwQCAaCBpDAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJ +# KoZIhvcNAQkFMQ8XDTIyMDkyOTEwNDE0N1owLwYJKoZIhvcNAQkEMSIEIPJbWLx8 +# p1EANO7gZvbwS2dwDBQpYa2Zbjjsssd39NB4MDcGCyqGSIb3DQEJEAIvMSgwJjAk +# MCIEIMR0znYAfQI5Tg2l5N58FMaA+eKCATz+9lPvXbcf32H4MAsGCSqGSIb3DQEB +# AQSCAQA9P0mOvm3upV1XaaSwCWQHSczkos0txq10BqisLa+fxmOr6jmnEJD6zWA1 +# FYidTnWI3V6oR2Ju2hI51tEsNs86Od4DqpjpZP2wuwZTJ82RjZj5oeB7IZvfg5bv +# uJLnr6sUbWJGNXEKNb+dvahIur4adOkwf1/zbp4vpXml+evMHpg+eVICx+p+ZYBf +# 7bTWqggKY2f+piEVJ2pmAdy2iAPArGUUGo/b7uRVZ6Klhs9EffTX2q9Vmi10kLE5 +# FpTwAzJWsHVGTFmId6E5ucut10KqezGtbI2LVyBa5qrtAY+rJpzq+59vEhkTnEnN +# QX9+2bUQKaJo4QBMgti+k1rEpxTj +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-SecuritySchema.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-SecuritySchema.ps1 new file mode 100644 index 0000000..e73d57d --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-SecuritySchema.ps1 @@ -0,0 +1,238 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +<# +This is a Resource designer script which generates a mof schema for DCPP_POSTBehavior resource in DellBIOSProvider module. + + +#> + +$category = New-xDscResourceProperty -name Category -Type String -Attribute Key +$strongPassword = New-xDscResourceProperty -name StrongPassword -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$passwordBypass = New-xDscResourceProperty -name PasswordBypass -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$oromKeyboardAccess = New-xDscResourceProperty -name OROMKeyboardAccess -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$cpuXDSupport = New-xDscResourceProperty -name CPUXDSupport -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$adminSetupLockout = New-xDscResourceProperty -name AdminSetupLockout -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$Password = New-xDscResourceProperty -Name Password -Type string -Attribute Write -Description "Password" +$SecurePassword = New-xDscResourceProperty -Name SecurePassword -Type string -Attribute Write -Description "SecurePassword" +$PathToKey = New-xDscResourceProperty -Name PathToKey -Type string -Attribute Write + + +$properties = @($category, $strongPassword, $passwordBypass, $oromKeyboardAccess, $cpuXDSupport, $adminSetupLockout,$Password,$SecurePassword,$PathToKey) + +New-xDscResource -ModuleName DellBIOSProviderX86 -Name DCPP_Security -Property $properties -Path 'C:\Program Files\WindowsPowerShell\Modules' -FriendlyName "Security" -Force -Verbose + +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDqaohK64UgLrAt +# d0Hi8PYgyMgWd/C36IwTIzbKnb4sPqCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCAiBVqJY6HFcvrx/to09MAP6ye9NWygi8MoMhenrcUD +# LzANBgkqhkiG9w0BAQEFAASCAYAVzgArWUb51ajMq2U0bStVDyWunOWdxLHDb2ex +# N1em31d3yVgiNNHY9eoSKh2gdUnJcibSa83EQzkMKOXROByoIe7cV8N9wsFkiyX9 +# qJlH9iqwWq9SCzSq/5Np19nN7czYI/NTkgIHpysQrf+zEZ8codfeM10u7B4gv/U+ +# oUga5qYndVy/VXv97OjLkc8AfCwuOukk3HYEWdJPTf4dQhCBi7oTodNBFM3aBPFX +# DA/O0j6UXB9GOG9T9ThNWM7u9MHCTcOVpPW9UYqXrkiHJyzhEckcukGi+AoZIZkc +# pzCNvpEhruf6b1JEEgh93dax6uoEMthLeH4MlmV0HLFl+OEtiflE+3Ymz1EWr/5f +# MCpAfDXlYdaqqjc54ntPegrN5lOeFfJ6cotJVMVuoSlA2FbTRSKPWUwLbE9617nA +# KW5dmDtG0u/7g60+ZWwGkaVCRPfIMUA1ld2nEQmg3MsYJoRLCgJCYYtLA811c3UM +# e6EBKt1zAnYEh9E0Nxw0LiRwgEGhgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCDLbTxVD3Of5axG2BQpDjaW35we3E7eOmjjf+HgXX4NbgIUSYgytMYM+0Oz0eAE +# x6bwYzg6/MIYDzIwMjIwOTI5MTA0MTQ5WjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MTQ5WjAvBgkqhkiG9w0BCQQxIgQgequ00n9N +# 06DEj4ifqYuqbVgYPrUw6u/E9S9nusvIJMswNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBAEhmkg3HL+U9xBr4zknH1OiJiYy6nEB+pPOqu71tbxbwNpxqygZeADaTWErV +# kza5HMfia5i7INi3Ioz9gOQcWDJpBlj06mK2Ow5U5u0g0F349tA60sRJq5/Yxt3U +# ueMnYbJmWZuP0gbOFI9Ugem8t/+pTbj9/AlTtUUVSUe2X6PLvcgah1lDhNLx8PRW +# NdmR1QofcbQwyilflQqQL2icfO/h0FnRpiz/RIZhgzKi3IoXI25IjHkGV3O11sa+ +# uT0rWsMZ/oPtDTvOt/9NMFcL63kCFxyB6rlLNjZZTYgBFfltsgv7tnpWcHl7sGGV +# 5bqX1WOrP5lbCClgLvRPVoa0f/M= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-SystemConfigurationSchema.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-SystemConfigurationSchema.ps1 new file mode 100644 index 0000000..a490a65 --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-SystemConfigurationSchema.ps1 @@ -0,0 +1,248 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +<# +This is a Resource designer script which generates a mof schema for DCPP_POSTBehavior resource in DellBIOSProvider module. + + +#> + +$category = New-xDscResourceProperty -name Category -Type String -Attribute Key +$integratedNIC = New-xDscResourceProperty -name IntegratedNIC -Type String -Attribute Write -ValidateSet @("Enabled", "Enabled with PXE", "Enabled with ImageServer", "Enabled with RPL Boot", "Enabled with ISCSI Boot") +$uefiNetworkStack = New-xDscResourceProperty -name UEFINetworkStack -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$parallelPort = New-xDscResourceProperty -name ParallelPort -Type String -Attribute Write -ValidateSet @("Disabled", "AT", "PS2", "ECP") +$serialPort1 = New-xDscResourceProperty -name SerialPort1 -Type String -Attribute Write -ValidateSet @("Disabled", "COM1", "COM2", "COM3", "COM4", "Auto") +$sataOperation = New-xDscResourceProperty -name SATAOperation -Type String -Attribute Write -ValidateSet @("Disabled", "ATA", "AHCI", "RAID On") +$sata0 = New-xDscResourceProperty -name SATA0 -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$sata1 = New-xDscResourceProperty -name SATA1 -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$sata2 = New-xDscResourceProperty -name SATA2 -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$sata3 = New-xDscResourceProperty -name SATA3 -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$smartReporting = New-xDscResourceProperty -name SMARTReporting -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$usbPowerShare = New-xDscResourceProperty -name USBPowerShare -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$audio = New-xDscResourceProperty -name Audio -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$keyboardIllumination = New-xDscResourceProperty -name KeyboardIllumination -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$keyboardBacklightwithAC = New-xDscResourceProperty -name KeyboardBacklightWithAC -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$Password = New-xDscResourceProperty -Name Password -Type string -Attribute Write -Description "Password" +$SecurePassword = New-xDscResourceProperty -Name SecurePassword -Type string -Attribute Write -Description "SecurePassword" +$PathToKey = New-xDscResourceProperty -Name PathToKey -Type string -Attribute Write + + + +$properties = @($category, $integratedNIC, $uefiNetworkStack, $parallelPort, $serialPort1, $sataOperation, $sata0, $sata1, $sata2, $sata3, $smartReporting, $usbPowerShare, $audio, $keyboardIllumination, $keyboardBacklightwithAC,$Password,$SecurePassword,$PathToKey) + +New-xDscResource -ModuleName DellBIOSProviderX86 -Name DCPP_SystemConfiguration -Property $properties -Path 'C:\Program Files\WindowsPowerShell\Modules' -FriendlyName "SystemConfiguration" -Force -Verbose + +# SIG # Begin signature block +# MIIkoQYJKoZIhvcNAQcCoIIkkjCCJI4CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCD+2fqOwQfmxNpu +# 6I3TqIEsegW3ha8hbT3Vm0Ql+fGWm6CCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOEwghDdAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCAdajuVy0q09H2WmAAM4RnTNKkU4kBN2UKTd040VBXs +# KjANBgkqhkiG9w0BAQEFAASCAYCT6x2wmYjl5GzqNncd/EE13w5AxjxJSBPT3eRA +# lxfyaiEVnfDEBS/kJuLC2/geozCtwzCVmwHleBjNwaIsmFl2zv8+a+EtHGetHRog +# 9CVPPurk3t5+vR77Pztew+6Vt2C4tIemXO+jEiRbO5YETloH1txYfaz6yO5AlzOd +# +pry3gWYNhfLt/aFgudQlVKqgUy4pjAbtiTpUyk0IEkAvXaPJ+N1JDRgynM9l0Ro +# U+8ivwcpupsupDbfBbElktT3ljojLT5o2mJic6dsGuqEc6JVBZxe9MXRQAQqo8WB +# iJYuhBfthzf7kPWYbY4X/h6/G7uOeUZ9xsNvIgKH+xz8dFUqVk3kqbhOS8VXsjQK +# J8SZcjqLlrUGQ2w4wF3/4SiYPQFpywrYE9XUgStPcSCyjgbJ8a6BGG2y1g0d3hI1 +# JLFbzC0xz7EUJVvJW/l9uRj1kFBZ9EaOmoxz0RYbACExUkUWq2wicqAmoJCzhR/G +# N50UEABxtmqIlzToI11y3rshwJ6hgg49MIIOOQYKKwYBBAGCNwMDATGCDikwgg4l +# BgkqhkiG9w0BBwKggg4WMIIOEgIBAzENMAsGCWCGSAFlAwQCATCCAQ8GCyqGSIb3 +# DQEJEAEEoIH/BIH8MIH5AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCANH0eylzsBqY9AU/cNUKCgG+t3iH/f7NY2F17f8PCXsgIVAMWjAXvrMrJs3K/z +# w9BAY+0SYJfPGA8yMDIyMDkyOTEwNDE1M1owAwIBHqCBhqSBgzCBgDELMAkGA1UE +# BhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZT +# eW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYg +# VGltZVN0YW1waW5nIFNpZ25lciAtIEczoIIKizCCBTgwggQgoAMCAQICEHsFsdRJ +# aFFE98mJ0pwZnRIwDQYJKoZIhvcNAQELBQAwgb0xCzAJBgNVBAYTAlVTMRcwFQYD +# VQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0 +# d29yazE6MDgGA1UECxMxKGMpIDIwMDggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0 +# aG9yaXplZCB1c2Ugb25seTE4MDYGA1UEAxMvVmVyaVNpZ24gVW5pdmVyc2FsIFJv +# b3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTYwMTEyMDAwMDAwWhcNMzEw +# MTExMjM1OTU5WjB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29y +# cG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNV +# BAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggEiMA0GCSqGSIb3 +# DQEBAQUAA4IBDwAwggEKAoIBAQC7WZ1ZVU+djHJdGoGi61XzsAGtPHGsMo8Fa4aa +# JwAyl2pNyWQUSym7wtkpuS7sY7Phzz8LVpD4Yht+66YH4t5/Xm1AONSRBudBfHkc +# y8utG7/YlZHz8O5s+K2WOS5/wSe4eDnFhKXt7a+Hjs6Nx23q0pi1Oh8eOZ3D9Jqo +# 9IThxNF8ccYGKbQ/5IMNJsN7CD5N+Qq3M0n/yjvU9bKbS+GImRr1wOkzFNbfx4Db +# ke7+vJJXcnf0zajM/gn1kze+lYhqxdz0sUvUzugJkV+1hHk1inisGTKPI8EyQRtZ +# Dqk+scz51ivvt9jk1R1tETqS9pPJnONI7rtTDtQ2l4Z4xaE3AgMBAAGjggF3MIIB +# czAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADBmBgNVHSAEXzBd +# MFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5j +# b20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMC4G +# CCsGAQUFBwEBBCIwIDAeBggrBgEFBQcwAYYSaHR0cDovL3Muc3ltY2QuY29tMDYG +# A1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9zLnN5bWNiLmNvbS91bml2ZXJzYWwtcm9v +# dC5jcmwwEwYDVR0lBAwwCgYIKwYBBQUHAwgwKAYDVR0RBCEwH6QdMBsxGTAXBgNV +# BAMTEFRpbWVTdGFtcC0yMDQ4LTMwHQYDVR0OBBYEFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMB8GA1UdIwQYMBaAFLZ3+mlIR59TEtXC6gcydgfRlwcZMA0GCSqGSIb3DQEB +# CwUAA4IBAQB16rAt1TQZXDJF/g7h1E+meMFv1+rd3E/zociBiPenjxXmQCmt5l30 +# otlWZIRxMCrdHmEXZiBWBpgZjV1x8viXvAn9HJFHyeLojQP7zJAv1gpsTjPs1rST +# yEyQY0g5QCHE3dZuiZg8tZiX6KkGtwnJj1NXQZAv4R5NTtzKEHhsQm7wtsX4YVxS +# 9U72a433Snq+8839A9fZ9gOoD+NT9wp17MZ1LqpmhQSZt/gGV+HGDvbor9rsmxgf +# qrnjOgC/zoqUywHbnsc4uw9Sq9HjlANgCk2g/idtFDL8P5dA4b+ZidvkORS92uTT +# w+orWrOVWFUEfcea7CMDjYUq0v+uqWGBMIIFSzCCBDOgAwIBAgIQe9Tlr7rMBz+h +# ASMEIkFNEjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMU +# U3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5l +# dHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0Ew +# HhcNMTcxMjIzMDAwMDAwWhcNMjkwMzIyMjM1OTU5WjCBgDELMAkGA1UEBhMCVVMx +# HTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRl +# YyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYgVGltZVN0 +# YW1waW5nIFNpZ25lciAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +# AQEArw6Kqvjcv2l7VBdxRwm9jTyB+HQVd2eQnP3eTgKeS3b25TY+ZdUkIG0w+d0d +# g+k/J0ozTm0WiuSNQI0iqr6nCxvSB7Y8tRokKPgbclE9yAmIJgg6+fpDI3VHcAyz +# X1uPCB1ySFdlTa8CPED39N0yOJM/5Sym81kjy4DeE035EMmqChhsVWFX0fECLMS1 +# q/JsI9KfDQ8ZbK2FYmn9ToXBilIxq1vYyXRS41dsIr9Vf2/KBqs/SrcidmXs7Dby +# lpWBJiz9u5iqATjTryVAmwlT8ClXhVhe6oVIQSGH5d600yaye0BTWHmOUjEGTZQD +# RcTOPAPstwDyOiLFtG/l77CKmwIDAQABo4IBxzCCAcMwDAYDVR0TAQH/BAIwADBm +# BgNVHSAEXzBdMFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8v +# ZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5j +# b20vcnBhMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly90cy1jcmwud3Muc3ltYW50 +# ZWMuY29tL3NoYTI1Ni10c3MtY2EuY3JsMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MA4GA1UdDwEB/wQEAwIHgDB3BggrBgEFBQcBAQRrMGkwKgYIKwYBBQUHMAGGHmh0 +# dHA6Ly90cy1vY3NwLndzLnN5bWFudGVjLmNvbTA7BggrBgEFBQcwAoYvaHR0cDov +# L3RzLWFpYS53cy5zeW1hbnRlYy5jb20vc2hhMjU2LXRzcy1jYS5jZXIwKAYDVR0R +# BCEwH6QdMBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTYwHQYDVR0OBBYEFKUT +# AamfhcwbbhYeXzsxqnk2AHsdMB8GA1UdIwQYMBaAFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMA0GCSqGSIb3DQEBCwUAA4IBAQBGnq/wuKJfoplIz6gnSyHNsrmmcnBjL+NV +# KXs5Rk7nfmUGWIu8V4qSDQjYELo2JPoKe/s702K/SpQV5oLbilRt/yj+Z89xP+Yz +# CdmiWRD0Hkr+Zcze1GvjUil1AEorpczLm+ipTfe0F1mSQcO3P4bm9sB/RDxGXBda +# 46Q71Wkm1SF94YBnfmKst04uFZrlnCOvWxHqcalB+Q15OKmhDc+0sdo+mnrHIsV0 +# zd9HCYbE/JElshuW6YUI6N3qdGBuYKVWeg3IRFjc5vlIFJ7lv94AvXexmBRyFCTf +# xxEsHwA/w0sUxmcczB4Go5BfXFSLPuMzW4IPxbeGAk5xn+lmRT92MYICWjCCAlYC +# AQEwgYswdzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0 +# aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9T +# eW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIENBAhB71OWvuswHP6EBIwQiQU0S +# MAsGCWCGSAFlAwQCAaCBpDAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJ +# KoZIhvcNAQkFMQ8XDTIyMDkyOTEwNDE1M1owLwYJKoZIhvcNAQkEMSIEID8cHs1I +# RpmBf/MPSTJTFta8lAOoi2/TZiUWjUwg+wtsMDcGCyqGSIb3DQEJEAIvMSgwJjAk +# MCIEIMR0znYAfQI5Tg2l5N58FMaA+eKCATz+9lPvXbcf32H4MAsGCSqGSIb3DQEB +# AQSCAQBctg674goj7R5GLH7UEa0EndJmQ9vHmV6+jivdH8Ys3S07ghGK+NWYe1V9 +# XGaG5X+wqt7zk7sg77nX8j/dkKFCE/MFPQAgQiRsWc1mvlNwFvmyj1dEZ8dlLlsq +# 6ctggjqiUyTPUnDNyL+NrMq+OZZqILvIMx1RQ/aQOsiPvPeu3CK/PLuDO/B1Ramc +# uwZ5y26HX5E0ajrPhWd8pORKOFtagSWOaS+wDIWJPpLTXSKs8/oKu4IlqyL2lwQV +# zma5nJ4OYTwja348TIQFnKakXduv7y5a3u4DX/nlUIBhIWDc0cZSKanz3m7Iy90t +# DXZReNkdxxF0jA0nsEXwdBEJRVn+ +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-SystemInformationSchema.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-SystemInformationSchema.ps1 new file mode 100644 index 0000000..7a460f1 --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-SystemInformationSchema.ps1 @@ -0,0 +1,234 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +<# +This is a Resource designer script which generates a mof schema for DCPP_POSTBehavior resource in DellBIOSProvider module. + + +#> + +$category = New-xDscResourceProperty -name Category -Type String -Attribute Key +$assettag = New-xDscResourceProperty -name AssetTag -Type String -Attribute Write +$ownershiptag = New-xDscResourceProperty -name OwnershipTag -Type String -Attribute Write +$Password = New-xDscResourceProperty -Name Password -Type string -Attribute Write -Description "Password" +$SecurePassword = New-xDscResourceProperty -Name SecurePassword -Type string -Attribute Write -Description "SecurePassword" +$PathToKey = New-xDscResourceProperty -Name PathToKey -Type string -Attribute Write + +$properties = @($category,$assettag,$ownershiptag,$Password,$SecurePassword,$PathToKey) + +New-xDscResource -ModuleName DellBIOSProviderX86 -Name DCPP_SystemInformation -Property $properties -Path 'C:\Program Files\WindowsPowerShell\Modules' -FriendlyName "SystemInformation" -Force -Verbose + +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCC7YBYFMImUzwZF +# e+yOatxiPCruwWeTfAJvwZA8kGdvl6CCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCDv26Li7PhJnVf4xw67p27D7vrT67S/X1wOx6mhijjX +# 2TANBgkqhkiG9w0BAQEFAASCAYBxZKIfsi7HxMEwEneZ4WA7Z4mHO5aQej5fohwF +# u+/gT5Ic7S1LdLO4U9NXj2HFD/ABalY17xg1zk7c1r8nS8ndhslr28R7FVrW+0w+ +# Y9GFnn4kEbFscwOe8widAKzKUvRWKUvrQu0+wMENTIZuunxtzke3L4G+PMBHDziD +# Bj2Gs66HWeoltPaRcNRuItdP+InQFm2/vUEIQOwqcdtAVJ5QH6MtN1hhv/al7VEE +# ubxuh2387WFB7Ryo7FMFulzWw2FLuOPbkbQp7mJK3lylUOzIWQhYtlN84ajnnp4Q +# T7q/4eJ/U2S0mlyTEYBgj9y0fW9eTuEI5zbj/T/OTRr0w36ZY4GTDk5OCWoJ0GtE +# bEdkatqa/n7IiV5Ttu1XLtmKM03vSoIaGKid8i3iTbzAygi7FbULfvcnBiXc+5+K +# 6k1WSj5t4DBQLIBOaTmzDsWUP1waA3GeZyCgpOS70/9gmsBovgf9BtdRIng0kaic +# q1UozqU47JCRzhNDzmZd4dMcr3qhgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCCrqHC1BdwwgfKO94yFlo+X7igzdX9QrDIsPoZF3N7hWwIUGO5gBXqLzjnj0088 +# T9lzpgKLlHEYDzIwMjIwOTI5MTA0MTU1WjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MTU1WjAvBgkqhkiG9w0BCQQxIgQgDStddCGR +# 5NGNVZWrxVSSpPd4r6UcB3E1r2ZBazOhHu8wNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBABYiydx1cO7SUoOoJlVQRwUr6D8IUHOE4nbLAiUyZLr4C6fxuvzG0ShHY+nK +# 0i58qXIguN5AMVMcNlCHn7WQz7Niwg4wqLAPR6N7mzRFiQJMKeMGdujh5BR87xgT +# wVt4aVTJOYQMynjbL8BdGzsn9XD1HZlswjjNZq7Kc7tdl6WthGNatYWdivOKxDWl +# jMkdVr7Iv9JjwqVBGhiRKHf6Lk7y1b7wvBGW6Y4VaCxTv/eqXDNh5CdMT9+mi+mz +# sr10wRS9eL90J8MSlM+Z9SRR0G/8rvpxag7zeiG+cU5gvYNtRbf4bp+2bpiv8nY5 +# cG0+9n5/1wNRb7QeCJfF0shx/fE= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-TPMSecuritySchema.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-TPMSecuritySchema.ps1 new file mode 100644 index 0000000..dd1ddf5 --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-TPMSecuritySchema.ps1 @@ -0,0 +1,236 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +<# +This is a Resource designer script which generates a mof schema for DCPP_POSTBehavior resource in DellBIOSProvider module. + + +#> + +$category = New-xDscResourceProperty -name Category -Type String -Attribute Key +$tpmsecurity = New-xDscResourceProperty -name TPMSecurity -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$tpmcommand = New-xDscResourceProperty -name TPMCommand -Type String -Attribute Write -ValidateSet @("Activate", "Deactivate") +$Password = New-xDscResourceProperty -Name Password -Type string -Attribute Write -Description "Password" +$SecurePassword = New-xDscResourceProperty -Name SecurePassword -Type string -Attribute Write -Description "SecurePassword" +$PathToKey = New-xDscResourceProperty -Name PathToKey -Type string -Attribute Write + + + +$properties = @($category, $tpmsecurity, $tpmcommand,$Password,$SecurePassword,$PathToKey) + +New-xDscResource -ModuleName DellBIOSProviderX86 -Name DCPP_TPMSecurity -Property $properties -Path 'C:\Program Files\WindowsPowerShell\Modules' -FriendlyName "TPMSecurity" -Force -Verbose + +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCbAnR7LdZUbIry +# vaOlIaKxb/xvQyHfYqCRT1p79COUZ6CCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCCIG+4odVdTwYgFAjzlfqoTquIp+J2Z/5fBR8j5DESE +# qjANBgkqhkiG9w0BAQEFAASCAYCccNWFIT+AsnOXvZXK5r65c2KE2L/fhv9UXYQ5 +# wQ/XjX2S5qY/FTSe61FG4mNYNmA+pgBSksyEgJaUsmmxbXBZSOOa80VinJcGXbaF +# xeN+MgHqxiuqbWqIvjj+xh48z34WttbbCppMHjXKe4BUpHNgtoLN6Dk9P2GMp+rb +# 4PGOSoXdGAD5deeyepFb7GAQ5z0bBSmo0ieICU6m9BYRH9zf0ZVa7bfih0eJW4e4 +# W3H7Xs2UxYD2Jf0yuq0Mr26mx7j/YsTXUNqPKflSFYztHqK4D5tKmVFkT4xkZTaq +# cArrZaLdJDYMOTiCwe6jcUe9evgUyk6oq61Lw4k2Ri1Pizqcg3E41TnA8tCGTjxx +# 4qLkR91hEzgQUB8ExBFYpgYpnazRYSm1cOUSp01ONhLaPRS1hywxNEkYIEP4NOPh +# 0rgFaBwW2HD+grSxWHJcPyZRxlHmlaDdw5Px7lPGrlOnWOv5dUzjlfwJH8dthG1k +# zfkL8HTXGTbcxER1TTt7/PzXEVGhgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCA9FyaUyxTPH/McsPVmhBgh9cdTy6cOOYMR9QnSbK9KVwIUQhPJM789TrNgJxNM +# 8rXCgGl0kjAYDzIwMjIwOTI5MTA0MTU2WjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MTU2WjAvBgkqhkiG9w0BCQQxIgQgq1wsv6qK +# +kDcvqq/pDVr80QtPLyMKUQqHbpi7hyyfwAwNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBAKLcko3iIGggcYacdrKn2V++ujUmAqHk05O65J8lch45vp9CsmFBA4654GGA +# 8q1xKnzreJiRUfG+F+070G64cTwyZWmRFJGfE5ZXj1VLsNsP07oqrY6K5SxHEuiK +# UKqYf0+TFBemgWFQUw2cKdVyf2VAHstzks2r4tX/jpq1pvcOnoPhfNi+PiheyoVG +# hE6UIRz6F4mMO1HylqBVHMMQzJWHZwlNhvIXOLGeFd5ANvTOnGNfw1zBJtJ8BBoT +# JThsu4kofN706uF77gAmOnMLsmisivZ6xfsb24Fo5bs0H8ppLqzV1VsE0nw657sT +# 34FWA9WtZLFRLSWz7mML3XFhKD0= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-USBConfigurationSchema.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-USBConfigurationSchema.ps1 new file mode 100644 index 0000000..5ad16fc --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-USBConfigurationSchema.ps1 @@ -0,0 +1,235 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +<# +This is a Resource designer script which generates a mof schema for DCPP_POSTBehavior resource in DellBIOSProvider module. + + +#> + +$category = New-xDscResourceProperty -name Category -Type String -Attribute Key +$externalusbport = New-xDscResourceProperty -name ExternalUSBPort -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$usb30controller = New-xDscResourceProperty -name USB30Controller -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$Password = New-xDscResourceProperty -Name Password -Type string -Attribute Write -Description "Password" +$SecurePassword = New-xDscResourceProperty -Name SecurePassword -Type string -Attribute Write -Description "SecurePassword" +$PathToKey = New-xDscResourceProperty -Name PathToKey -Type string -Attribute Write + + +$properties = @($category, $externalusbport, $usb30controller,$Password,$SecurePassword,$PathToKey) + +New-xDscResource -ModuleName DellBIOSProviderX86 -Name DCPP_USBConfiguration -Property $properties -Path 'C:\Program Files\WindowsPowerShell\Modules' -FriendlyName "USBConfiguration" -Force -Verbose + +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBctbqPmW41GMIV +# Zj/MqTMt5zmJVIjoPz839I6KtPY3cKCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCAgX8oppuUcweIC5IOUPPEisma3cJqa6dOTu9vCXZZw +# XjANBgkqhkiG9w0BAQEFAASCAYCLSX0Fvtvuvw9RUgssdzyGTK3f0KhmcKnYxZ4P +# wwN7EG82S/PcUHSwfSrLLRCyMQGCXU/7DX1gi152MVagszQsuR3Mrr1INYMTTBYK +# z3ir4NIRT2FkQMNeTVN6vjYZt/n4bCuu1yMtUWsKfbfcWz0o/+MK12fk2a/ucetd +# +Y6sKB182ubyDLGznVqtrEdPzFg5ksZum98Qw6ZhjvAmLjHzM6gcQhhlcsGNtctf +# JkzdlYjdD1gEzVWhPEJJ8EKwFDzstIeE9YkuMvvudUR9kibyHp2Z8LTIdNuqppoe +# 2JR6CNVoWUXXiRS+48v3kiNRvauzwqO0LI6XvK1k8gPWxZ7n4PLeNJ6jstEqAad+ +# S02qwySgZ3d1IUtJS0JNLZmeyAMEuAV5s4KzxbLVSdhI0xktbBUie91XdlPI85N3 +# M8VUoZu51u0r4wJ3TfBGNGsZd+Oaibgq38WN9/lJDnrXDX5H8zu3ny/akjfcbIlk +# aHdZDukuCAK/yqWKgLrfi3t8Te6hgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCC+E48PZsB1I+cPaeVtPJfTzG3fN6J1QBumSAdqksx/ugIUA5hr621O3Effs3cm +# M3l0U4G9sSwYDzIwMjIwOTI5MTA0MjAyWjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MjAyWjAvBgkqhkiG9w0BCQQxIgQg+y3tKRJf +# fhlx+Ypr3vH6aj6FVFKWw/alowdqrV3Cb20wNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBAIS5Q8+rBnFoGH5jbsJtX7ZIv/TvjuoCjbIqp2lBHkTOJG44QwXcfD5+/2YG +# ErgEEwJ6TEoO6IxPjaWGQ+uipcSFOsEZmS2/Raz4tP1yIjSPE+Dt7IKG5F56Dkgx +# obpLEj9bWlrTC4BVfbnHwKQDvEAq6toRylkEYbUHuL0YuFXP1RuU64zGcOCqSffC +# MdSyFKET/t1DX6+Vk52cJxp2JBfbGJatbQNsyxYN1E9ZikVdLhmtT0NdWkv0QaEK +# /GgeJBmF5QHkVufqy1th7OYqVMVXm4chtbFvQO0OBlPTw0nDR2MPFvuM464Dyrnb +# Wo+foYF5hBM62tXNjk5yz9NTy2I= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-VideoSchema.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-VideoSchema.ps1 new file mode 100644 index 0000000..3de5d9b --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-VideoSchema.ps1 @@ -0,0 +1,236 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +<# +This is a Resource designer script which generates a mof schema for DCPP_POSTBehavior resource in DellBIOSProvider module. + + +#> + +$category = New-xDscResourceProperty -name Category -Type String -Attribute Key +$lcdBrightnessOnBattery = New-xDscResourceProperty -name LCDBrightnessOnBattery -Type Uint32 -Attribute Write +$lcdBrightnessOnAC = New-xDscResourceProperty -name LCDBrightnessOnAC -Type Uint32 -Attribute Write +$Password = New-xDscResourceProperty -Name Password -Type string -Attribute Write -Description "Password" +$SecurePassword = New-xDscResourceProperty -Name SecurePassword -Type string -Attribute Write -Description "SecurePassword" +$PathToKey = New-xDscResourceProperty -Name PathToKey -Type string -Attribute Write + + + +$properties = @($category, $lcdBrightnessOnBattery, $lcdBrightnessOnAC,$Password,$SecurePassword,$PathToKey) + +New-xDscResource -ModuleName DellBIOSProviderX86 -Name DCPP_Video -Property $properties -Path 'C:\Program Files\WindowsPowerShell\Modules' -FriendlyName "Video" -Force -Verbose + +# SIG # Begin signature block +# MIIkoQYJKoZIhvcNAQcCoIIkkjCCJI4CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCALH+SU5Bedl9/V +# FX0pxortObuTfCO6QBQQAnRKpTL4paCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOEwghDdAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCA9GILoL4g9+62TszJOg3gtWD7c+qwzOHWNLX8mNmBX +# EDANBgkqhkiG9w0BAQEFAASCAYA7sQiGDbq60YBF3jFHjDJ/O4hRNgtnKMyApBap +# Dd8wCgyVxdKYDEGDA44p3jLbJWeMmbVly+OaaORk+nM1N8ijB/Lbg42aJKgU9Z7n +# FSErzZTEaLFN5DVFgJAgfpZL8Pf98HNPtjekc2vmFDrpZSoc4CJv7QhN/BpZnsVo +# jCSxUuv7TWWRa5cM4QkS0YJRhJj+Z26BJ0iNYAwWRP1rzNypq0t5J3o10zTTvFDR +# gTWysbZND/Z5CRT0A+NBDCwA1XZDvryPVubkOVxJyz8/yADsFHBx6bzX8ZZEKSDO +# Ssx5Dq3J3xW1ZW/eJxbL8SNF4UrLzRyAHHMN1UeTO9xGdMIr5RYyeyvKl3Ku2GFK +# lbjDUDDQ41kCxLiQSqhyibuDV08pga8NGtEH+74SB5+DZwpxtnuuA6JiBvixaKZT +# RHveeZkncdLPzq1ckpU0g4YWK1ArY09ovVeYZq1FG3Gkmx9cOuOXEp+fmM/e/mCM +# Q11DiRNxsSceiL3zR1UGpsfQeD+hgg49MIIOOQYKKwYBBAGCNwMDATGCDikwgg4l +# BgkqhkiG9w0BBwKggg4WMIIOEgIBAzENMAsGCWCGSAFlAwQCATCCAQ8GCyqGSIb3 +# DQEJEAEEoIH/BIH8MIH5AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCCIsWQkE5kkJCPE0T2Bu57TVViWPZ0PpESb+UsylVZakQIVAJw4Ewna9qRjACd5 +# RG/j65LA747JGA8yMDIyMDkyOTEwNDIwM1owAwIBHqCBhqSBgzCBgDELMAkGA1UE +# BhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZT +# eW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYg +# VGltZVN0YW1waW5nIFNpZ25lciAtIEczoIIKizCCBTgwggQgoAMCAQICEHsFsdRJ +# aFFE98mJ0pwZnRIwDQYJKoZIhvcNAQELBQAwgb0xCzAJBgNVBAYTAlVTMRcwFQYD +# VQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0 +# d29yazE6MDgGA1UECxMxKGMpIDIwMDggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0 +# aG9yaXplZCB1c2Ugb25seTE4MDYGA1UEAxMvVmVyaVNpZ24gVW5pdmVyc2FsIFJv +# b3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTYwMTEyMDAwMDAwWhcNMzEw +# MTExMjM1OTU5WjB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29y +# cG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNV +# BAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggEiMA0GCSqGSIb3 +# DQEBAQUAA4IBDwAwggEKAoIBAQC7WZ1ZVU+djHJdGoGi61XzsAGtPHGsMo8Fa4aa +# JwAyl2pNyWQUSym7wtkpuS7sY7Phzz8LVpD4Yht+66YH4t5/Xm1AONSRBudBfHkc +# y8utG7/YlZHz8O5s+K2WOS5/wSe4eDnFhKXt7a+Hjs6Nx23q0pi1Oh8eOZ3D9Jqo +# 9IThxNF8ccYGKbQ/5IMNJsN7CD5N+Qq3M0n/yjvU9bKbS+GImRr1wOkzFNbfx4Db +# ke7+vJJXcnf0zajM/gn1kze+lYhqxdz0sUvUzugJkV+1hHk1inisGTKPI8EyQRtZ +# Dqk+scz51ivvt9jk1R1tETqS9pPJnONI7rtTDtQ2l4Z4xaE3AgMBAAGjggF3MIIB +# czAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADBmBgNVHSAEXzBd +# MFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5j +# b20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMC4G +# CCsGAQUFBwEBBCIwIDAeBggrBgEFBQcwAYYSaHR0cDovL3Muc3ltY2QuY29tMDYG +# A1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9zLnN5bWNiLmNvbS91bml2ZXJzYWwtcm9v +# dC5jcmwwEwYDVR0lBAwwCgYIKwYBBQUHAwgwKAYDVR0RBCEwH6QdMBsxGTAXBgNV +# BAMTEFRpbWVTdGFtcC0yMDQ4LTMwHQYDVR0OBBYEFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMB8GA1UdIwQYMBaAFLZ3+mlIR59TEtXC6gcydgfRlwcZMA0GCSqGSIb3DQEB +# CwUAA4IBAQB16rAt1TQZXDJF/g7h1E+meMFv1+rd3E/zociBiPenjxXmQCmt5l30 +# otlWZIRxMCrdHmEXZiBWBpgZjV1x8viXvAn9HJFHyeLojQP7zJAv1gpsTjPs1rST +# yEyQY0g5QCHE3dZuiZg8tZiX6KkGtwnJj1NXQZAv4R5NTtzKEHhsQm7wtsX4YVxS +# 9U72a433Snq+8839A9fZ9gOoD+NT9wp17MZ1LqpmhQSZt/gGV+HGDvbor9rsmxgf +# qrnjOgC/zoqUywHbnsc4uw9Sq9HjlANgCk2g/idtFDL8P5dA4b+ZidvkORS92uTT +# w+orWrOVWFUEfcea7CMDjYUq0v+uqWGBMIIFSzCCBDOgAwIBAgIQe9Tlr7rMBz+h +# ASMEIkFNEjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMU +# U3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5l +# dHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0Ew +# HhcNMTcxMjIzMDAwMDAwWhcNMjkwMzIyMjM1OTU5WjCBgDELMAkGA1UEBhMCVVMx +# HTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRl +# YyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYgVGltZVN0 +# YW1waW5nIFNpZ25lciAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +# AQEArw6Kqvjcv2l7VBdxRwm9jTyB+HQVd2eQnP3eTgKeS3b25TY+ZdUkIG0w+d0d +# g+k/J0ozTm0WiuSNQI0iqr6nCxvSB7Y8tRokKPgbclE9yAmIJgg6+fpDI3VHcAyz +# X1uPCB1ySFdlTa8CPED39N0yOJM/5Sym81kjy4DeE035EMmqChhsVWFX0fECLMS1 +# q/JsI9KfDQ8ZbK2FYmn9ToXBilIxq1vYyXRS41dsIr9Vf2/KBqs/SrcidmXs7Dby +# lpWBJiz9u5iqATjTryVAmwlT8ClXhVhe6oVIQSGH5d600yaye0BTWHmOUjEGTZQD +# RcTOPAPstwDyOiLFtG/l77CKmwIDAQABo4IBxzCCAcMwDAYDVR0TAQH/BAIwADBm +# BgNVHSAEXzBdMFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8v +# ZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5j +# b20vcnBhMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly90cy1jcmwud3Muc3ltYW50 +# ZWMuY29tL3NoYTI1Ni10c3MtY2EuY3JsMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MA4GA1UdDwEB/wQEAwIHgDB3BggrBgEFBQcBAQRrMGkwKgYIKwYBBQUHMAGGHmh0 +# dHA6Ly90cy1vY3NwLndzLnN5bWFudGVjLmNvbTA7BggrBgEFBQcwAoYvaHR0cDov +# L3RzLWFpYS53cy5zeW1hbnRlYy5jb20vc2hhMjU2LXRzcy1jYS5jZXIwKAYDVR0R +# BCEwH6QdMBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTYwHQYDVR0OBBYEFKUT +# AamfhcwbbhYeXzsxqnk2AHsdMB8GA1UdIwQYMBaAFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMA0GCSqGSIb3DQEBCwUAA4IBAQBGnq/wuKJfoplIz6gnSyHNsrmmcnBjL+NV +# KXs5Rk7nfmUGWIu8V4qSDQjYELo2JPoKe/s702K/SpQV5oLbilRt/yj+Z89xP+Yz +# CdmiWRD0Hkr+Zcze1GvjUil1AEorpczLm+ipTfe0F1mSQcO3P4bm9sB/RDxGXBda +# 46Q71Wkm1SF94YBnfmKst04uFZrlnCOvWxHqcalB+Q15OKmhDc+0sdo+mnrHIsV0 +# zd9HCYbE/JElshuW6YUI6N3qdGBuYKVWeg3IRFjc5vlIFJ7lv94AvXexmBRyFCTf +# xxEsHwA/w0sUxmcczB4Go5BfXFSLPuMzW4IPxbeGAk5xn+lmRT92MYICWjCCAlYC +# AQEwgYswdzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0 +# aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9T +# eW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIENBAhB71OWvuswHP6EBIwQiQU0S +# MAsGCWCGSAFlAwQCAaCBpDAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJ +# KoZIhvcNAQkFMQ8XDTIyMDkyOTEwNDIwM1owLwYJKoZIhvcNAQkEMSIEIMwSm3uY +# y+dx9gtn3P9aWuf7GlplBy5ehcjSH75uDZVtMDcGCyqGSIb3DQEJEAIvMSgwJjAk +# MCIEIMR0znYAfQI5Tg2l5N58FMaA+eKCATz+9lPvXbcf32H4MAsGCSqGSIb3DQEB +# AQSCAQCk5sOH955Hsb10DgoxyE/dAFzUW3rBv28QNDO6IAX32kgywi49fMlSzQcb +# xvs7P14VbqqVhM0c0368l8rNYPAKOCDdoMBQAtssTy4dWKgGnxX4YIv904Lgg/Oq +# i3osK6wRBw6SBr+WMNS39sgBC6F5Yasrc03nq9+Udl/khCo0s1R77Cgam5WkZ9xi +# x13nVkJS8Nz6cTxBZE/+GEox/o31l9fPIHNTRfq5CVKuZRZqXisT5MxD09vsxUev +# oauXWJZNyw7wT9zZpP++29Ytkl0Wnjp1tkLzS7yvSUc2VOUlc1dXM/W6N0kual+w +# 1zhxtQamUDZbiU2nCOA9m/iCI5so +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-VirtualizationSchema.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-VirtualizationSchema.ps1 new file mode 100644 index 0000000..9528153 --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-VirtualizationSchema.ps1 @@ -0,0 +1,236 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +<# +This is a Resource designer script which generates a mof schema for DCPP_POSTBehavior resource in DellBIOSProvider module. + + +#> + +$category = New-xDscResourceProperty -name Category -Type String -Attribute Key +$virtualization = New-xDscResourceProperty -name Virtualization -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$vtfordirectio = New-xDscResourceProperty -name VTforDirectIO -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$trustedexecution = New-xDscResourceProperty -name TrustedExecution -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$Password = New-xDscResourceProperty -Name Password -Type string -Attribute Write -Description "Password" +$SecurePassword = New-xDscResourceProperty -Name SecurePassword -Type string -Attribute Write -Description "SecurePassword" +$PathToKey = New-xDscResourceProperty -Name PathToKey -Type string -Attribute Write + + +$properties = @($category, $virtualization, $vtfordirectio, $trustedexecution,$Password,$SecurePassword,$PathToKey) + +New-xDscResource -ModuleName DellBIOSProviderX86 -Name DCPP_Virtualization -Property $properties -Path 'C:\Program Files\WindowsPowerShell\Modules' -FriendlyName "Virtualization" -Force -Verbose + +# SIG # Begin signature block +# MIIkoQYJKoZIhvcNAQcCoIIkkjCCJI4CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAGR5e44j1fe4vw +# A/f8loUmrjkvfWA6I6bh0H0Ykv6nE6CCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOEwghDdAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCB8MiqFREKaIUiKiNXzKYF6PWq+2wB8w7gGSQQEaSD9 +# xjANBgkqhkiG9w0BAQEFAASCAYAaWbm0XvnRMhjROFEJy6qw0SVE51cmT+J/kIcs +# UeQontzk+73ESbsdZkwp/0bhGbgZJglwNYLxs1x708Cg0bCTkns0Z759e+VBzsXW +# TlQQ1YD1mqRmNtjONTlhF3oGeOx2zeRXO/6hIyA10JXjRZyAkMJJgx0JjK71LIDY +# p0njEMC1InJjPpLHXwnR0gbwuv13MwbkYUHCXW4frjgm+kxQbE1F1cbG8xJlHrLg +# bXrK4qwWO9B0Idg15jGjZXbIYWI2BvhZo4KRaiqrfb4rAHQlgIASRpBSAJuPw61d +# 15ICCKb6zfWZdBM016IItZhVivfGsI7VXsAhObO2weMv+1nJ0BjVEBnmdLIs9cO8 +# hTcwD/BB0i+Nezl59pnHu8g2jW3pe4CfpQFHJKp6yH9GaNGafr6C30E3bfgyXjf5 +# QHrHE9P42LcacQNx+nuJRZKlJnVZHaMVN2Zb8C1wcMLEg/xzTnfKzcsAAzgN/bF8 +# n86kJKSXmwTD8HxrwEw0nE2Yy2ehgg49MIIOOQYKKwYBBAGCNwMDATGCDikwgg4l +# BgkqhkiG9w0BBwKggg4WMIIOEgIBAzENMAsGCWCGSAFlAwQCATCCAQ8GCyqGSIb3 +# DQEJEAEEoIH/BIH8MIH5AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCAYLJQRGBO1jV0ZkeyIoRZho5yHzhxNBjqivVqGtG3l0wIVAMUfqFBH2R/EQjko +# STQ6PrIWS+YyGA8yMDIyMDkyOTEwNDIwNVowAwIBHqCBhqSBgzCBgDELMAkGA1UE +# BhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZT +# eW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYg +# VGltZVN0YW1waW5nIFNpZ25lciAtIEczoIIKizCCBTgwggQgoAMCAQICEHsFsdRJ +# aFFE98mJ0pwZnRIwDQYJKoZIhvcNAQELBQAwgb0xCzAJBgNVBAYTAlVTMRcwFQYD +# VQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0 +# d29yazE6MDgGA1UECxMxKGMpIDIwMDggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0 +# aG9yaXplZCB1c2Ugb25seTE4MDYGA1UEAxMvVmVyaVNpZ24gVW5pdmVyc2FsIFJv +# b3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTYwMTEyMDAwMDAwWhcNMzEw +# MTExMjM1OTU5WjB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29y +# cG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNV +# BAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggEiMA0GCSqGSIb3 +# DQEBAQUAA4IBDwAwggEKAoIBAQC7WZ1ZVU+djHJdGoGi61XzsAGtPHGsMo8Fa4aa +# JwAyl2pNyWQUSym7wtkpuS7sY7Phzz8LVpD4Yht+66YH4t5/Xm1AONSRBudBfHkc +# y8utG7/YlZHz8O5s+K2WOS5/wSe4eDnFhKXt7a+Hjs6Nx23q0pi1Oh8eOZ3D9Jqo +# 9IThxNF8ccYGKbQ/5IMNJsN7CD5N+Qq3M0n/yjvU9bKbS+GImRr1wOkzFNbfx4Db +# ke7+vJJXcnf0zajM/gn1kze+lYhqxdz0sUvUzugJkV+1hHk1inisGTKPI8EyQRtZ +# Dqk+scz51ivvt9jk1R1tETqS9pPJnONI7rtTDtQ2l4Z4xaE3AgMBAAGjggF3MIIB +# czAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADBmBgNVHSAEXzBd +# MFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5j +# b20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMC4G +# CCsGAQUFBwEBBCIwIDAeBggrBgEFBQcwAYYSaHR0cDovL3Muc3ltY2QuY29tMDYG +# A1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9zLnN5bWNiLmNvbS91bml2ZXJzYWwtcm9v +# dC5jcmwwEwYDVR0lBAwwCgYIKwYBBQUHAwgwKAYDVR0RBCEwH6QdMBsxGTAXBgNV +# BAMTEFRpbWVTdGFtcC0yMDQ4LTMwHQYDVR0OBBYEFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMB8GA1UdIwQYMBaAFLZ3+mlIR59TEtXC6gcydgfRlwcZMA0GCSqGSIb3DQEB +# CwUAA4IBAQB16rAt1TQZXDJF/g7h1E+meMFv1+rd3E/zociBiPenjxXmQCmt5l30 +# otlWZIRxMCrdHmEXZiBWBpgZjV1x8viXvAn9HJFHyeLojQP7zJAv1gpsTjPs1rST +# yEyQY0g5QCHE3dZuiZg8tZiX6KkGtwnJj1NXQZAv4R5NTtzKEHhsQm7wtsX4YVxS +# 9U72a433Snq+8839A9fZ9gOoD+NT9wp17MZ1LqpmhQSZt/gGV+HGDvbor9rsmxgf +# qrnjOgC/zoqUywHbnsc4uw9Sq9HjlANgCk2g/idtFDL8P5dA4b+ZidvkORS92uTT +# w+orWrOVWFUEfcea7CMDjYUq0v+uqWGBMIIFSzCCBDOgAwIBAgIQe9Tlr7rMBz+h +# ASMEIkFNEjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMU +# U3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5l +# dHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0Ew +# HhcNMTcxMjIzMDAwMDAwWhcNMjkwMzIyMjM1OTU5WjCBgDELMAkGA1UEBhMCVVMx +# HTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRl +# YyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYgVGltZVN0 +# YW1waW5nIFNpZ25lciAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +# AQEArw6Kqvjcv2l7VBdxRwm9jTyB+HQVd2eQnP3eTgKeS3b25TY+ZdUkIG0w+d0d +# g+k/J0ozTm0WiuSNQI0iqr6nCxvSB7Y8tRokKPgbclE9yAmIJgg6+fpDI3VHcAyz +# X1uPCB1ySFdlTa8CPED39N0yOJM/5Sym81kjy4DeE035EMmqChhsVWFX0fECLMS1 +# q/JsI9KfDQ8ZbK2FYmn9ToXBilIxq1vYyXRS41dsIr9Vf2/KBqs/SrcidmXs7Dby +# lpWBJiz9u5iqATjTryVAmwlT8ClXhVhe6oVIQSGH5d600yaye0BTWHmOUjEGTZQD +# RcTOPAPstwDyOiLFtG/l77CKmwIDAQABo4IBxzCCAcMwDAYDVR0TAQH/BAIwADBm +# BgNVHSAEXzBdMFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8v +# ZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5j +# b20vcnBhMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly90cy1jcmwud3Muc3ltYW50 +# ZWMuY29tL3NoYTI1Ni10c3MtY2EuY3JsMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MA4GA1UdDwEB/wQEAwIHgDB3BggrBgEFBQcBAQRrMGkwKgYIKwYBBQUHMAGGHmh0 +# dHA6Ly90cy1vY3NwLndzLnN5bWFudGVjLmNvbTA7BggrBgEFBQcwAoYvaHR0cDov +# L3RzLWFpYS53cy5zeW1hbnRlYy5jb20vc2hhMjU2LXRzcy1jYS5jZXIwKAYDVR0R +# BCEwH6QdMBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTYwHQYDVR0OBBYEFKUT +# AamfhcwbbhYeXzsxqnk2AHsdMB8GA1UdIwQYMBaAFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMA0GCSqGSIb3DQEBCwUAA4IBAQBGnq/wuKJfoplIz6gnSyHNsrmmcnBjL+NV +# KXs5Rk7nfmUGWIu8V4qSDQjYELo2JPoKe/s702K/SpQV5oLbilRt/yj+Z89xP+Yz +# CdmiWRD0Hkr+Zcze1GvjUil1AEorpczLm+ipTfe0F1mSQcO3P4bm9sB/RDxGXBda +# 46Q71Wkm1SF94YBnfmKst04uFZrlnCOvWxHqcalB+Q15OKmhDc+0sdo+mnrHIsV0 +# zd9HCYbE/JElshuW6YUI6N3qdGBuYKVWeg3IRFjc5vlIFJ7lv94AvXexmBRyFCTf +# xxEsHwA/w0sUxmcczB4Go5BfXFSLPuMzW4IPxbeGAk5xn+lmRT92MYICWjCCAlYC +# AQEwgYswdzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0 +# aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9T +# eW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIENBAhB71OWvuswHP6EBIwQiQU0S +# MAsGCWCGSAFlAwQCAaCBpDAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJ +# KoZIhvcNAQkFMQ8XDTIyMDkyOTEwNDIwNVowLwYJKoZIhvcNAQkEMSIEIKK5Ju0G +# +SR3mlJCgfFgQYzRH9r8Rzbljn3VC5S1W/vLMDcGCyqGSIb3DQEJEAIvMSgwJjAk +# MCIEIMR0znYAfQI5Tg2l5N58FMaA+eKCATz+9lPvXbcf32H4MAsGCSqGSIb3DQEB +# AQSCAQBEiF1g+Pkd0+tNrbUKVsxrIslHZxtJNUeiSP4cF55i5se8lknVPzmovJCo +# esgdVX18BdW99frAZp7V8UPKS1dx426tcQWN5oNMNP/rffBwpnzsXXz8dxhiSLZ0 +# Nyqe8I6FiMk0k2ymZfPeQevioRmQcB9TWlFPIvMEAyUjDpj4eef+HG4SNxL5J0Ev +# ootHcaizBvTRxV9I9ywNDWHohbgqasmdDq3Y/0Z/wTMS1pyVSEb7pB/1CyqKLf3w +# 6E/j/ewZdAx5x3f4MDCZrNxoLeplnK9zoim4O6LfXxKjCZF8VH7s5HxDSX6e5Hf6 +# LDeoyZNg7TUU7zc5bI0JAC0AbUU/ +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-WirelessSchema.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-WirelessSchema.ps1 new file mode 100644 index 0000000..28e4085 --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/ResourceDesignerScripts/GenerateDCPP-WirelessSchema.ps1 @@ -0,0 +1,241 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +<# +This is a Resource designer script which generates a mof schema for DCPP_POSTBehavior resource in DellBIOSProvider module. + + +#> + +$category = New-xDscResourceProperty -name Category -Type String -Attribute Key +$wirelessswitchwwancontrol = New-xDscResourceProperty -name WirelessSwitchWWANControl -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$wirelessswitchbluetoothcontrol = New-xDscResourceProperty -name WirelessSwitchBluetoothControl -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$wirelessswitchwwangpsradiocontrol = New-xDscResourceProperty -name WirelessSwitchWWANGPSRadioControl -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$wirelessswitchwlanwigigcontrol = New-xDscResourceProperty -name WirelessSwitchWLANWiGigControl -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$wirelesswan = New-xDscResourceProperty -name WirelessWAN -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$wirelesslan = New-xDscResourceProperty -name WirelessLAN -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$bluetooth = New-xDscResourceProperty -name Bluetooth -Type String -Attribute Write -ValidateSet @("Enabled", "Disabled") +$Password = New-xDscResourceProperty -Name Password -Type string -Attribute Write -Description "Password" +$SecurePassword = New-xDscResourceProperty -Name SecurePassword -Type string -Attribute Write -Description "SecurePassword" +$PathToKey = New-xDscResourceProperty -Name PathToKey -Type string -Attribute Write + + + +$properties = @($category, $wirelessswitchwwancontrol, $wirelessswitchbluetoothcontrol, $wirelessswitchwwangpsradiocontrol, $wirelessswitchwlanwigigcontrol, $wirelesswan, $wirelesslan, $bluetooth,$Password,$SecurePassword,$PathToKey) + +New-xDscResource -ModuleName DellBIOSProviderX86 -Name DCPP_Wireless -Property $properties -Path 'C:\Program Files\WindowsPowerShell\Modules' -FriendlyName "Wireless" -Force -Verbose + +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBjrMaroKHyxyB4 +# 6Jz1t2M2BdWG/cdXpzzusRIT7z+qY6CCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCBp77badiSJ7LvuSwlg7/5HM8Izim9djhBRylj1cUon +# FTANBgkqhkiG9w0BAQEFAASCAYBrMyGC0q154JU4R8c73E/OPGFEd5x4o0eoBebg +# 9bpgToSK6oWX+Yf7GPXxlaGz5ZaFLK3xKYfsUoLmNfEcMa9UvVP0Znt4P7TETp+8 +# 9ZtL/INgdte5JEp/QG7YsFPXO+DeUWtjOUY1LtAEJBcfcdQkk3Myjpm4optPYySk +# EY5hFVKhyPK4DeXGH0T7IjvGShvPyVa4G6keaGwpO1C6IUaFFDO7uVbrubv3rGBb +# uZvYemuIw6ZOB1Hv4YbSr2KrfEDkE3PCodzC2pTVryQAi/Jw1ZmZgg3b4CXnGmgT +# d4p+Q8XigpzP0k3apXjHzpCMKj+eywfArqWMmLRyDNq4v10lBl41z1Vvna1G1y/T +# G7Kh8d2jKgCejkcjp0+QFPkviEctdIX5q4N/ouN87jO2GRUo+lNjRd3Y32rERbGd +# XyenE/4UxfPdioBcTHWAyXGt3+h2ieW4NKjVEEn+e4aHUk5wCJjPaASwAb+PSI1/ +# dE6AMFapOboVhVaO14spxJGyUPuhgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCCFurMg7QM82jRUMqKcECeWOaON3KPZa/ixFqTCcDvpqQIUSCJolWGek8qZ8pZj +# 84XLzbI35vAYDzIwMjIwOTI5MTA0MjA3WjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MjA3WjAvBgkqhkiG9w0BCQQxIgQgi8NjzDpt +# I20zzG9RWIsxJdi9WptgCLlpOJr4Ky8MoQAwNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBAEeZNZ7j9vgo/bzaUrnOKFzhKs/UOqS1qzEa7A8fTAS0WlJDDTsCv5FC6rBW +# lNe5bD0rpSNYVnjdyOqkmTvCmehNJ9mmqhZQSqs8jOF3anHpHYlbnhyJ5l8gh8qM +# NpphkzD6qAMsY9oS86JYDPTEFsDWsQ96kxcp+pj+6uW53jXchXzQZEFrlLtptoLk +# cA9g1pR9u1xCAYTayKfUwiGvIO4j+AoPVmnQ3P+Gm1PrbS0gnIbe0XVUsp+RtUsQ +# r0yrA0+UoF/4EV5w2STr4XLhcYPLzOZIw3upP4wCFd8wj3abojNO+HybP0ovhI8a +# e/kw07TXuwGGDB7w+Ib9QTiaBhU= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Set-Dell1stBootdevice.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Set-Dell1stBootdevice.ps1 new file mode 100644 index 0000000..a6f2f39 --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Set-Dell1stBootdevice.ps1 @@ -0,0 +1,276 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +function Set-Dell1stBootdevice { +<# + .Synopsis + Sets a bootdevice first in the boot sequence + .Description + This CmdLet sets a boot device first in the boot sequence. You can specify a substring of the name of the boot device. + If a BIOS password (Admin or System password) is set, supply it using the -Password parameter. + .Example + Set-Dell1stBootdevice -bootdevice USB -password $Password + .Example + Set-Dell1stBootDevice hdd +#> +param( + [Parameter(Mandatory=$true, Position=0)][string] $Bootdevice, + [Parameter(Mandatory=$false, Position=1)][string] $Password + + ) + + BEGIN { + } + PROCESS { + + #the process block is called for each item in the pipeline and you can reference it via $_ + + $bs = Get-item -path DellSmbios:\BootSequence\Bootsequence + $bootdevicearray = $bs.CurrentValue + $bootdevicearray | foreach { + if ($_.DeviceName.replace(' ','') -match ($bootdevice).replace(' ','')) + { + # $matches.count will include a count of all matches made from the last -match operation. + if ($Matches.Count -gt 1) + { + Write-Output "Multiple Boot devices found. Please provide a more specific name." + break; + + } + + if ($Password) { + Set-Item -path DellSmbios:\BootSequence\BootSequence -value $_.DeviceNumber -Password $password + } + else + { + Set-Item -path DellSmbios:\BootSequence\BootSequence -value $_.DeviceNumber + } + + Write-Output "Updated Bootorder is:" + Get-Item -path DellSmbios:\BootSequence\BootSequence | select -expand currentvalue + break; + } + + } + + Write-Output "Boot device $bootdevice is not found." + } + END{} + + } + + +# SIG # Begin signature block +# MIIkoQYJKoZIhvcNAQcCoIIkkjCCJI4CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCH1pFZXQX51p10 +# TV+/PE4ENI6d1exwim5sKDnw95wyaaCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOEwghDdAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCAmn0VaEkU6TA+evtMZyb1WWxykS5/L4y1mhgDJq4WN +# 3TANBgkqhkiG9w0BAQEFAASCAYAFl0HmRm16f536WfYoNsRtvAQVzrWVt8wkfTOt +# 3dYPuebWaZvYLItnudmRjDenQwqyOCydRAMXUBNRm/VDzcIt73efnfAERRzW3Z/t +# YsGNBWL/7yYVhqggVGkZ0HeNCF1FgatBXmyXsbuYoJ6mJp4GgG2oX3bL0b60QNIf +# 3u9be70miBK5j56ogE11EMjOQQibA3l6s/MAp9HCFajM0u5nWWbF/LM4mr30GbkH +# GLm8nveGYn5BUt754gExOxDZoT5fDJGSAKZ+KG+uRjwS5gFvsF6dBbXJ2HG3eQYI +# EL6N/zlrlRQaprLwQMlAAULuye8HSVJgi/CB1A9QZhAaSXmpxFasjSQfxi6ujkMG +# v30NmFRi3qGohH5bmuLHuxOsHHkFYTMWU/h4yEG3fT7YkOzFwRmWwAi3CprPQGLL +# ziQGq8SfYXePX7ifXHCXvHof/Zm5SlvFCiykzXD3J2BGzIUvA4SFnb8+nN9ihc+d +# kHhcUCdc2kcWBD8BXWGNNnkR+zmhgg49MIIOOQYKKwYBBAGCNwMDATGCDikwgg4l +# BgkqhkiG9w0BBwKggg4WMIIOEgIBAzENMAsGCWCGSAFlAwQCATCCAQ8GCyqGSIb3 +# DQEJEAEEoIH/BIH8MIH5AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCBjAszCTG1EevInGweHARYESfNhaK17V6D2eCN1SSRDTwIVAMUE2CRKO+I7U9RH +# MPnjSEUNeAknGA8yMDIyMDkyOTEwNDEwMFowAwIBHqCBhqSBgzCBgDELMAkGA1UE +# BhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZT +# eW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYg +# VGltZVN0YW1waW5nIFNpZ25lciAtIEczoIIKizCCBTgwggQgoAMCAQICEHsFsdRJ +# aFFE98mJ0pwZnRIwDQYJKoZIhvcNAQELBQAwgb0xCzAJBgNVBAYTAlVTMRcwFQYD +# VQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0 +# d29yazE6MDgGA1UECxMxKGMpIDIwMDggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0 +# aG9yaXplZCB1c2Ugb25seTE4MDYGA1UEAxMvVmVyaVNpZ24gVW5pdmVyc2FsIFJv +# b3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTYwMTEyMDAwMDAwWhcNMzEw +# MTExMjM1OTU5WjB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29y +# cG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNV +# BAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggEiMA0GCSqGSIb3 +# DQEBAQUAA4IBDwAwggEKAoIBAQC7WZ1ZVU+djHJdGoGi61XzsAGtPHGsMo8Fa4aa +# JwAyl2pNyWQUSym7wtkpuS7sY7Phzz8LVpD4Yht+66YH4t5/Xm1AONSRBudBfHkc +# y8utG7/YlZHz8O5s+K2WOS5/wSe4eDnFhKXt7a+Hjs6Nx23q0pi1Oh8eOZ3D9Jqo +# 9IThxNF8ccYGKbQ/5IMNJsN7CD5N+Qq3M0n/yjvU9bKbS+GImRr1wOkzFNbfx4Db +# ke7+vJJXcnf0zajM/gn1kze+lYhqxdz0sUvUzugJkV+1hHk1inisGTKPI8EyQRtZ +# Dqk+scz51ivvt9jk1R1tETqS9pPJnONI7rtTDtQ2l4Z4xaE3AgMBAAGjggF3MIIB +# czAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADBmBgNVHSAEXzBd +# MFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5j +# b20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMC4G +# CCsGAQUFBwEBBCIwIDAeBggrBgEFBQcwAYYSaHR0cDovL3Muc3ltY2QuY29tMDYG +# A1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9zLnN5bWNiLmNvbS91bml2ZXJzYWwtcm9v +# dC5jcmwwEwYDVR0lBAwwCgYIKwYBBQUHAwgwKAYDVR0RBCEwH6QdMBsxGTAXBgNV +# BAMTEFRpbWVTdGFtcC0yMDQ4LTMwHQYDVR0OBBYEFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMB8GA1UdIwQYMBaAFLZ3+mlIR59TEtXC6gcydgfRlwcZMA0GCSqGSIb3DQEB +# CwUAA4IBAQB16rAt1TQZXDJF/g7h1E+meMFv1+rd3E/zociBiPenjxXmQCmt5l30 +# otlWZIRxMCrdHmEXZiBWBpgZjV1x8viXvAn9HJFHyeLojQP7zJAv1gpsTjPs1rST +# yEyQY0g5QCHE3dZuiZg8tZiX6KkGtwnJj1NXQZAv4R5NTtzKEHhsQm7wtsX4YVxS +# 9U72a433Snq+8839A9fZ9gOoD+NT9wp17MZ1LqpmhQSZt/gGV+HGDvbor9rsmxgf +# qrnjOgC/zoqUywHbnsc4uw9Sq9HjlANgCk2g/idtFDL8P5dA4b+ZidvkORS92uTT +# w+orWrOVWFUEfcea7CMDjYUq0v+uqWGBMIIFSzCCBDOgAwIBAgIQe9Tlr7rMBz+h +# ASMEIkFNEjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMU +# U3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5l +# dHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0Ew +# HhcNMTcxMjIzMDAwMDAwWhcNMjkwMzIyMjM1OTU5WjCBgDELMAkGA1UEBhMCVVMx +# HTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRl +# YyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYgVGltZVN0 +# YW1waW5nIFNpZ25lciAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +# AQEArw6Kqvjcv2l7VBdxRwm9jTyB+HQVd2eQnP3eTgKeS3b25TY+ZdUkIG0w+d0d +# g+k/J0ozTm0WiuSNQI0iqr6nCxvSB7Y8tRokKPgbclE9yAmIJgg6+fpDI3VHcAyz +# X1uPCB1ySFdlTa8CPED39N0yOJM/5Sym81kjy4DeE035EMmqChhsVWFX0fECLMS1 +# q/JsI9KfDQ8ZbK2FYmn9ToXBilIxq1vYyXRS41dsIr9Vf2/KBqs/SrcidmXs7Dby +# lpWBJiz9u5iqATjTryVAmwlT8ClXhVhe6oVIQSGH5d600yaye0BTWHmOUjEGTZQD +# RcTOPAPstwDyOiLFtG/l77CKmwIDAQABo4IBxzCCAcMwDAYDVR0TAQH/BAIwADBm +# BgNVHSAEXzBdMFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8v +# ZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5j +# b20vcnBhMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly90cy1jcmwud3Muc3ltYW50 +# ZWMuY29tL3NoYTI1Ni10c3MtY2EuY3JsMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MA4GA1UdDwEB/wQEAwIHgDB3BggrBgEFBQcBAQRrMGkwKgYIKwYBBQUHMAGGHmh0 +# dHA6Ly90cy1vY3NwLndzLnN5bWFudGVjLmNvbTA7BggrBgEFBQcwAoYvaHR0cDov +# L3RzLWFpYS53cy5zeW1hbnRlYy5jb20vc2hhMjU2LXRzcy1jYS5jZXIwKAYDVR0R +# BCEwH6QdMBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTYwHQYDVR0OBBYEFKUT +# AamfhcwbbhYeXzsxqnk2AHsdMB8GA1UdIwQYMBaAFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMA0GCSqGSIb3DQEBCwUAA4IBAQBGnq/wuKJfoplIz6gnSyHNsrmmcnBjL+NV +# KXs5Rk7nfmUGWIu8V4qSDQjYELo2JPoKe/s702K/SpQV5oLbilRt/yj+Z89xP+Yz +# CdmiWRD0Hkr+Zcze1GvjUil1AEorpczLm+ipTfe0F1mSQcO3P4bm9sB/RDxGXBda +# 46Q71Wkm1SF94YBnfmKst04uFZrlnCOvWxHqcalB+Q15OKmhDc+0sdo+mnrHIsV0 +# zd9HCYbE/JElshuW6YUI6N3qdGBuYKVWeg3IRFjc5vlIFJ7lv94AvXexmBRyFCTf +# xxEsHwA/w0sUxmcczB4Go5BfXFSLPuMzW4IPxbeGAk5xn+lmRT92MYICWjCCAlYC +# AQEwgYswdzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0 +# aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9T +# eW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIENBAhB71OWvuswHP6EBIwQiQU0S +# MAsGCWCGSAFlAwQCAaCBpDAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJ +# KoZIhvcNAQkFMQ8XDTIyMDkyOTEwNDEwMFowLwYJKoZIhvcNAQkEMSIEIOhlhAxv +# gJiGUmLRNHYc/kaJajLkQM2tlmAH8qfk4qgEMDcGCyqGSIb3DQEJEAIvMSgwJjAk +# MCIEIMR0znYAfQI5Tg2l5N58FMaA+eKCATz+9lPvXbcf32H4MAsGCSqGSIb3DQEB +# AQSCAQAJj6HRJV+rSiMeLyXP2+GRPLykmF1Y5If2ZK4HshCN38nUDf02O15ogC9f +# Aq9lkbnig9A51Ah1ZwUwY0fzSoqiQwFKhtIM1DVB7NcmpnLM9jhJ9vI7xvCTByHd +# XZCH3/PccVb64Vq5CmQjtKRBakjkOrAl6QZlJ8XxUkxcQRhncPvgpBuQgrzQPdtu +# mIkv2ekhSFdNXPZfj2CFO8hlrzBPqwh7X+1qkwKhHcH9b6jButJDkJVX1caO+Ec3 +# 1c1GnjuAiVobvijqnQTH3lODgfeJz2Z16aPejwGTWEWjmDfDMVNMocMbekbRz4bq +# O8/uVSGLutfT6JmXb/Aqsa/H8abn +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Set-DellAutoOnForSelectDays.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Set-DellAutoOnForSelectDays.ps1 new file mode 100644 index 0000000..b4c9738 --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Set-DellAutoOnForSelectDays.ps1 @@ -0,0 +1,329 @@ +########################################################################## +# DELL PROPRIETARY INFORMATION +# +# This software is confidential. Dell Inc., or one of its subsidiaries, has supplied this +# software to you under the terms of a license agreement,nondisclosure agreement or both. +# You may not copy, disclose, or use this software except in accordance with those terms. +# +# Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# DELL INC. MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. +# DELL SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, +# MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. +# +# +# +########################################################################## + +function Set-DellAutoOnForSelectDays { +<# + .Synopsis + Configures the system's auto-on capabilities that control individual days + .Description + This CmdLet sets the Auto-on to select days and enables or disables the individual days + to automatically power on the system on a pre fixed . + If a BIOS password (Admin or System password) is set, supply it using the -Password parameter. + .Example + Set-DellAutoonForSelectDays -Sunday "Enabled" -Monday "Disabled" -password $Password + .Example + Set-DellAutoonForSelectDays -Tuesday "Enabled" + .Example + Set-DellAutoOnForSelectDays -verbose +#> +[CmdletBinding()] +param( + [Alias("Sun")][System.String] $Sunday, + [Alias("Mon")][System.String] $Monday, + [Alias("Tue")][System.String] $Tuesday, + [Alias("Wed")][System.String] $Wednesday, + [Alias("Thu")][System.String] $Thursday, + [Alias("Fri")][System.String] $Friday, + [Alias("Sat")][System.String] $Saturday, + [Alias("pw")][Parameter(Mandatory=$false)][System.String] $Password + + ) + + BEGIN { + Write-Output "Set-DellAutoOnForSelectDays" + } + PROCESS { + #the process block is called for each item in the pipeline and you can reference it via $_ + #Write-Output "in process" + + $pathToPowerManagement = 'DellSmbios' + ':\' + 'PowerManagement' + + + $isAdminPWSet = Get-Item -path DellSmbios:\Security\IsAdminPasswordSet + $issystemPWSet = Get-Item -path DellSmbios:\Security\IsSystemPasswordSet + + if (($isAdminPWSet.CurrentValue -match 'True') -or ($issystemPWSet.CurrentValue -match 'True')) + { + if ([string]::IsNullOrEmpty($Password)){ + Write-Warning "Specify the password using -password." + return + } + } + + + if ($Password){ + Set-Item -path $pathToPowerManagement\AutoOn -value "SelectDays" -password $Password -ErrorVariable ev + } + else{ Set-Item -path $pathToPowerManagement\AutoOn -value "SelectDays" -ErrorVariable ev} + + if ($ev){ + Write-Warning "$ev Error occured in $($ev.InvocationInfo.ScriptName)" + return + } + + if ($PSBoundParameters.ContainsKey('Sunday')) { + if ($password){ + Set-Item -path DellSmbios:\PowerManagement\AutoOnSun -value $Sunday -password $Password -ErrorVariable ev + } + else {Set-Item -path DellSmbios:\PowerManagement\AutoOnSun -value $Sunday -ErrorVariable ev} + + } + if ($PSBoundParameters.ContainsKey('Monday')) { + if ($password){ + Set-Item -path $pathToPowerManagement\AutoOnMon -value $Monday -password $Password -ErrorVariable ev + } + else {Set-Item -path DellSmbios:\PowerManagement\AutoOnMon -value $Monday -ErrorVariable ev} + } + if ($PSBoundParameters.ContainsKey('Tuesday')) { + if ($password){ + Set-Item -path $pathToPowerManagement\AutoOnTue -value $Tuesday -password $Password -ErrorVariable ev + } + else {Set-Item -path DellSmbios:\PowerManagement\AutoOnTue -value $Tuesday -ErrorVariable ev} + } + if ($PSBoundParameters.ContainsKey('Wednesday')) { + if ($password){ + Set-Item -path $pathToPowerManagement\AutoOnWed -value $Wednesday -password $Password -ErrorVariable ev + } + else {Set-Item -path DellSmbios:\PowerManagement\AutoOnWed -value $Wednesday -ErrorVariable ev} + } + if ($PSBoundParameters.ContainsKey('Thursday')) { + if ($password){ + Set-Item -path $pathToPowerManagement\AutoOnThur -value $Thursday -password $Password -ErrorVariable ev + } + else {Set-Item -path DellSmbios:\PowerManagement\AutoOnThur -value $Thursday -ErrorVariable ev} + } + if ($PSBoundParameters.ContainsKey('Friday')) { + if ($password){ + Set-Item -path $pathToPowerManagement\AutoOnFri -value $Friday -password $Password -ErrorVariable ev + } + else {Set-Item -path DellSmbios:\PowerManagement\AutoOnFri -value $Friday -ErrorVariable ev} + } + if ($PSBoundParameters.ContainsKey('Saturday')) { + if ($password){ + Set-Item -path $pathToPowerManagement\AutoOnSat -value $Saturday -password $Password -ErrorVariable ev + } + else {Set-Item -path DellSmbios:\PowerManagement\AutoOnSat -value $Saturday -ErrorVariable ev} + } + if ($ev){ + Write-Warning "$ev Error occured in $($ev.InvocationInfo.ScriptName)" + } + } + END{} + + } + + +# SIG # Begin signature block +# MIIkoAYJKoZIhvcNAQcCoIIkkTCCJI0CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCD1D2K0YTXuJHDy +# U75BbgwisPDfAeiOq4I0PwKtFyrKyaCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOAwghDcAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCBr0wUseAm9fQtjs5WFSewSjd32GcHUr5RVAV2c/7tC +# CTANBgkqhkiG9w0BAQEFAASCAYCOhWizla85DdxJofzy0zI0ldypjzwcWb0R1FrH +# n038WkCUr/FKnNNWteiRRJvR4AV2urQ5YlA9fiGTaaVhDvDOc9zSTy/RVJcA3RLi +# w+LjT7DKLFkJ4NvuJnb4TaUEmU8+PVtHCt+zRd/PWg41PSYAA/jJqLuFP0iDrz4R +# S/sq9SXllHn533bAd0mnsM969azU8CSq0A99m7Xf3UqGuRrw4DGXdWyPjgsw0eQ8 +# 0UA9e2M4hnR/WbVPTZSusbC+/FINMAcQy343QnHw/DGR0quCgQo7uMqbu5LFRKxa +# oLTTzbUl4YzgSDozeBAQvoS9Zvzz/qoeHYDHuprOuaqQkoO3ByUtQ7JMVMt92V5G +# PzYO3lYz/xuRAJST3O945ddXfBLRKfj9EAcgVB8W3jYwxxoz202A0YszR2qtOlzB +# ca29PFOQG7ajuHMDClC2XtEwudLuL+BFEhkc+JLrKjenHmiqCd64kdS968d8OcMI +# jadcRNXIpBB9V/BZxoc3Z+cifwKhgg48MIIOOAYKKwYBBAGCNwMDATGCDigwgg4k +# BgkqhkiG9w0BBwKggg4VMIIOEQIBAzENMAsGCWCGSAFlAwQCATCCAQ4GCyqGSIb3 +# DQEJEAEEoIH+BIH7MIH4AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCAv93FskkgkYjkkR4AFOYPh/fNw22OUNn/P71NGOgsePwIUcYf3AT7FhIS6rIOg +# X03BZlLYzW8YDzIwMjIwOTI5MTA0MTA0WjADAgEeoIGGpIGDMIGAMQswCQYDVQQG +# EwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5 +# bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBU +# aW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOgggqLMIIFODCCBCCgAwIBAgIQewWx1Elo +# UUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UEBhMCVVMxFzAVBgNV +# BAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +# b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +# b3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9v +# dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNjAxMTIwMDAwMDBaFw0zMTAx +# MTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jw +# b3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UE +# AxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCASIwDQYJKoZIhvcN +# AQEBBQADggEPADCCAQoCggEBALtZnVlVT52Mcl0agaLrVfOwAa08cawyjwVrhpon +# ADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhiG37rpgfi3n9ebUA41JEG50F8eRzL +# y60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3tr4eOzo3HberSmLU6Hx45ncP0mqj0 +# hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR +# 7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kO +# qT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO1DaXhnjFoTcCAwEAAaOCAXcwggFz +# MA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0w +# WwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYI +# KwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5zeW1jZC5jb20wNgYD +# VR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290 +# LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAoBgNVHREEITAfpB0wGzEZMBcGA1UE +# AxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQEL +# BQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi +# 2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPI +# TJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1 +# TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUuqmaFBJm3+AZX4cYO9uiv2uybGB+q +# ueM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD +# 6itas5VYVQR9x5rsIwONhSrS/66pYYEwggVLMIIEM6ADAgECAhB71OWvuswHP6EB +# IwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRT +# eW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0 +# d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTAe +# Fw0xNzEyMjMwMDAwMDBaFw0yOTAzMjIyMzU5NTlaMIGAMQswCQYDVQQGEwJVUzEd +# MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +# IFRydXN0IE5ldHdvcmsxMTAvBgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3Rh +# bXBpbmcgU2lnbmVyIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D +# 6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNf +# W48IHXJIV2VNrwI8QPf03TI4kz/lLKbzWSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr +# 8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJdFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKW +# lYEmLP27mKoBONOvJUCbCVPwKVeFWF7qhUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANF +# xM48A+y3API6IsW0b+XvsIqbAgMBAAGjggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYG +# A1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9k +# LnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNv +# bS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL3RzLWNybC53cy5zeW1hbnRl +# Yy5jb20vc2hhMjU2LXRzcy1jYS5jcmwwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# DgYDVR0PAQH/BAQDAgeAMHcGCCsGAQUFBwEBBGswaTAqBggrBgEFBQcwAYYeaHR0 +# cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMuY29tMDsGCCsGAQUFBzAChi9odHRwOi8v +# dHMtYWlhLndzLnN5bWFudGVjLmNvbS9zaGEyNTYtdHNzLWNhLmNlcjAoBgNVHREE +# ITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMB +# qZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0jBBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+A +# dWIwDQYJKoZIhvcNAQELBQADggEBAEaer/C4ol+imUjPqCdLIc2yuaZycGMv41Up +# ezlGTud+ZQZYi7xXipINCNgQujYk+gp7+zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ +# 2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub6KlN97QXWZJBw7c/hub2wH9EPEZcF1rj +# pDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69bEepxqUH5DXk4qaENz7Sx2j6aescixXTN +# 30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/H +# ESwfAD/DSxTGZxzMHgajkF9cVIs+4zNbgg/Ft4YCTnGf6WZFP3YxggJaMIICVgIB +# ATCBizB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRp +# b24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5 +# bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIw +# CwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkq +# hkiG9w0BCQUxDxcNMjIwOTI5MTA0MTA0WjAvBgkqhkiG9w0BCQQxIgQgTuY66V5x +# F0niWm4tTZjAvB41ruKWoD0bnJt8Zvxyaf0wNwYLKoZIhvcNAQkQAi8xKDAmMCQw +# IgQgxHTOdgB9AjlODaXk3nwUxoD54oIBPP72U+9dtx/fYfgwCwYJKoZIhvcNAQEB +# BIIBAIT1L54dlnPM940R8DVBctG26fHaGGbo5jfUmJ+cj0j3qh6Db0t7XExXNw/F +# ISiXzQZOcyESLRKp/uLAuSFMU+7Ei92N2+lQjyrfjPCXrQhDwz193hnQVfBeOBBy +# T4RwwFtgD8SoG7fjWc0Mft7xfuw9157woIkB1oHkQoPv/XPCUqYEzzAX51u4VkJ8 +# hOxtOJXm799kw69MTjb6XMK883b9KoM9HAT/+yFp0V13AQwkQwgINEUp7Dwj9GWd +# nA7JySynq1pzpd7+nXnWRhbXjEB7hLBwZIoBQo2btttL1WipJYAWjLoVBgxIdo33 +# 3KFS0s+gBRHt275d3In1z0KcKFU= +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Tests/ResourceTests.ps1 b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Tests/ResourceTests.ps1 new file mode 100644 index 0000000..6ddd178 --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/Tests/ResourceTests.ps1 @@ -0,0 +1,200 @@ +Test-xDscResource..\DSCResources\DCPP_POSTBehavior +Test-xDscSchema..\DSCResources\DCPP_POSTBehavior\DCPP_POSTBehavior.schema.mof +# SIG # Begin signature block +# MIIkoQYJKoZIhvcNAQcCoIIkkjCCJI4CAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAmaCIsn5wJMmHR +# x6XHviv4BQ0sczPLz9WJqfi1NEaoxaCCExYwggXfMIIEx6ADAgECAhBOQOQ3VO3m +# jAAAAABR05R/MA0GCSqGSIb3DQEBCwUAMIG+MQswCQYDVQQGEwJVUzEWMBQGA1UE +# ChMNRW50cnVzdCwgSW5jLjEoMCYGA1UECxMfU2VlIHd3dy5lbnRydXN0Lm5ldC9s +# ZWdhbC10ZXJtczE5MDcGA1UECxMwKGMpIDIwMDkgRW50cnVzdCwgSW5jLiAtIGZv +# ciBhdXRob3JpemVkIHVzZSBvbmx5MTIwMAYDVQQDEylFbnRydXN0IFJvb3QgQ2Vy +# dGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjAeFw0yMTA1MDcxNTQzNDVaFw0zMDEx +# MDcxNjEzNDVaMGkxCzAJBgNVBAYTAlVTMRYwFAYDVQQKDA1FbnRydXN0LCBJbmMu +# MUIwQAYDVQQDDDlFbnRydXN0IENvZGUgU2lnbmluZyBSb290IENlcnRpZmljYXRp +# b24gQXV0aG9yaXR5IC0gQ1NCUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +# AoICAQCngY/3FEW2YkPy2K7TJV5IT1G/xX2fUBw10dZ+YSqUGW0nRqSmGl33VFFq +# gCLGqGZ1TVSDyV5oG6v2W2Swra0gvVTvRmttAudFrnX2joq5Mi6LuHccUk15iF+l +# OhjJUCyXJy2/2gB9Y3/vMuxGh2Pbmp/DWiE2e/mb1cqgbnIs/OHxnnBNCFYVb5Cr +# +0i6udfBgniFZS5/tcnA4hS3NxFBBuKK4Kj25X62eAUBw2DtTwdBLgoTSeOQm3/d +# vfqsv2RR0VybtPVc51z/O5uloBrXfQmywrf/bhy8yH3m6Sv8crMU6UpVEoScRCV1 +# HfYq8E+lID1oJethl3wP5bY9867DwRG8G47M4EcwXkIAhnHjWKwGymUfe5SmS1dn +# DH5erXhnW1XjXuvH2OxMbobL89z4n4eqclgSD32m+PhCOTs8LOQyTUmM4OEAwjig +# nPqEPkHcblauxhpb9GdoBQHNG7+uh7ydU/Yu6LZr5JnexU+HWKjSZR7IH9Vybu5Z +# HFc7CXKd18q3kMbNe0WSkUIDTH0/yvKquMIOhvMQn0YupGaGaFpoGHApOBGAYGuK +# Q6NzbOOzazf/5p1nAZKG3y9I0ftQYNVc/iHTAUJj/u9wtBfAj6ju08FLXxLq/f0u +# DodEYOOp9MIYo+P9zgyEIg3zp3jak/PbOM+5LzPG/wc8Xr5F0wIDAQABo4IBKzCC +# AScwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0lBBYw +# FAYIKwYBBQUHAwMGCCsGAQUFBwMIMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYGCCsG +# AQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L3JwYTAzBggrBgEFBQcBAQQn +# MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGA1UdHwQp +# MCcwJaAjoCGGH2h0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZzJjYS5jcmwwHQYDVR0O +# BBYEFIK61j2Xzp/PceiSN6/9s7VpNVfPMB8GA1UdIwQYMBaAFGpyJnrQHu995ztp +# UdRsjZ+QEmarMA0GCSqGSIb3DQEBCwUAA4IBAQAfXkEEtoNwJFMsVXMdZTrA7LR7 +# BJheWTgTCaRZlEJeUL9PbG4lIJCTWEAN9Rm0Yu4kXsIBWBUCHRAJb6jU+5J+Nzg+ +# LxR9jx1DNmSzZhNfFMylcfdbIUvGl77clfxwfREc0yHd0CQ5KcX+Chqlz3t57jpv +# 3ty/6RHdFoMI0yyNf02oFHkvBWFSOOtg8xRofcuyiq3AlFzkJg4sit1Gw87kVlHF +# VuOFuE2bRXKLB/GK+0m4X9HyloFdaVIk8Qgj0tYjD+uL136LwZNr+vFie1jpUJuX +# bheIDeHGQ5jXgWG2hZ1H7LGerj8gO0Od2KIc4NR8CMKvdgb4YmZ6tvf6yK81MIIG +# gzCCBGugAwIBAgIQNa+3e500H2r8j4RGqzE1KzANBgkqhkiG9w0BAQ0FADBpMQsw +# CQYDVQQGEwJVUzEWMBQGA1UECgwNRW50cnVzdCwgSW5jLjFCMEAGA1UEAww5RW50 +# cnVzdCBDb2RlIFNpZ25pbmcgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +# IENTQlIxMB4XDTIxMDUwNzE5MTk1MloXDTQwMTIyOTIzNTkwMFowYzELMAkGA1UE +# BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3Qg +# RXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMjCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL69pznJpX3sXWXx9Cuph9DnrRrF +# GjsYzuGhUY1y+s5YH1y4JEIPRtUxl9BKTeObMMm6l6ic/kU2zyeA53u4bsEkt9+n +# dNyF8qMkWEXMlJQ7AuvEjXxG9VxmguOkwdMfrG4MUyMO1Dr62kLxg1RfNTJW8rV4 +# m1cASB6pYWEnDnMDQ7bWcJL71IWaMMaz5ppeS+8dKthmqxZG/wvYD6aJSgJRV0E8 +# QThOl8dRMm1njmahXk2fNSKv1Wq3f0BfaDXMafrxBfDqhabqMoXLwcHKg2lFSQbc +# CWy6SWUZjPm3NyeMZJ414+Xs5wegnahyvG+FOiymFk49nM8I5oL1RH0owL2JrWwv +# 3C94eRHXHHBL3Z0ITF4u+o29p91j9n/wUjGEbjrY2VyFRJ5jBmnQhlh4iZuHu1gc +# pChsxv5pCpwerBFgal7JaWUu7UMtafF4tzstNfKqT+If4wFvkEaq1agNBFegtKzj +# bb2dGyiAJ0bH2qpnlfHRh3vHyCXphAyPiTbSvjPhhcAz1aA8GYuvOPLlk4C/xsOr +# e5PEPZ257kV2wNRobzBePLQ2+ddFQuASBoDbpSH85wV6KI20jmB798i1SkesFGaX +# oFppcjFXa1OEzWG6cwcVcDt7AfynP4wtPYeM+wjX5S8Xg36Cq08J8inhflV3ZZQF +# HVnUCt2TfuMUXeK7AgMBAAGjggErMIIBJzASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBTOiU+CUaoVooRiyjEjYdJh+/j+eDAfBgNVHSMEGDAWgBSCutY9l86f +# z3Hokjev/bO1aTVXzzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6 +# Ly9vY3NwLmVudHJ1c3QubmV0MDEGA1UdHwQqMCgwJqAkoCKGIGh0dHA6Ly9jcmwu +# ZW50cnVzdC5uZXQvY3NicjEuY3JsMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAK +# BggrBgEFBQcDAzBEBgNVHSAEPTA7MDAGBFUdIAAwKDAmBggrBgEFBQcCARYaaHR0 +# cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwBwYFZ4EMAQMwDQYJKoZIhvcNAQENBQAD +# ggIBAD4AVLgq849mr2EWxFiTZPRBi2RVjRs1M6GbkdirRsqrX7y+fnDk0tcHqJYH +# 14bRVwoI0NB4Tfgq37IE85rh13zwwQB6wUCh34qMt8u0HQFh8piapt24gwXKqSwW +# 3JwtDv6nl+RQqZeVwUsqjFHjxALga3w1TVO8S5QTi1MYFl6mCqe4NMFssess5DF9 +# DCzGfOGkVugtdtWyE3XqgwCuAHfGb6k97mMUgVAW/FtPEhkOWw+N6kvOBkyJS64g +# zI5HpnXWZe4vMOhdNI8fgk1cQqbyFExQIJwJonQkXDnYiTKFPK+M5Wqe5gQ6pRP/ +# qh3NR0suAgW0ao/rhU+B7wrbfZ8pj6XCP1I4UkGVO7w+W1QwQiMJY95QjYk1Rfqr +# uA+Poq17ehGT8Y8ohHtoeUdq6GQpTR/0HS9tHsiUhjzTWpl6a3yrNfcrOUtPuT8W +# ku8pjI2rrAEazHFEOctAPiASzghw40f+3IDXCADRC2rqIbV5ZhfpaqpW3c0VeLED +# wBStPkcYde0KU0syk83/gLGQ1hPl5EF4Iu1BguUO37DOlSFF5osB0xn39CtVrNlW +# c2MQ4LigbctUlpigmSFRBqqmDDorY8t52kO50hLM3o9VeukJ8+Ka0yXBezaS2uDl +# UmfN4+ZUCqWd1HOj0y9dBmSFA3d/YNjCvHTJlZFot7d+YRl1MIIGqDCCBJCgAwIB +# AgIQAe4UxLGsyd7P5PzHxoWYOTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJV +# UzEWMBQGA1UEChMNRW50cnVzdCwgSW5jLjE8MDoGA1UEAxMzRW50cnVzdCBFeHRl +# bmRlZCBWYWxpZGF0aW9uIENvZGUgU2lnbmluZyBDQSAtIEVWQ1MyMB4XDTIxMTEx +# ODIzMDczOVoXDTIyMTIxMjIzMDczOVowgdgxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +# EwVUZXhhczETMBEGA1UEBxMKUm91bmQgUm9jazETMBEGCysGAQQBgjc8AgEDEwJV +# UzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTERMA8GA1UEChMIRGVsbCBJbmMx +# HTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMR0wGwYDVQQLExRDbGllbnQg +# UHJvZHVjdCBHcm91cDEQMA4GA1UEBRMHMjE0MTU0MTERMA8GA1UEAxMIRGVsbCBJ +# bmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCcnoY5qeZB6eKg6TA0 +# u4F4EOiljq6evB9RAQVNoxAiM/LCe2DdMC6NJZ65D+NvuoqdJOwFfFF4XsDZ1Ejt +# GIKSkFWi4UrgdG/VAh8QUru2zJc7Loun9WlgixCc3+umiC+BepYwkzRwCA6fnXDd +# pn7leFV6+hfTZxLZ+3FM+apPHrCA06ediV7TTqE2D+8OiO2ltOzTMGBSIFd+6QS3 +# 9yqKiEFgU6Fj/XrZ/daJ7M3Y9E1HJGcmKB5I+7tO7WMcFXElJiCkXt8MJiKZWf9v +# sQUwz95YEwFHyQq28CIqSwhzTsu1RTr2ntYztWusyggBmeRMOZbpBCPwov/uH3Qg +# p3fss43WHpTOvrrOxy/aNi3l4wiAzE76I/Ormena6Q5KeDDRspg39LMopZqujyB3 +# 0n1+MLt7AT+Rn/Wo8QEWmHWTPKxNgDLLGzmUdtwfNgkkBuh9d7QM4RQVm97Q/yCI +# OrVDpGpJic3WcgiWoeBNYGHjml0FQC0Y3wkmgOgUND7xL5ECAwEAAaOCAWAwggFc +# MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFLo0bmGFz/lpCSH/8Bb/n9HscUq3MB8G +# A1UdIwQYMBaAFM6JT4JRqhWihGLKMSNh0mH7+P54MGcGCCsGAQUFBwEBBFswWTAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMgYIKwYBBQUHMAKG +# Jmh0dHA6Ly9haWEuZW50cnVzdC5uZXQvZXZjczItY2hhaW4ucDdjMDEGA1UdHwQq +# MCgwJqAkoCKGIGh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvZXZjczIuY3JsMA4GA1Ud +# DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzBLBgNVHSAERDBCMDcGCmCG +# SAGG+mwKAQIwKTAnBggrBgEFBQcCARYbaHR0cHM6Ly93d3cuZW50cnVzdC5uZXQv +# cnBhMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCeCAC5jie90k3LIkOSD8lh +# F5ljcQDkp7HGkCvIVqNJ0hLHoLTubqURUWOBh0XVln6oGG80NVLVz/NqW4kGpLoC +# ntX/BGb68IbyyEh/uA2ODqRkFfnHhOqtoBlfn6A02/1GbW8Gjuc90MsK89ANVUyo +# g9l4DG+jjVjWpsRu21YypDNwnuHTzjbvl1E85zNDUJgq1P/9lxwvXr/DKQgwHsQs +# /7bflgYQsf2BS0aj1mDvnqUmFOVR6lEdbnxYo2cEmw3Uvx+Zd3oAkP+Cd8uxDn4b +# h+9DhnL+D7NNzbgAnDwB5RAiHp4yCIvHwHE+IZhUEGWLSqph81+oUUDwaeOohdMf +# NA3ZJYd8aSDgldapLuG3kfP91eMDu59AWtdFW1JZ0tGr8I24+LS4NeD6dsdb7RUj +# Z8VsK8S5VDKYyHzxQPYFI78w8wjIKZ9d1M7BrRiQMhg3U3gP9kj4GRVWIjJyxqPx +# JXahtIULNreCnfZzMi0w3QcLt1KwH4hYYQ9sO2EZYOUoZ4wWVodb5NQiM5Ksjmli +# 8262L7zhW5fb9LIzlvNf10z9Ab8nf+QN6dMWqydnHmB0kL6H1i515cE3cmBDo+b2 +# QKQFbpI5d2AilrbsD3s9OD2siDrmTj+aFsZ3h/OZB2xiYkewm0QTpFDG5q715634 +# kdBK9cjmdy5Y5OJ8+LSZkzGCEOEwghDdAgEBMHcwYzELMAkGA1UEBhMCVVMxFjAU +# BgNVBAoTDUVudHJ1c3QsIEluYy4xPDA6BgNVBAMTM0VudHJ1c3QgRXh0ZW5kZWQg +# VmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0EgLSBFVkNTMgIQAe4UxLGsyd7P5PzH +# xoWYOTANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwxAjAAMBkGCSqGSIb3 +# DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEV +# MC8GCSqGSIb3DQEJBDEiBCDkj0mG0DqvBh/VcRjUAli9kJJAjoAIZpmi7eNgsqvQ +# sDANBgkqhkiG9w0BAQEFAASCAYBEwpVDkTwo7ITJi//WF65s2xuT44JPehsM6NAo +# zm3BSvsSkenVzQX1XE3c3vgEz4E/Otg9SCNQRxZF09Ro+Py6VrF2bczYpIgTKb+m +# l8iX7HSRMoHg099cstoR6IMq+547UquDCuZNXMEPV6ZcLXJiflFnTpX+TyxRYCoy +# Woip1wWie+rSy+LwFxiIb8gARKnIJVpTNhLYUDVCoLkCT/NbUr92N6tQZJqm28MN +# ZbABNrsCHoZ7Vd+TzBGlpSVcZebgn3fWrufYgW5AmkI3a07TyMU6EPj/8iK7HdO+ +# Ijbv+BywsWDOWe2mXeY4tFGYaW0Md5Vtq9ktAC8wDyKfSIL/tYAXFkJwah3ak1UE +# cTdnL5DoTPrEknZRN5RPL1hYAzVBD7flp6/fod/C+Kf5ZgrMfEo63S3d59nD5ZCK +# +TgCibtEDNxD5zaGRavBpm4VQRA4VZ5tP0duCcUk0QedsX1l5mki7M4+szOGoOlz +# P0BPUhJaLTuLriTudOuKTLPGId6hgg49MIIOOQYKKwYBBAGCNwMDATGCDikwgg4l +# BgkqhkiG9w0BBwKggg4WMIIOEgIBAzENMAsGCWCGSAFlAwQCATCCAQ8GCyqGSIb3 +# DQEJEAEEoIH/BIH8MIH5AgEBBgtghkgBhvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUA +# BCCRTCGoswWoOP3yHTnQhoXp9UwkcqsrMkMJ6Gq8YcY+zAIVAMbPFulOEHSigVdk +# 7JNHKzVf6nBvGA8yMDIyMDkyOTEwNDIxMVowAwIBHqCBhqSBgzCBgDELMAkGA1UE +# BhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZT +# eW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYg +# VGltZVN0YW1waW5nIFNpZ25lciAtIEczoIIKizCCBTgwggQgoAMCAQICEHsFsdRJ +# aFFE98mJ0pwZnRIwDQYJKoZIhvcNAQELBQAwgb0xCzAJBgNVBAYTAlVTMRcwFQYD +# VQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0 +# d29yazE6MDgGA1UECxMxKGMpIDIwMDggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0 +# aG9yaXplZCB1c2Ugb25seTE4MDYGA1UEAxMvVmVyaVNpZ24gVW5pdmVyc2FsIFJv +# b3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTYwMTEyMDAwMDAwWhcNMzEw +# MTExMjM1OTU5WjB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29y +# cG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNV +# BAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggEiMA0GCSqGSIb3 +# DQEBAQUAA4IBDwAwggEKAoIBAQC7WZ1ZVU+djHJdGoGi61XzsAGtPHGsMo8Fa4aa +# JwAyl2pNyWQUSym7wtkpuS7sY7Phzz8LVpD4Yht+66YH4t5/Xm1AONSRBudBfHkc +# y8utG7/YlZHz8O5s+K2WOS5/wSe4eDnFhKXt7a+Hjs6Nx23q0pi1Oh8eOZ3D9Jqo +# 9IThxNF8ccYGKbQ/5IMNJsN7CD5N+Qq3M0n/yjvU9bKbS+GImRr1wOkzFNbfx4Db +# ke7+vJJXcnf0zajM/gn1kze+lYhqxdz0sUvUzugJkV+1hHk1inisGTKPI8EyQRtZ +# Dqk+scz51ivvt9jk1R1tETqS9pPJnONI7rtTDtQ2l4Z4xaE3AgMBAAGjggF3MIIB +# czAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADBmBgNVHSAEXzBd +# MFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5j +# b20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMC4G +# CCsGAQUFBwEBBCIwIDAeBggrBgEFBQcwAYYSaHR0cDovL3Muc3ltY2QuY29tMDYG +# A1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9zLnN5bWNiLmNvbS91bml2ZXJzYWwtcm9v +# dC5jcmwwEwYDVR0lBAwwCgYIKwYBBQUHAwgwKAYDVR0RBCEwH6QdMBsxGTAXBgNV +# BAMTEFRpbWVTdGFtcC0yMDQ4LTMwHQYDVR0OBBYEFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMB8GA1UdIwQYMBaAFLZ3+mlIR59TEtXC6gcydgfRlwcZMA0GCSqGSIb3DQEB +# CwUAA4IBAQB16rAt1TQZXDJF/g7h1E+meMFv1+rd3E/zociBiPenjxXmQCmt5l30 +# otlWZIRxMCrdHmEXZiBWBpgZjV1x8viXvAn9HJFHyeLojQP7zJAv1gpsTjPs1rST +# yEyQY0g5QCHE3dZuiZg8tZiX6KkGtwnJj1NXQZAv4R5NTtzKEHhsQm7wtsX4YVxS +# 9U72a433Snq+8839A9fZ9gOoD+NT9wp17MZ1LqpmhQSZt/gGV+HGDvbor9rsmxgf +# qrnjOgC/zoqUywHbnsc4uw9Sq9HjlANgCk2g/idtFDL8P5dA4b+ZidvkORS92uTT +# w+orWrOVWFUEfcea7CMDjYUq0v+uqWGBMIIFSzCCBDOgAwIBAgIQe9Tlr7rMBz+h +# ASMEIkFNEjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJVUzEdMBsGA1UEChMU +# U3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5l +# dHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0Ew +# HhcNMTcxMjIzMDAwMDAwWhcNMjkwMzIyMjM1OTU5WjCBgDELMAkGA1UEBhMCVVMx +# HTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRl +# YyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYgVGltZVN0 +# YW1waW5nIFNpZ25lciAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +# AQEArw6Kqvjcv2l7VBdxRwm9jTyB+HQVd2eQnP3eTgKeS3b25TY+ZdUkIG0w+d0d +# g+k/J0ozTm0WiuSNQI0iqr6nCxvSB7Y8tRokKPgbclE9yAmIJgg6+fpDI3VHcAyz +# X1uPCB1ySFdlTa8CPED39N0yOJM/5Sym81kjy4DeE035EMmqChhsVWFX0fECLMS1 +# q/JsI9KfDQ8ZbK2FYmn9ToXBilIxq1vYyXRS41dsIr9Vf2/KBqs/SrcidmXs7Dby +# lpWBJiz9u5iqATjTryVAmwlT8ClXhVhe6oVIQSGH5d600yaye0BTWHmOUjEGTZQD +# RcTOPAPstwDyOiLFtG/l77CKmwIDAQABo4IBxzCCAcMwDAYDVR0TAQH/BAIwADBm +# BgNVHSAEXzBdMFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8v +# ZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5zeW1jYi5j +# b20vcnBhMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly90cy1jcmwud3Muc3ltYW50 +# ZWMuY29tL3NoYTI1Ni10c3MtY2EuY3JsMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MA4GA1UdDwEB/wQEAwIHgDB3BggrBgEFBQcBAQRrMGkwKgYIKwYBBQUHMAGGHmh0 +# dHA6Ly90cy1vY3NwLndzLnN5bWFudGVjLmNvbTA7BggrBgEFBQcwAoYvaHR0cDov +# L3RzLWFpYS53cy5zeW1hbnRlYy5jb20vc2hhMjU2LXRzcy1jYS5jZXIwKAYDVR0R +# BCEwH6QdMBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTYwHQYDVR0OBBYEFKUT +# AamfhcwbbhYeXzsxqnk2AHsdMB8GA1UdIwQYMBaAFK9j1sqjToVy4Ke8QfMpojh/ +# gHViMA0GCSqGSIb3DQEBCwUAA4IBAQBGnq/wuKJfoplIz6gnSyHNsrmmcnBjL+NV +# KXs5Rk7nfmUGWIu8V4qSDQjYELo2JPoKe/s702K/SpQV5oLbilRt/yj+Z89xP+Yz +# CdmiWRD0Hkr+Zcze1GvjUil1AEorpczLm+ipTfe0F1mSQcO3P4bm9sB/RDxGXBda +# 46Q71Wkm1SF94YBnfmKst04uFZrlnCOvWxHqcalB+Q15OKmhDc+0sdo+mnrHIsV0 +# zd9HCYbE/JElshuW6YUI6N3qdGBuYKVWeg3IRFjc5vlIFJ7lv94AvXexmBRyFCTf +# xxEsHwA/w0sUxmcczB4Go5BfXFSLPuMzW4IPxbeGAk5xn+lmRT92MYICWjCCAlYC +# AQEwgYswdzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0 +# aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9T +# eW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIENBAhB71OWvuswHP6EBIwQiQU0S +# MAsGCWCGSAFlAwQCAaCBpDAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJ +# KoZIhvcNAQkFMQ8XDTIyMDkyOTEwNDIxMVowLwYJKoZIhvcNAQkEMSIEIMnJW/nM +# vpId4rDpYdPRydd614CqAsh5wyfyfBLL/z89MDcGCyqGSIb3DQEJEAIvMSgwJjAk +# MCIEIMR0znYAfQI5Tg2l5N58FMaA+eKCATz+9lPvXbcf32H4MAsGCSqGSIb3DQEB +# AQSCAQBQndc9UfXyAdEwcGd/aNzWlA3SEr8mbKKXvysexvTb26f6CobzbyL6QVE0 +# RSJTmtk3xQG3GOkmbAMqdbo5/2RlI3ZjMdki8LDchlxKYMcr5hp5SJ/Op1etkgeG +# /9RC3RmLwQYkXPVGPvDiR8Enob6VfQOr7WwNARGtgS5sNUzmgttej9YTcIkpZERc +# XqudibeUv3H4MwSl2i4OkuYOlkvqT31wq4/cPZniX7CMEbvTP+ACro+6VW3i3jtq +# upfGJEN2ijjX2JER9gab1eaiQN1gDQ+xrP7D94x7u85ABZf/Zy7KXQ2xenWXF5NB +# AA0KEfA/dxgr+TN9XB2RTA+mhtLL +# SIG # End signature block diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/en-US/DellBIOSProvider.dll-Help.xml b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/en-US/DellBIOSProvider.dll-Help.xml new file mode 100644 index 0000000..4983b1f --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/en-US/DellBIOSProvider.dll-Help.xml @@ -0,0 +1,3947 @@ + + + + + +DellSmbiosProv + + + DellSmbios: + + + Provides access to Dell Client BIOS attributes. + + + The Dell Command BIOS provider for Windows PowerShell lets you query and change the SMBIOS attributes on Dell Client systems. The Dell Command BIOS provider adds the Dellsmbios: drive to Windows PowerShell. Dell Command BIOS provider is compatible with PowerShell 3.0 and later. The DellSmbios: drive has the following two level: +-- Categories, which are high level containers that group the attributes of BIOS. +-- Attributes, each of which represents a BIOS setting + +Organization of the DellSmbios: Drive + +The Dell Command BIOS provider provider exposes a Windows PowerShell drive with a directory structure that corresponds to a logical grouping of Dell SMBIOS attributes in F2 setup menu. These groupings are known as categories. +Dellsmbios:\ +-- SystemInformation +-- MemoryInformation +-- ProcessorInformation +-- BatteryInformation +-- BootSequence +-- AdvancedBootOptions +-- BIOSSetupAdvancedMode +-- SystemConfiguration +-- StealthModeControl +-- Video +-- Security +-- SecureBoot +-- IntelSoftwareGuardExtensions +-- Performance +-- PowerManagement +-- POSTBehavior +-- Manageability +-- VirtualizationSupport +-- Wireless +-- Maintenance +-- SystemLogs +-- TPMSecurity +-- MiscellaneousDevices +-- USBConfiguration +-- AdvancedConfigurations +-- SupportAssistSystemResolution +-- ThermalConfiguration +-- PreEnabled + +Custom Provider Help +-------------------- +The BootSequence, Security, PeakShiftDayConfiguration, AdvancedBatteryChargeConfiguration, AutoOn, PrimaryBattChargeCfg, KeyboardBacklightEnabledColors, KeyboardBacklightActiveColor, KeyboardBacklightCustom1Color, KeyboardBacklightCustom2Color, TPMSecurity and SecureBoot provider paths provide specific Set-Item support. Type "get-help Set-Item" in the relevant path for custom help. + + + None + + + + + + + + + Navigating the DellSmbios: Drive + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + This command uses the Set-Location cmdlet to change the current location to the DellSmbios: drive. + + + Set-Location DellSmbios: + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + This command uses the Set-Location (alias CD) command to change the current location to the 'BootSequence' directory which represents the 'Boot Sequence' menu in F2 Setup. Use a backslash (\) or forward slash (/) to indicate a level of the Dellsmbios: drive. + + + Set-Location -Path DellSmbios:\BootSequence + + + If you are not in the DellSmbios: drive, begin the path with the drive name. + + + + + + + + + Displaying the Contents of the DellSmbios: Drive + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + This command uses the Get-Childitem cmdlet to display the categories as in F2 Setup on the local system. + + + get-childitem -path Dellsmbios: + + + If you are in the DellSmbios: drive, you can omit the drive name. + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + This command uses the Get-Childitem cmdlet to display the fields under the category 'USB Configuration'. + + + get-childitem -path DellSmbios:\USBConfiguration + + If you are in the DellSmbios: drive, you can omit the drive name. + + + + + + + + + Providing the password to validate in a secure manner + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + This command uses the Get-Childitem cmdlet to display the categories as in F2 Setup on the local system. + + PS DellSmbios:\PowerManagement> Si .\AutoOn "SelectDays" -PasswordSecure (Read-Host "Enter secure password" -AsSecureStr +ing) + + Function Write-DellBIOSPassword can be used to store the password in a file. In a later seesion Read-DellBIOSPassword can be executed to retrieve the password form the file. + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + This command uses the Get-Childitem cmdlet to display the fields under the category 'USB Configuration'. + + PS DellSmbios:\> $SecurePwd = Read-DellBIOSPasswordPS DellSmbios:\PowerManagement> Si .\AutoOn "SelectDays" -PasswordSecure $SecurePwd + + + + + + + + + + Password + Set-Item + + String + + Specifies the BIOS password in plain text to validate in order to change the current value of an attribute. This parameter is valid for all settable attributes. + + + + + + + + + + + PasswordSecure + Set-Item + + SecureString + + Specifies the BIOS password in encrypted text to validate in order to change the current value of an attribute. This parameter is valid for all settable attributes. + + + + + + + + + + + + + + http://en.community.dell.com/techcenter/enterprise-client/w/wiki/6901.dell-command-powershell-provider + + + + + + + + + + Get-ChildItem + + + Gets the Dell Client BIOS attributes. + + + + + Get + ChildItem + + + + +The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu. In this location, i.e. in Dellsmbios: drive, the Get-ChildItem cmdlet retrieves the SMBIOS attributes on Dell Client systems. In the Security directory, you can get the password related settings. Note that a password can not be reported. + + + + + + Get-ChildItem + + + + + + WhatIf + + Describes what would happen if you executed the command without actually executing the command. + + SwitchParameter + + SwitchParameter + + + + + + + + + + System.String[] + + + + + + You can pipe a string that contains a path (in quotation marks) to Get-ChildItem. + + + + + + + System.Object + + + + + + The type of object that Get-ChildItem displays is determined by the objects in the provider drive path. + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\Security; + + + + This command retrieves the password related attributes from the category Security. Please note that passowrds can not be reported. + + + + + + + + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\Security | Select Attribute, CurrentValue, PossibleValues; + + + + This command retrieves the PossibleValues field which is not shown in default view. + + + + + + + + + + + + + + + + + Online version: + http://dell.com/command + + + about_Providers + + + + Get-Item + + + + + + + + + + + + Set-Item + + + Configures the SMBIOS attribute setting of Dell Client BIOS. In this location, the Set-Item command configures the password related attributes. + + + + + Set + Item + + + + +The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu. In this location, i.e. in Dellsmbios: drive, the Set-Item cmdlet configures the SMBIOS attributes on Dell Client systems. In the Security category, you can set, change and clear the Setup passowrd and System password. + + + + + + Set-Item + + password + + + Specifies the Setup password or System passowrd. + + + string + + + + + + + + + + + + + System.String + + + + + + You can pipe a string for the new value to Set-Item. + + "Locked" | Set-Item -Path DellSmbios:\Security\StrongPassword + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\Security\adminpassowrd $NewPwd; + + + + This command sets the admin (or setup) password. The admin password enables several security features. When set, it- + + * Restricts changes to the settings in Setup. + * Restricts the boot devices listed in the F12 Boot Menu to those enabled in the "Boot Sequence" field. + * Substitues for the system password if the system prompts for a password during power on. + * Successful changes to this passowrd take effect immediately. + + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\Security\adminpassowrd $NewPwd -passowrd $PlainTxtPwd; + + + + This command changes the admin passowrd from the current value to a new value. Current value of the password is specified by the parameter -password. + + + + + + + + + + + + + -------------------------- EXAMPLE 3 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\Security\adminpassowrd "" -PasswordSecure $SecurePwd; + + + + This command clears (or delete) the admin passowrd. An empty string is specified as the new value to clear the password. Current value of the secure password is specified by the parameter -passwordsecure. + + Note: If you delete the admin password, the system password, if set, is also deleted. Also, the admin password can be used to delete teh HDD password. For this reason, you cannot set an admin password if a system password or HDD password is already set. The admin password must be set first if an admin password is used with a system password and/or HDD password. + + + + + + + + + + + + + + Online version: + http://dell.com/command + + + about_Providers + + + + Get-Item + + + + Set-Item + + + + + + + + + + + + + Set-Item + + + Configures the SMBIOS attribute setting of Dell Client BIOS. In the Security category, the Set-Item cmdlet configures the HDD password for system using HDDPassword attribute on Dell Client BIOS systems. + + + + + Set + Item + + + + +The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu. In this location, i.e. in Dellsmbios: drive, the Set-Item cmdlet configures the SMBIOS attributes on Dell Client systems. HDDPassword attribute is available in Security category. In the Security category, by using HDDPassword attribute, the Set-Item cmdlet configures the password for Hard disk drive of system. The same password is configured for all available hard disks. After configuring the HDDPassword, restart the system to apply the changes. + + + + + + Set-Item + + password + + + Specifies the Setup password or System passowrd. + + + string + + + + + + + AdminPassword + + Specifies that admin password must be provided while setting HDD password if administrator has restricted the changes to HDD password. + + string + + string + + + + + + ATAMaximumSecurityMode + + Specifies the ATA Maximum Security Mode. Provide the value as '0' if you want HDD to be configured in ATA High Security Mode or '1' if you want HDD to be configured in ATA maximum Security Mode (Secure Erase). + + string + + string + + + + + + + + + + System.String + + + + + + You can pipe a string for the new value to Set-Item. + + "Locked" | Set-Item -Path DellSmbios:\Security\StrongPassword + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\Security\HDDPassword $NewPwd -ATAMaximumSecurityMode 1; + + + + This command sets the hard disk drive (HDD) password. Provide the ATA maximum security mode as '1' using -ATAMaximumSecurityMode parameter if you want HDD to be configured in maximum security mode (Secure Erase). Defaul value is '0' for -ATAMaximumSecurityMode paramaeter. When HDD password is set, it- + + * Restricts the configuration of admin password + * Changes the password successfully after the system restart + + + + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\Security\HDDPassowrd $NewPwd -Password $PlainTxtPwd -AdminPassword $AdminPwd; + + + + This command changes the HDD passowrd. Current value of the password is specified by the parameter -password. Provide the admin password by using -AdminPassword paramaeter if administrator has restricted the password changes. + + + + + + + + + + + + + -------------------------- EXAMPLE 3 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\Security\HDDPassword "" -PasswordSecure $SecurePwd; + + + + This command clears (or deletes) the HDD passowrd. An empty string is specified as the new value to clear the password. Current value of the secure password is specified by the parameter -passwordsecure. + + + + + + + + + + + + + + + + Online version: + http://dell.com/command + + + about_Providers + + + + Get-Item + + + + Set-Item + + + + + + + + + + + + + + Get-ChildItem + + + Gets the SMBIOS attribute setting of Dell Client BIOS. In the PowerManagement category, for PeakShiftDayConfiguration attribute, the Get-ChildItem cmdlet retrieves the Peakshift charge configurations on Dell Client systems. + + + + + Get + ChildItem + + + + +The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu.PeakShiftDayConfiguration attribute is available in PowerManagement category. In the PowerManagement category, for PeakShiftDayConfiguration attribute, the Get-ChildItem cmdlet retrieves the PeakShift charge StartTime, EndTime, and ChargeStartTime for all days on Dell Client systems. PeakShift minimizes the consumption of AC power during peak demand. AC power will not be consumed from PeakShift StartTime until PeakShift EndTime unless PeakShift Battery Threshold is reached. AC power will be consumed if available, from PeakShift EndTime until PeakShift ChargeStartTime; however the battery does not charge. For the rest of the time, AC power is consumed, if available, and the battery will charge. + + + + + + Get-ChildItem + + + + + + WhatIf + + Describes what would happen if you executed the command without actually executing the command. + + SwitchParameter + + SwitchParameter + + + + + + + + + + System.String[] + + + + + + You can pipe a string that contains a path (in quotation marks) to Get-Item. + + + + + + + System.Object + + + + + + The type of object that Get-ChildItem displays is determined by the objects in the provider drive path. + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\PowerManagement\PeakShiftDayConfiguration; + + + + Retrieves the PeakShiftDayConfiguration settings from the PowerManagement category. The StartTime, EndTime, and ChargeStartTime is displayed for all days. + + + + + + + + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\PowerManagement\PeakShiftDayConfiguration | Select Attribute, CurrentValue, PossibleValues; + + + + Retrieves the PossibleValues field that is not displayed in the default view. + + + + + + + + + + + + + + + + + Online version: + http://dell.com/command + + + about_Providers + + + + Get-Item + + + + + + + + + + + + Set-Item + + + Configures the SMBIOS attribute setting of Dell Client BIOS. PeakShiftDayConfiguration attribute is available in PowerManagement category. In the PowerManagement Category, for PeakShiftDayConfiguration attribute, the Set-Item cmdlet configures the peak shift charge settings for all days. + + + + + Set + Item + + + + + The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu. In this location i.e. Dellsmbios: drive, the Set-Item cmdlet configures the SMBIOS attributes on Dell Client systems. In the PowerManagement category, for the PeakShiftDayConfiguration attribute, the Set-Item cmdlet configures the peak shift StartTime, EndTime and ChargeStartTime for all days. PeakShift minimizes consumption of AC power during peak demand. AC power will not be consumed from PeakShift StartTime until PeakShift EndTime unless PeakShift Battery Threshold is reached. AC power will be consumed if available, from PeakShift EndTime until PeakShift ChargeStartTime; however the battery does not charge. For the rest of the time, AC power is consumed, if available, and the battery will charge. + + + + + + Set-Item + + + + + + StartTime + + Specifies the time when system starts consuming battery power. System will continue consuming the battery power till either peakshift battery threshold is reached or peakshift end time is reached. + + string + + string + + + + + + EndTime + + Specifies the time when system stops consuming battery power and starts consuming AC power, if available; however, the system does not charge battery. + + string + + string + + + + + + ChargeStartTime + + Specifies the time when the system starts charging battery while consuming AC power, if available. + + string + + string + + + + + + + + + + System.String + + + + + + + You can pipe a string for the new value to the Set-Item cmdlet. + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\PowerManagement\PeakShiftDayConfiguration Sunday -StartTime "12:45" -EndTime "14:30" -ChargeStartTime "16:15"; + + + + Configures the PeakShift charging StartTime, EndTime, and ChargeStartTime for Sunday. + + + + + + + + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\PowerManagement\PeakShiftDayConfiguration Monday -ChargeStartTime "14:30" -Password $PlainTxtPwd + + + + Configures the PeakShift charging StartTime for Sunday. PeakShift StartTime and EndTime remains the same as before. Provide the password, if set, using password parameter + + * Note: Similarly, only StartTime or EndTime can also be configured. + + + + + + + + + + + + + + + Online version: + http://dell.com/command + + + about_Providers + + + + Get-Item + + + + Set-Item + + + + + + + + + + + + + Get-ChildItem + + + Gets the Dell Client BIOS settings for the SMBIOS attribute. The Get-ChildItem cmdlet retrieves the advanced battery charge settings on Dell Client BIOS systems for AdvancedBatteryChargeConfiguration attribute in the PowerManagement category. + + + + + Get + ChildItem + + + + +The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu. AdvancedBatteryChargeConfiguration attribute is available in PowerManagement category. In the PowerManagement category, the Get-ChildItem cmdlet configures the Advanced Battery Charge BeginningOfDay time and WorkPeriod time duration for individual days using AdvancedBatteryChargeConfiguration attribute on Dell Client systems. +Advanced Battery charge mode uses standard charging algorithm and other methods during non-working hours to maximize battery health. During working hours, ExpressCharge is used to charge the batteries faster. You can configure the days and the time period using BeginningOfDay and WorkPeriod parameters during which the battery has to be charged. + + + + + + Get-ChildItem + + + + + + WhatIf + + Describes what would happen if you executed the command without actually executing the command. + + SwitchParameter + + SwitchParameter + + + + + + + + + + System.String[] + + + + + + You can pipe a string that contains a path (in quotation marks) to Get-Item. + + + + + + + System.Object + + + + + + The type of object that Get-ChildItem displays is determined by the objects in the provider drive path. + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\PowerManagement\AdvancedBatteryChargeConfiguration; + + + + Retrieves the Advance Battery Charge Day Configuration settings from the PowerManagement category. + + + + + + + + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\PowerManagement\AdvancedBatteryChargeConfiguration | Select Attribute, CurrentValue, PossibleValues; + + + + Retrieves the PossibleValues field that is not displayed in default view. + + + + + + + + + + + + + + + + + Online version: + http://dell.com/command + + + about_Providers + + + + Get-Item + + + + + + + + + + + + Set-Item + + + Configures the SMBIOS attribute setting of Dell Client BIOS. The Set-Item cmdlet configures the Advance Battery Charge settings on Dell Client BIOS systems for AdvancedBatteryChargeConfiguration attribute in the PowerManagement category. + + + + + Set + Item + + + + +The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu. The Set-Item cmdlet configures the SMBIOS attributes on Dell Client systems. AdvancedBatteryChargeConfiguration attribute is part of PowerManagement category. In the PowerManagement category, the Set-Item cmdlet configures the Advanced Battery charge BeginningOfDay time and WorkPeriod time duration for all days using AdvancedBatteryChargeConfiguration attribute on Dell Client systems. +Advanced Battery charge mode uses standard charging algorithm and other methods during non-working hours to maximize battery health. During working hours, ExpressCharge is used to charge the batteries faster. You can configure the days and the time period using BeginningOfDay and WorkPeriod parameters during which the battery has to be charged. + + + + + + Set-Item + + + + + + BeginningOfDay + + Specifies the start time when ExpressCharge will be used for charging the batteries faster. + + string + + string + + + + + + WorkPeriod + + Specifies the duration of time when ExpressCharge is used for charging the batteries faster. + + string + + string + + + + + + + + + + System.String + + + + + + + You can pipe a string for the new value to the Set-Item cmdlet. + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\PowerManagement\AdvancedBatteryChargeConfiguration Sunday -Beginningofday "12:45" -Workperiod "4:00"; + + + + Configures the Advance Battery charging start time (BeginningOfDay) and duration (WorkPeriod) for Sunday. + + + + + + + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\PowerManagement\AdvancedBatteryChargeConfiguration Monday -BeginningOfDay "14:30" -Password $PlainTxtPwd + + + + Configures the Advance Battery charge start time (BeginningOfDay) for Monday; retains the WorkPeriod value same as before. Provide the password, if set, using the password parameter. + + Note: Similarly, only WorkPeriod can also be configured. + + + + + + + + + + + + + + + Online version: + http://dell.com/command + + + about_Providers + + + + Get-Item + + + + Set-Item + + + + + + + + + + + + + Get-ChildItem + + + Gets the SMBIOS attribute setting of Dell Client BIOS. In the PowerManagement category, for an AutoOn attribute, the Get-ChildItem cmdlet retrieves the Auto On settings on Dell Client BIOS systems. + + + + + Get + ChildItem + + + + + The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu. AutoOn attribute is available in PowerManagement category. In the PowerManagement category, for an AutoOn attribute, the Get-ChildItem cmdlet retrieves the AutoOn days when system will turn on automatically on a time specified by AutoOnHour and AutoOnMinute attributes. Possible values for an AutoOn attribute are 'Disabled', 'Weekdays', 'Every Day', and 'Select Days'. If the Get-ChildItem cmdlet retrieves the value as 'Select Days', then use the Get-ChildItem cmdlet on attributes AutoOnSunday, AutoOnMonday, etc. to know which days are enabled or disabled. + + + + + + Get-ChildItem + + + + + + WhatIf + + Describes what would happen if you executed the command without actually executing the command. + + SwitchParameter + + SwitchParameter + + + + + + + + + + System.String[] + + + + + + You can pipe a string that contains a path (in quotation marks) to Get-Item. + + + + + + + System.Object + + + + + + The type of object that Get-ChildItem displays is determined by the objects in the provider drive path. + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\PowerManagement\AutoOn; + + + + Retrieves the status of the AutoOn attribute. It can be any one of the following: 'Disabled', 'Weekdays', 'EveryDay', or 'SelectDays' . + + * If the status retrieved as 'SelectDays', then to know which days are enabled or disabled, retrieve AutoOnSun, AutoOnMon, etc. + + + + + + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\PowerManagement\AutoOn | Select Attribute, CurrentValue, PossibleValues; + + + + Retrieves the PossibleValues field that is not displayed in the default view. + + + + + + + + + + + + + + + + + Online version: + http://dell.com/command + + + about_Providers + + + + Get-Item + + + + + + + + + + + + Set-Item + + + Configures the SMBIOS attribute setting of Dell Client BIOS. In the PowerManagement category, the Set-Item cmdlet configures the AutoOn settings using AutoOn attribute on Dell Client BIOS systems. + + + + + Set + Item + + + + +The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu. In this location, i.e. in Dellsmbios: drive, the Set-Item cmdlet configures the SMBIOS attributes on Dell Client systems. AutoOn attribute is available in PowerManagement category. In the PowerManagement category, for an AutoOn attribute, the Set-Item cmdlet configures the AutoOn days when the system will turn on automatically on a time specified by AutoOnHr and AutoOnMn attributes. Possible values for an AutoOn attribute are 'Disabled', 'Weekdays', 'EveryDay', and 'SelectDays'. To turn on the system on a particular days, set AutoOn as 'SelectDays' and then enable or disable individual days by configuring AutoOnSun, AutoOnMon… etc. + + + + + + Set-Item + + + + + + + + + + + + System.String + + + + + + + You can pipe a string for the new value to the Set-Item cmdlet. + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\PowerManagement\AutoOn "Weekdays" –Password $PlainTxtPwd; + + + + Sets the AutoOn attribute to turn on the system automatically on weekdays at a particular time specified by AutoOnHr and AutoOnMn attributes. Provide the password, if set, using the password parameter. + + + + + + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\PowerManagement\AutoOn "SelectDays"; + + + + Sets the AutoOn attribute to turn on the system automatically on selected days at a particular time specified by AutoOnHr and AutoOnMn attributes. If 'SelectDays' value is chosen, + + * Seven other attributes such as AutoOnSun, AutoOnMon to AutoOnSat will be available in the PowerManagement category. + * Individual days can be enabled or disabled. + * C:\PS>Set-Item -Path DellSmbios:\PowerManagement\AutoOnSun enabled command can be used to turn on the system on Sunday. + * C:\PS>Set-Item -Path DellSmbios:\PowerManagement\AutoOnTue disabled command can be used to disable the turning on the system on Tuesday. + + + + + + + + + + + + Online version: + http://dell.com/command + + + about_Providers + + + + Get-Item + + + + Set-Item + + + + + + + + + + + + Get-ChildItem + + + Gets the SMBIOS attribute setting of Dell Client BIOS. The Get-Item cmdlet retrieves the Primary Battery Charge Configuration settings on Dell Client BIOS systems for PrimaryBattChargeCfg attribute in the PowerManagement category. + + + + + Get + ChildItem + + + + +The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu. PrimaryBattChargeCfg attribute is available in PowerManagement category. In the PowerManagement category, for a PrimaryBattChargeCfg attribute, the Get-ChildItem cmdlet retrieves the primary battery charging mode. Possible values for PrimaryBattChargeCfg attribute are 'Adaptive', 'Standard', 'PrimAcUse', 'Express', and 'Custom'. If the Get-ChildItem cmdlet retrieves the value as 'Custom', then use the Get-ChildItem cmdlet on attributes CustomChargeStart and CustomChargeStop to know the percentage when charging should start and the percentage when charging should end. + + + + + + Get-ChildItem + + + + + + WhatIf + + Describes what would happen if you executed the command without actually executing the command. + + SwitchParameter + + SwitchParameter + + + + + + + + + + System.String[] + + + + + + You can pipe a string that contains a path (in quotation marks) to Get-Item. + + + + + + + System.Object + + + + + + The type of object that Get-ChildItem displays is determined by the objects in the provider drive path. + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\PowerManagement\PrimaryBattChargeCfg; + + + + Retrieves the mode of PrimaryBattChargeCfg attribute. It can be any one of the following: 'Adaptive', 'Express', 'PrimAcUse', 'Standard' or 'Custom'. + + * If the status retrieved as 'Custom', then to know the percentage when charging will start and end, retrieve CustomChargeStart and CustomChargeStop attributes. + + + + + + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\PowerManagement\PrimaryBattChargeCfg | Select Attribute, CurrentValue, PossibleValues; + + + + Retrieves the PossibleValues field that is not displayed in the default view. + + + + + + + + + + + + + + + + + Online version: + http://dell.com/command + + + about_Providers + + + + Get-Item + + + + + + + + + + + + Set-Item + + + Configures the SMBIOS attribute setting of Dell Client BIOS. In the PowerManagement category, the Set-Item cmdlet configures the primary battery charging mode using PrimaryBattChargeCfg attribute on Dell Client BIOS systems. + + + + + Set + Item + + + + +The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu. In this location, i.e. in Dellsmbios: drive, the Set-Item cmdlet configures the SMBIOS attributes on Dell Client systems. PrimaryBattChargeCfg attribute is available in PowerManagement category. In the PowerManagement category, for a PrimaryBattChargeCfg attribute, the Set-Item cmdlet configures the Primary Battery Charging mode. The selected charging mode applies to all batteries installed in the system. Possible values for PrimaryBattChargeCfg attribute are 'Standard', 'Adaptive', 'PrimAcUse', 'Express' and 'Custom'. To charge battery based on user settings, set PrimaryBattChargeCfg as 'Custom' and then configure the CustomChargeStart attribute as battery percentage when charging should start and CustomChargeStop attribute as battery percentage when charging should end. + + + + + + Set-Item + + + + + + + + + + + + System.String + + + + + + + You can pipe a string for the new value to the Set-Item cmdlet. + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\PowerManagement\PrimaryBattChargeCfg "Adaptive" –PasswordSecure $SecureTxtPwd; + + + + Sets the PrimaryBattChargeCfg attribute to charge battery by adaptively optimized settings based on your typical battery usage pattern. Provide the password, if set, using the password parameter. + + + + + + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\PowerManagement\PrimaryBattChargeCfg "Custom"; + + + + Sets the PrimaryBattChargeCfg attribute to charge battery based on user settings specified in CustomChargeStart and CustomChargeStop attributes. If the value 'Custom' is chosen, + + * Charging starts based on the battery percentage defined in CustomChargeStart. + * Charging ends based on the battery percentage defined in CustomChargeStop. + * C:\PS>Set-Item -Path DellSmbios:\PowerManagement\CustomChargeStart 65 command can be used to start battery charging at 65% + * C:\PS>Set-Item -Path DellSmbios:\PowerManagement\CustomChargeStart 95 command can be used to stop battery charging at 95% + * Possible value for CustomChargeStart percentage must be ranging from 50 to 95 and for CustomChargeStop percentage must be ranging from 55 to 100. + * CustomChargeStart percentage must be less than CustomChargeStop and minimum difference between CustomChargeStop and CustomChargeStart should be 5. + + + + + + + + + + + + + Online version: + http://dell.com/command + + + about_Providers + + + + Get-Item + + + + Set-Item + + + + + + + + + + + + + Get-ChildItem + + + Gets the SMBIOS attribute setting of Dell Client BIOS. The Get-Item cmdlet retrieves the enabled colors for keyboard backlight on Dell Client BIOS rugged systems using KeyboardBacklightEnabledColors attribute in the SystemConfiguration category. + + + + + Get + ChildItem + + + + +The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu. KeyboardBacklightEnabledColors attribute is available in SystemConfiguration category. In the SystemConfiguration category, for a KeyboardBacklightEnabledColors attribute, the Get-ChildItem cmdlet retrieves the list of enabled colors for keyboard backlight. There are six available colors: four predefined colors (white, red, green, blue), and two user configurable colors (custom1, and custom2). Multiple colors out of the six colors will be retrieved as enabled colors. You can switch among the enabled colors by pressing <Fn+C> keys. If Enabled colors is retrieved as 'NoColor' that means no color is selected. NOTE: If value 'NoColor' is retrieved, keyboard backlight color switching by pressing <Fn+C> keys will not be possible. + + + + + + Get-ChildItem + + + + + + WhatIf + + Describes what would happen if you executed the command without actually executing the command. + + SwitchParameter + + SwitchParameter + + + + + + + + + + System.String[] + + + + + + You can pipe a string that contains a path (in quotation marks) to Get-Item. + + + + + + + System.Object + + + + + + The type of object that Get-ChildItem displays is determined by the objects in the provider drive path. + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\SystemConfiguration\KeyboardBacklightEnabledColors; + + + + Retrieves the list of enabled colors of KeyboardBacklightEnabledColors attribute. It can be a combination of the following colors: 'White', 'Red', 'Green', 'Blue', 'Custom1' and 'Custom2'. It can also be 'NoColor' if none of the other colors is selected. + + + + + + + + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\SystemConfiguration\KeyboardBacklightEnabledColors | Select Attribute, CurrentValue, PossibleValues; + + + + Retrieves the PossibleValues field that is not displayed in the default view. + + + + + + + + + + + + + + + + + Online version: + http://dell.com/command + + + about_Providers + + + + Get-Item + + + + + + + + + + + + Set-Item + + + Configures the SMBIOS attribute setting of Dell Client BIOS. In the SystemConfiguration category, the Set-Item cmdlet configures the colors to be enabled for keyboard backlight using KeyboardBacklightEnabledColors attribute on Dell Client BIOS rugged systems. + + + + + Set + Item + + + + +The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu. In this location, i.e. in Dellsmbios: drive, the Set-Item cmdlet configures the SMBIOS attributes on Dell Client systems. KeyboardBacklightEnabledColors attribute is available in SystemConfiguration category. In the SystemConfiguration category, for a KeyboardBacklightEnabledColors attribute, the Set-Item cmdlet configures the list of enabled colors for keyboard backlight. There are six available colors: four predefined colors (white, red, green, blue), and two user configurable colors (custom1, and custom2). Multiple colors out of the six colors can be configured as enabled colors. After enabling colors, you can switch among the enabled colors by pressing <Fn+C> keys. Enabled colors can be configured as 'NoColor' that means no color is selected. NOTE: If value 'NoColor' is provided, keyboard backlight color switching by pressing <Fn+C> keys will not be possible. The value 'NoColor' cannot be combined with any other color. + + + + + + Set-Item + + + + + + + + + + + + System.String + + + + + + + You can pipe a string for the new value to the Set-Item cmdlet. + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\SystemConfiguration\KeyboardBacklightEnabledColors "Red,Green,Custom1,Custom2" –PasswordSecure $SecureTxtPwd; + + + + Sets the list of enabled colors as red, green, custom1, and custom2 for KeyboardBacklightEnabledColors attribute. Provide the secure password, if set, using the passwordsecure parameter. + + + + + + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\SystemConfiguration\KeyboardBacklightEnabledColors "NoColor" -passowrd $PlainTxtPwd; + + + + Sets the enabled colors as NoColor for KeyboardBacklightEnabledColors attribute. Provide the password, if set, using the password parameter + + * 'NoColor' can not be combined with any other color. + * It disables the <Fn+C> key switching between enabled colors. + + + + + + + + + + + + + Online version: + http://dell.com/command + + + about_Providers + + + + Get-Item + + + + Set-Item + + + + + + + + + + + + Get-ChildItem + + + Gets the SMBIOS attribute setting of Dell Client BIOS. The Get-Item cmdlet retrieves the active color for keyboard backlight on Dell Client BIOS rugged systems using KeyboardBacklightActiveColor attribute in the SystemConfiguration category. + + + + + Get + ChildItem + + + + +The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu. KeyboardBacklightActiveColor attribute is available in SystemConfiguration category. In the SystemConfiguration category, for a KeyboardBacklightActiveColor attribute, the Get-ChildItem cmdlet retrieves the active color for keyboard backlight. There are six available colors: four predefined colors (white, red, green, blue), and two user configurable colors (custom1, and custom2). Active color indicates the color to be used on startup. Any one color out of the six colors will be retrieved as active color. + + + + + + Get-ChildItem + + + + + + WhatIf + + Describes what would happen if you executed the command without actually executing the command. + + SwitchParameter + + SwitchParameter + + + + + + + + + + System.String[] + + + + + + You can pipe a string that contains a path (in quotation marks) to Get-Item. + + + + + + + System.Object + + + + + + The type of object that Get-ChildItem displays is determined by the objects in the provider drive path. + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\SystemConfiguration\KeyboardBacklightActiveColor; + + + + Retrieves the active color for the Keyboard backlight. It can be any one of the following colors: 'White', 'Red', 'Green', 'Blue', 'Custom1', or 'Custom2'. + + + + + + + + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\SystemConfiguration\KeyboardBacklightActiveColor | Select Attribute, CurrentValue, PossibleValues; + + + + Retrieves the PossibleValues field that is not displayed in the default view. + + + + + + + + + + + + + + + + + Online version: + http://dell.com/command + + + about_Providers + + + + Get-Item + + + + + + + + + + + + Set-Item + + + Configures the SMBIOS attribute setting of Dell Client BIOS. In the SystemConfiguration category, the Set-Item cmdlet configures the color to be active for keyboard backlight using KeyboardBacklightActiveColor attribute on Dell Client BIOS rugged systems. + + + + + Set + Item + + + + +The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu. In this location, i.e. in Dellsmbios: drive, the Set-Item cmdlet configures the SMBIOS attributes on Dell Client systems. KeyboardBacklightActiveColor attribute is available in SystemConfiguration category. In the SystemConfiguration category, for a KeyboardBacklightActiveColor attribute, the Set-Item cmdlet configures the active color for keyboard backlight. There are six available colors: four predefined colors (white, red, green, blue), and two user configurable colors (custom1, and custom2). Active color indicates the color to be used on startup. Any one of the six colors can be configured as active color. + + + + + + Set-Item + + + + + + + + + + + + System.String + + + + + + + You can pipe a string for the new value to the Set-Item cmdlet. + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\SystemConfiguration\KeyboardBacklightActiveColor "Custom2" –PasswordSecure $SecureTxtPwd; + + + + Sets the custom2 color as an active color for KeyboardBacklightActiveColor attribute. Provide the secure password, if set, using the secure password parameter. + + + + + + + + + + + + + + + Online version: + http://dell.com/command + + + about_Providers + + + + Get-Item + + + + Set-Item + + + + + + + + + + + + Get-ChildItem + + + Gets the SMBIOS attribute setting of Dell Client BIOS. The Get-Item cmdlet retrieves the RGB values of Custom1 color for keyboard backlight on Dell Client BIOS rugged systems using KeyboardBacklightCustom1Color attribute in the SystemConfiguration category. + + + + + Get + ChildItem + + + + +The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu. KeyboardBacklightCustom1Color attribute is available in SystemConfiguration category. In the SystemConfiguration category, for a KeyboardBacklightCustom1Color attribute, the Get-ChildItem cmdlet retrieves the RGB value in R:G:B format of Custom1 color for keyboard backlight. + + + + + + Get-ChildItem + + + + + + WhatIf + + Describes what would happen if you executed the command without actually executing the command. + + SwitchParameter + + SwitchParameter + + + + + + + + + + System.String[] + + + + + + You can pipe a string that contains a path (in quotation marks) to Get-Item. + + + + + + + System.Object + + + + + + The type of object that Get-ChildItem displays is determined by the objects in the provider drive path. + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\SystemConfiguration\KeyboardBacklightCustom1Color; + + + + Retrieves the RGB value in R:G:B format of Custom1 color for Keyboard backlight. + + + + + + + + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\SystemConfiguration\KeyboardBacklightCustom1Color | Select Attribute, CurrentValue, PossibleValues; + + + + Retrieves the PossibleValues field that is not displayed in the default view. + + + + + + + + + + + + + + + + + Online version: + http://dell.com/command + + + about_Providers + + + + Get-Item + + + + + + + + + + + + Set-Item + + + Configures the SMBIOS attribute setting of Dell Client BIOS. In the SystemConfiguration category, the Set-Item cmdlet configures the RGB value for Custom1 Color for keyboard backlight using KeyboardBacklightCustom1Color attribute on Dell Client BIOS rugged systems. + + + + + Set + Item + + + + +The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu. In this location, i.e. in Dellsmbios: drive, the Set-Item cmdlet configures the SMBIOS attributes on Dell Client systems. KeyboardBacklightCustom1Color attribute is available in SystemConfiguration category. In the SystemConfiguration category, for a KeyboardBacklightCustom1Color attribute, the Set-Item cmdlet configures the RGB value in R:G:B format of Custom1 color for keyboard backlight. + + + + + + Set-Item + + + + + + + + + + + + System.String + + + + + + + You can pipe a string for the new value to the Set-Item cmdlet. + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\SystemConfiguration\KeyboardBacklightCustom1Color "234:35:56" –PasswordSecure $SecureTxtPwd; + + + + Sets the red as 234, green as 35 and blue as 56 for Custom1 color using KeyboardBacklightCustom1Color attribute. Provide the secure password, if set, using the secure password parameter. + + + + + + + + + + + + + + + Online version: + http://dell.com/command + + + about_Providers + + + + Get-Item + + + + Set-Item + + + + + + + + + + + + Get-ChildItem + + + Gets the SMBIOS attribute setting of Dell Client BIOS. The Get-Item cmdlet retrieves the RGB values of Custom2 color for keyboard backlight on Dell Client BIOS rugged systems using KeyboardBacklightCustom2Color attribute in the SystemConfiguration category. + + + + + Get + ChildItem + + + + +The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu. KeyboardBacklightCustom2Color attribute is available in SystemConfiguration category. In the SystemConfiguration category, for a KeyboardBacklightCustom2Color attribute, the Get-ChildItem cmdlet retrieves the RGB value in R:G:B format of Custom2 color for keyboard backlight. + + + + + + Get-ChildItem + + + + + + WhatIf + + Describes what would happen if you executed the command without actually executing the command. + + SwitchParameter + + SwitchParameter + + + + + + + + + + System.String[] + + + + + + You can pipe a string that contains a path (in quotation marks) to Get-Item. + + + + + + + System.Object + + + + + + The type of object that Get-ChildItem displays is determined by the objects in the provider drive path. + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\SystemConfiguration\KeyboardBacklightCustom2Color; + + + + Retrieves the RGB value in R:G:B format of Custom2 color for Keyboard backlight. + + + + + + + + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\SystemConfiguration\KeyboardBacklightCustom2Color | Select Attribute, CurrentValue, PossibleValues; + + + + Retrieves the PossibleValues field that is not displayed in the default view. + + + + + + + + + + + + + + + + + Online version: + http://dell.com/command + + + about_Providers + + + + Get-Item + + + + + + + + + + + + Set-Item + + + Configures the SMBIOS attribute setting of Dell Client BIOS. In the SystemConfiguration category, the Set-Item cmdlet configures the RGB value for Custom2 Color for keyboard backlight using KeyboardBacklightCustom2Color attribute on Dell Client BIOS rugged systems. + + + + + Set + Item + + + + +The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu. In this location, i.e. in Dellsmbios: drive, the Set-Item cmdlet configures the SMBIOS attributes on Dell Client systems. KeyboardBacklightCustom2Color attribute is available in SystemConfiguration category. In the SystemConfiguration category, for a KeyboardBacklightCustom2Color attribute, the Set-Item cmdlet configures the RGB value in R:G:B format of Custom2 color for keyboard backlight. + + + + + + Set-Item + + + + + + + + + + + + System.String + + + + + + + You can pipe a string for the new value to the Set-Item cmdlet. + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\SystemConfiguration\KeyboardBacklightCustom2Color "234:35:56" –PasswordSecure $SecureTxtPwd; + + + + Sets the red as 234, green as 35 and blue as 56 for Custom2 color using KeyboardBacklightCustom2Color attribute. Provide the secure password, if set, using the secure password parameter. + + + + + + + + + + + + + + + Online version: + http://dell.com/command + + + about_Providers + + + + Get-Item + + + + Set-Item + + + + + + + + + + + + + Get-ChildItem + + + Gets the Dell Client BIOS attributes. + + + + + Get + ChildItem + + + + +The default location for Dell Command BIOS provider is DellSmbios: drive that represents the F2 setup menu. In this location, i.e. in Dellsmbios: drive, the Get-ChildItem cmdlet retrieves the SMBIOS attributes on Dell Client systems. +In the BootSequence category, you can get the current boot sequence and boot mode. + + + + + + Get-ChildItem + + password + + + Specifies the Setup password or System passowrd. + + + string + + + + + + + WhatIf + + Describes what would happen if you executed the command without actually executing the command. + + SwitchParameter + + SwitchParameter + + + + + + + + + + System.String[] + + + + + + You can pipe a string that contains a path (in quotation marks) to Get-ChildItem. + + + + + + + System.Object + + + + + + The type of object that Get-ChildItem displays is determined by the objects in the provider drive path. + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\BootSequence\BootSequence | Select-Object -expand CurrentValue; + + + + This command retrieves the order of the boot devices. + + + + + + + + + + + + + + + Online version: + http://en.community.dell.com/techcenter/enterprise-client/w/wiki/6901.dell-command-powershell-provider + + + about_Providers + + + + Get-Item + + + + Set-Item + + + + + + + + + + + + Set-Item + + + Configures the Dell Client BIOS attributes. + + + + + Set + Item + + + + + The Set-Item cmdlet configures the SMBIOS attributes on Dell Client systems in the drive DellSmbios:. +In the BootSequence directory, you can use the Set-Item cmdlet to configute the boot mode and boot sequence. + + + + + + Set-Item + + password + + + Specifies the Setup password or System passowrd. + + + string + + + + + + + + + + + + + System.String + + + + + + + You can pipe a string for the new value to the Set-Item cmdlet. + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\BootSequence\BootSequence "2,3,4" -Password $PlainTxtPwd; + + + + This command changes the boot sequence of the boot devices to an hypothetical order 2,3,4. Each number in the order is the device number of the boot device. To find the current boot order with name, device number,short form and Active/Inactive state, you can execute the Get-ChildItem in BootSequence directory. + + + + + + + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\BootSequence\BootSequence "hdd,cdrom,embnicipv4,embnicipv6" -Password $PlainTxtPwd; + + + + This command changes the boot sequence of the boot devices to an hypothetical order hdd,cdrom,embnicipv4,embnicipv6. Each device name in the order is the short form of the boot device. To find the current boot order with name, device number, short form and Active/Inactive state, you can execute the Get-ChildItem in BootSequence directory. + + + + + + + + + + + + + + -------------------------- EXAMPLE 3 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\BootSequence\BootList Uefi -Password $PlainTxtPwd; + + + + This command changes the current boot mode to Uefi. Supply the password, if set, through the -Password parameter. + + + + + + + + + + + + + + + + + Online version: + http://en.community.dell.com/techcenter/enterprise-client/w/wiki/6901.dell-command-powershell-provider + + + about_Providers + + + + Get-Item + + + + Set-Item + + + + + + + + + + + + Get-ChildItem + + + Gets the Dell Client BIOS attributes. + + + + + Get + ChildItem + + + + + Get-ChildItem cmdlet retrieves the SMBIOS attributes on Dell Client systems in DellSmbios: drive which represents the F2 Setup menu. +TPMSecurity directory represents the BIOS Setup menu for the TPM. + + + + + + + Get-ChildItem + + password + + + Specifies the Setup password or System passowrd. + + + string + + + + + + + WhatIf + + Describes what would happen if you executed the command without actually executing the command. + + SwitchParameter + + SwitchParameter + + + + + + + + + + System.String[] + + + + + + + You can pipe a string that contains a path (in quotation marks) to Get-ChildItem. + + + + + + + + System.Object + + + + + + The type of object that Get-ChildItem displays is determined by the objects in the provider drive path. + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\TPMSecurity; + + + + This command retrieves the TPM related all attributes from the category TPMSecurity. + + + + + + + + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\TPMSecurity\TPMSecurity; + + + + This command retrieves the BIOS Setup setting "TPMSecurity" for the TPM. The "TPMSecurity" setting is a master switch for all the rest of the TPM fields. + + System restart is required after changing the TPMSecurity setting. + + + + + + + + + + + + -------------------------- EXAMPLE 3 -------------------------- + + + C:\PS> + + + Get-ChildItem -Path DellSmbios:\TPMSecurity\TpmActivation | select Attribute, CurrentValue, PossibleValues; + + + + "TpmActivation" is a setting which is available when the "TPMSecurity" is enabled. 'Deactive' is the default value of the 'TpmActivation' after enabling the 'TPMSecurity'. Other values are 'Activate'. 'Activate' activates and enable the TPM. + + System restart is required after changing the TPMSecurity setting. + + + + + + + + + + + + + + Online version: + http://en.community.dell.com/techcenter/enterprise-client/w/wiki/6901.dell-command-powershell-provider + + + about_Providers + + + + Get-Item + + + + Set-Item + + + + + + + + + + + + Set-Item + + + + The Set-Item cmdlet configures the SMBIOS attributes on Dell Client systems in the drive DellSmbios:. +In the TPMSecurity directory, you can use the Set-Item cmdlet to configure the TPM related settings. + + + + + + Set + Item + + + + + The Set-Item cmdlet configures the SMBIOS attributes on Dell Client systems. +In the TPMSecurity category, you can use the Set-Item comdlet to configure a TPM related SMBIOS attribute. + + + + + + Set-Item + + Password + + Specifies the Admin password or System password which needs to be supplied to change the setting of an attribute. + + string + + + + + + + + + + + + + System.String + + + + + + + You can pipe a value for the new setting to the Set-Item cmdlet. + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\TPMSecurity\TPMSecurity Enabled -Password $PlainTxtPwd; + + + + This command configures the 'TPMSecurity' attribute to be enabled. Please note that system restart is required after changing 'TPMSecurity' setting. If a Admin or System password is set, specify it using the parameter -Password. + + + + + + + + + + + + + -------------------------- EXAMPLE 2 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\TPMSecurity\TpmActivation Activate -Password $PlainTxtPwd; + + + + This command configures the 'TpmActivation' setting to 'Activate'. "TpmActivation" is a setting which is offered when the "TPMSecurity" is enabled. “Activate” will activate and enable the TPM—normal state for TPM use. + + Please note that Admin password must be installed and 'TPMSecurity' should have been enabled to activate the 'TpmActivation'. + + + + + + + + + + + + + + + Online version: + http://en.community.dell.com/techcenter/enterprise-client/w/wiki/6901.dell-command-powershell-provider + + + about_Providers + + + + Get-Item + + + + Set-Item + + + + + + + + + + + + Set-Item + + + + The Set-Item cmdlet configures the SMBIOS attributes on Dell Client systems in the drive DellSmbios:. +In the SecureBoot directory, you can use the Set-Item cmdlet to enable the 'Secure Boot'. + + + + + + Set + Item + + + + + The Set-Item cmdlet configures the SMBIOS attributes on Dell Client systems. +In the 'SecureBoot' category, you can use the Set-Item comdlet to Enable the Secure Boot. +Note that this tool can not disable the Secure Boot. + + + + + Set-Item + + Password + + Specifies the Admin password or System password which needs to be supplied to change the setting of an attribute. + + string + + + + + + + + + + + + + System.String + + + + + + + You can pipe a value for the new setting to the Set-Item cmdlet. + + + + + + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + -------------------------- EXAMPLE 1 -------------------------- + + + C:\PS> + + + Set-Item -Path DellSmbios:\SecureBoot\SecureBoot Enabled -Password $PlainTxtPwd; + + + + This command enables the 'Secure Boot' field. Specify the password, if set, using the -Password parameter. Note that in order to enable Secure Boot, the system must be using a UEFI Boot Path and the “Enable Legacy Option ROMs" feature must be turned off; i.e. Secure Boot requires that there be no legacy-style option ROMs loaded by the BIOS. + + + + + + + + + + + + + + + Online version: + http://en.community.dell.com/techcenter/enterprise-client/w/wiki/6901.dell-command-powershell-provider + + + about_Providers + + + + Get-Item + + + + Set-Item + + + + + + + + \ No newline at end of file diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/en-US/about_DellBIOSProvider.help.txt b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/en-US/about_DellBIOSProvider.help.txt new file mode 100644 index 0000000..550cd6f --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/en-US/about_DellBIOSProvider.help.txt @@ -0,0 +1,271 @@ +TOPIC + about_DellBIOSProvider + +SHORT DESCRIPTION + The Dell Command PowerShell Provider (DCPP) provides BIOS reporting and + configuration capability on Dell Optiplex, Latitude, Precision, and + Venue 11 systems using PowerShell. + +LONG DESCRIPTION + This is a PowerShell provider for configuring the SMBIOS on Dell Business + Client systems. Dell SMBIOS Provider works on the F2 (Setup) hierarchy + and use the same strings as in F2 setup menu. + + Dell Command PowerShell provider is built for PowerShell 3.0. + If the system is running PowerShell 2.0, update it to 3.0. + You can download PowerShell 3.0 from the following link: + http://www.microsoft.com/en-us/download/details.aspx?id=34595 + +DRIVES + DellSmbios: + +NEW FEATURES + DCPP 2.7.0 includes the following new features. + -- New BIOS Features/Attributes + -- New Category for BIOS Features/Attributes + +RUNTIME REQUIREMENTS + 1. PowerShell 3.0 or later + 2. Administrator access + 3. Visual C++ runtime libraries for VS2010 and VS2015 + +WHAT IS SUPPORTED IN THE PROVIDER + -- Navigation via cd and dir commands + -- Reporting and Configuration of Dell Client BIOS attributes + -- The attributes that are not supported on the system, are not reported. + -- You can set, modify or clear BIOS administrator, BIOS system and HDD password. + -- TPM settings + -- Service tag, Asset Tag + -- BootSequence + -- SecureBoot ( This attribute does not support disable option) + -- Case insensitive no-space strings for category, attribute and current + value to set + -- Showing Unsupported Possible Values for BIOS features on particular platform + +WHAT IS NOT SUPPORTED + -- Boot Sequence operations on UEFI incapable system like old generation Optiplex. + +NOTES + + +INSTALLATION + Perform the following steps: + 1. Copy the downloaded zip file to the system. + 2. Follow Install-instructions.txt and Load-DellBIOSProvider.ps1 to + load the DellBIOSProvider module appropriately. + +GENERIC SYNTAX OF THE CMD-LETS + -- cd + -- Dir + -- Set-Item -value -password + -- Get-Item . + +EXAMPLES + -- cd DellSmbios: + -- cd DellSmbios:\SystemConfiguration + -- dir . + -- dir DellSmbios:\SystemConfiguration + -- dir -path DellSmbios:\SystemConfiguration\Serial1 + -- dir -path DellSmbios: | select category, desc + -- dir -path DellSmbios:\SystemConfiguration| select attribute, + currentvalue, possiblevalues + -- set-item -path DellSmbios:\SystemConfiguration\Serial1 -value COM2 + -password $PlainTxtPwd + -- dir DellSmbios:\SystemConfiguration\EmbNic1 | select + -expandproperty possiblevalues + +INTEGRATED HELP + -- Get-Help About_DellBIOSProvider + -- Get-Help DellBIOSProvider + -- Get-Help DellSmbiosProv + -- Get-Help DellSmbios + + -- Get-Help Get-ChildItem -Path DellSmbios:\Security -full + -- Get-Help Set-Item -Path DellSmbios:\Security -Examples + + -- Get-Help Set-Item -Path DellSmbios:\Security\HDDPassword -Full + + -- Get-Help Get-ChildItem -Path DellSmbios:\PowerManagement\PeakShiftDayConfiguration -full; + -- Get-Help Get-ChildItem -Path DellSmbios:\PowerManagement\PeakShiftDayConfiguration -Examples; + -- Get-Help Set-Item -Path DellSmbios:\PowerManagement\PeakShiftDayConfiguration -full; + -- Get-Help Set-Item -Path DellSmbios:\PowerManagement\PeakShiftDayConfiguration -Examples; + -- Get-Help Set-Item -Path DellSmbios:\PowerManagement\PeakShiftDayConfiguration -Parameter StartTime; + -- Get-Help Set-Item -Path DellSmbios:\PowerManagement\PeakShiftDayConfiguration -Parameter EndTime; + -- Get-Help Set-Item -Path DellSmbios:\PowerManagement\PeakShiftDayConfiguration -Parameter ChargeStartTime; + + -- Get-Help Get-ChildItem -Path DellSmbios:\PowerManagement\AdvancedBatteryChargeConfiguration -Examples; + -- Get-Help Set-Item -Path DellSmbios:\PowerManagement\AdvancedBatteryChargeConfiguration -full; + -- Get-Help Set-Item -Path DellSmbios:\PowerManagement\AdvancedBatteryChargeConfiguration -Parameter BeginningOfDay; + -- Get-Help Set-Item -Path DellSmbios:\PowerManagement\AdvancedBatteryChargeConfiguration -Parameter WorkPeriod; + -- Get-Help Set-Item -Path DellSmbios:\PowerManagement\AdvancedBatteryChargeConfiguration -Examples; + + -- Get-Help Get-ChildItem -Path DellSmbios:\PowerManagement\AutoOn -Examples; + -- Get-Help Get-ChildItem -Path DellSmbios:\PowerManagement\AutoOn -full; + -- Get-Help Set-Item -Path DellSmbios:\PowerManagement\AutoOn -Examples; + -- Get-Help Set-Item -Path DellSmbios:\PowerManagement\AutoOn -full; + + -- Get-Help Get-ChildItem -Path DellSmbios:\PowerManagement\PrimaryBattChargeCfg -full; + -- Get-Help Get-ChildItem -Path DellSmbios:\PowerManagement\PrimaryBattChargeCfg -Examples; + -- Get-Help Set-Item -Path DellSmbios:\PowerManagement\PrimaryBattChargeCfg -Examples; + -- Get-Help Set-Item -Path DellSmbios:\PowerManagement\PrimaryBattChargeCfg -full; + + -- Get-Help Get-ChildItem -Path DellSmbios:\SystemConfiguration\KeyboardBacklightActiveColor -full; + -- Get-Help Get-ChildItem -Path DellSmbios:\SystemConfiguration\KeyboardBacklightActiveColor -Examples; + -- Get-Help Set-Item -Path DellSmbios:\SystemConfiguration\KeyboardBacklightActiveColor -Examples; + -- Get-Help Set-Item -Path DellSmbios:\SystemConfiguration\KeyboardBacklightActiveColor -full; + + -- Get-Help Get-ChildItem -Path DellSmbios:\SystemConfiguration\KeyboardBacklightEnabledColors -full; + -- Get-Help Get-ChildItem -Path DellSmbios:\SystemConfiguration\KeyboardBacklightEnabledColors -Examples; + -- Get-Help Set-Item -Path DellSmbios:\SystemConfiguration\KeyboardBacklightEnabledColors -Examples; + -- Get-Help Set-Item -Path DellSmbios:\SystemConfiguration\KeyboardBacklightEnabledColors -full; + + -- Get-Help Get-ChildItem -Path DellSmbios:\SystemConfiguration\KeyboardBacklightCustom1Color -full; + -- Get-Help Get-ChildItem -Path DellSmbios:\SystemConfiguration\KeyboardBacklightCustom1Color -Examples; + -- Get-Help Set-Item -Path DellSmbios:\SystemConfiguration\KeyboardBacklightCustom1Color -Examples; + -- Get-Help Set-Item -Path DellSmbios:\SystemConfiguration\KeyboardBacklightCustom1Color -full; + + -- Get-Help Get-ChildItem -Path DellSmbios:\SystemConfiguration\KeyboardBacklightCustom2Color -full; + -- Get-Help Get-ChildItem -Path DellSmbios:\SystemConfiguration\KeyboardBacklightCustom2Color -Examples; + -- Get-Help Set-Item -Path DellSmbios:\SystemConfiguration\KeyboardBacklightCustom2Color -Examples; + -- Get-Help Set-Item -Path DellSmbios:\SystemConfiguration\KeyboardBacklightCustom2Color -full; + + -- Get-Help Get-ChildItem -Path DellSmbios:\BootSequence -full + -- Get-Help Set-Item -Path DellSmbios:\BootSequence -Examples + + -- Get-Help Get-ChildItem -Path DellSmbios:\TPMSecurity -full + -- Get-Help Set-Item -Path DellSmbios:\TPMSecurity -Examples + + -- Get-Help Set-Item -Path DellSmbios:\SecureBoot -Full + +DYNAMIC PARAMETERS + -Password + Required to validate the BIOS password. Provided in plain text string. This parameter is valid for all settable attributes. + Cmdlets supported: Set-Item + + -PasswordSecure + Required to validate the BIOS password. Provided in encrypted string. This parameter is valid for all settable attributes. + Cmdlets supported: Set-Item + + -BeginningOfDay + Specifies the start time when ExpressCharge will be used for charging the batteries faster. This parameter is used with AdvancedBatteryChargeConfiguration attribute. + Cmdlets supported: Set-Item + + -WorkPeriod + Specifies the duration of time when ExpressCharge is used for charging the batteries faster. This parameter is used with AdvancedBatteryChargeConfiguration attribute. + Cmdlets supported: Set-Item + + -StartTime + Specifies the time when system starts consuming battery power. System will continue consuming the battery power till either peakshift battery threshold is reached or peakshift end time is reached. This parameter is used with PeakShiftDayConfiguration attribute. + Cmdlets supported: Set-Item + + -EndTime + Specifies the time when system stops consuming battery power and starts consuming AC power, if available; however, the system does not charge battery. This parameter is used with PeakShiftDayConfiguration attribute. + Cmdlets supported: Set-Item + + -ChargeStartTime + Specifies the time when the system starts charging battery while consuming AC power, if available. This parameter is used with PeakShiftDayConfiguration attribute. + Cmdlets supported: Set-Item + + -AdminPassword + Specifies that admin password must be provided while setting HDD password if administrator has restricted the changes to HDD password. This parameter is used with HDDPassword attribute. + Cmdlets supported: Set-Item + + -ATAMaximumSecurityMode + Specifies the ATA Maximum Security Mode. Provide the value as '0' if you want HDD to be configured in ATA High Security Mode or '1' if you want HDD to be configured in ATA maximum Security Mode (Secure Erase). This parameter is used with HDDPassword attribute. + Cmdlets supported: Set-Item + + Sample usage: + Set-Item DellSmbios:\PostBehavior\NumLock "Enabled" -Password $PlainTxtPwd + Set-Item DellSmbios:\PostBehavior\NumLock "Enabled" -PasswordSecure $SecurePwd + + (Get-Command -name si Dellsmbios:).Parameters['Password'] + (Get-Command -name si Dellsmbios:).Parameters['PasswordSecure'] + + Note: It is an error to provide -Password and -PasswordSecure together. + + Set-Item PeakShiftDayConfiguration -Value Friday -StartTime "11:45" -EndTime "13:30" -ChargeStartTime "15:30" + Set-Item AdvancedBatteryChargeConfiguration -Value Friday -BeginningOfDay "11:45" -WorkPeriod "5:00" + Set-Item -Path DellSmbios:\Security\HDDPassword $NewPwd -ATAMaximumSecurityMode 1; + Set-Item -Path DellSmbios:\Security\HDDPassowrd $NewPwd -Password $PlainTxtPwd -AdminPassword $AdminPwd; + +ERROR REPORTING + Errors can be captured in the built-in variable -ErrorVariable. + +BIOS PASSWORDS + cd DellSmbios:\Security + -- To Set, Set-Item AdminPassword $NewPwd + + -- To change, Set-Item AdminPassword $NewPwd -Password $PlainTxtPwd + Set-Item AdminPassword $NewPwd -PasswordSecure $SecurePwd + + -- To Clear, Set-Item AdminPassword "" -Password $PlainTxtPwd + Set-Item AdminPassword "" -PasswordSecure $SecurePwd + + +HDD PASSWORD + cd DellSmbios:\Security + -- To Set, Set-Item HDDPassword $NewPwd + + -- To change, Set-Item HDDPassword $NewPwd -Password $PlainTxtPwd + Set-Item HDDPassword $NewPwd -PasswordSecure $SecurePwd + + -- To Clear, Set-Item HDDPassword "" -Password $PlainTxtPwd + Set-Item HDDPassword "" -PasswordSecure $SecurePwd + +ASSET TAG + -- Set-Item DellSmbios:\SystemInformation\assettag Dell -password $PlainTxtPwd + +SystemConfiguration + + -- Set-Item KeyboardBacklightActiveColor "Red" -Password $PlainTxtPwd + -- Set-Item KeyboardBacklightEnabledColors "Red,Green,Custom1,Custom2,White" -Password $PlainTxtPwd + -- Set-Item KeyboardBacklightEnabledColors "NoColor" -Password $PlainTxtPwd + -- Set-Item KeyboardBacklightCustom1Color "234:35:56" -Password $PlainTxtPwd + -- Set-Item KeyboardBacklightCustom2Color "124:45:246" -Password $PlainTxtPwd + +PowerManagement + + -- Set-Item AutoOn "Weekdays" -Password $PlainTxtPwd + -- Set-Item AutoOn "SelectDays" + -- Set-Item PeakShiftDayConfiguration -Value Friday -StartTime "11:45" -EndTime "13:30" -ChargeStartTime "15:30" + -- Set-Item PeakShiftDayConfiguration -Value Sunday -StartTime "11:45" -Password $PlainTxtPwd + -- Set-Item AdvancedBatteryChargeConfiguration -Value Friday -BeginningOfDay "11:45" -WorkPeriod "5:00" + -- Set-Item AdvancedBatteryChargeConfiguration -Value Sunday -WorkPeriod "5:00" -Password $PlainTxtPwd + -- Set-Item PrimaryBattChargeCfg "Adaptive" -Password $PlainTxtPwd; + -- Set-Item PrimaryBattChargeCfg "Custom"; + +BOOTSEQUENCE + -- dir DellSmbios:\BootSequence\BootList + -- Set-Item DellSmbios:\bootsequence\BootList Uefi -Password $PlainTxtPwd + + Note: Ensure that "AdvancedBootOptions\LegacyOrom" is set to + Enabled and SecureBoot is set to Disabled To set attribute + BootList to "Legacy". + + -- dir DellSmbios:\bootsequence\bootsequence | select-object -expand + currentvalue + -- Set-Item DelllSmbios:\BootSequence\bootsequence "2,3,4" -password $PlainTxtPwd + -- Set-Item DelllSmbios:\BootSequence\bootsequence "hdd,cdrom,embnicipv4,embnicipv6" -password $PlainTxtPwd + + Note: To change the bootsequence, check the current bootorder using + dir command on the path DelllSmbios:\BootSequence\BootSequence. + +SECUREBOOT + Note: This tool cannot disable the SecureBoot. + -- Set-Item DellSmbios:\SecureBoot\SecureBoot enabled -password $PlainTxtPwd + + +TPM SECURITY + -- Set-Item DellSmbios:\TPMSecurity\tpmsecurity enabled -password $PlainTxtPwd + Note: Restart the system after changing tpmsecurity. + + -- Set-Item DellSmbios:\TPMSecurity\TpmActivation Enabled -password $PlainTxtPwd + Note - To activate the TpmActivation , Admin password must be installed and + tpmsecurity should be enabled. + + +SEE ALSO + http://en.community.dell.com/techcenter/enterprise-client/w/wiki/6901.dell-Command-powershell-provider + + + diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/en-US/about_DellBIOSProvider_DscResources.help.txt b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/en-US/about_DellBIOSProvider_DscResources.help.txt new file mode 100644 index 0000000..295fb8a --- /dev/null +++ b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/en-US/about_DellBIOSProvider_DscResources.help.txt @@ -0,0 +1,106 @@ +TOPIC + DellBIOSProvider DSC Resources + +SHORT DESCRIPTION + Overview of DSC resources found in the DellBIOSProvider module + +LONG DESCRIPTION + NOTE: As of version 2.7.0 of the DellBIOSProvider, there are 22 categories of DSC resources. + + The DellBIOSProvider module contains the following Desired State Configuration (DSC) resources: + - DCPP_AdvancedBootOptions + - DCPP_AdvancedConfigurations + - DCPP_BIOSSetupAdvancedMode + - DCPP_BootSequence + - DCPP_IntelSoftwareGuardExtensions + - DCPP_Maintenance + - DCPP_Manageability + - DCPP_MiscellaneousDevices + - DCPP_POSTBehavior + - DCPP_Performance + - DCPP_PowerManagement + - DCPP_SecureBoot + - DCPP_Security + - DCPP_StealthModeControl + - DCPP_SupportAssistSystemResolution + - DCPP_SystemConfiguration + - DCPP_SystemLogs + - DCPP_TPMSecurity + - DCPP_USBConfiguration + - DCPP_Video + - DCPP_VirtualizationSupport + - DCPP_Wireless + + All the resources can be used to enforce the desired values for the BIOS attributes + grouped under the PS path DellSmbios:\. They all share the following required parameter: + + - Category: A string describing the container or group for the SMBIOS attribute. + + + The below sections gives an exemplary look at how a user can avail DCPP Resources for DSC. + In the below there are examples related to categories POSTBehavior and PowerManagement. + Other categories and their properties are closely allied in their implementation. + +DCPP_POSTBehavior +-------------------- + This resource provides the ability to ensure the desired values for the BIOS attributes + grouped under the PS path DellSmbios:\\ in DellBIOSProvider PowerShell provider. + + +SAMPLE ATTRIBUTES + PowerWarn + Keypad + PntDevice + Numlock + PostF2Key + PostF12Key + +SYNTAX + POSTBehavior [string] #resource name + { + Category = "POSTBehavior" + PowerWarn = [string] + Keypad = [string] + PostF2Key = [string] + Numlock = [string] + } + } + +DCPP_PowerManagement +--------------------- + This resource provides the ability to ensure the desired values for the BIOS attributes + grouped under the PS path DellSmbios:\PowerManagement in DellBIOSProvider PowerShell provider. + For PowerManagement category there is another mandatory property called BlockDefinition + that has to be unique for each resource block. + +SAMPLE ATTRIBUTES + PeakShiftDayConfiguration + AdvancedBatteryChargeConfiguration + AutoOn + +SYNTAX + PowerManagement [string] #resource name + { + Category = "PowerManagement" + AutoOn = [string] + BlockDefinition = "1" + AdvancedBatteryChargeConfiguration = "Tuesday" + BeginningOfDay = "10:30" + WorkPeriod = "15:45" + } + + PowerManagement [string] #resource name + { + Category = "PowerManagement" + BlockDefinition = "2" + PeakShiftDayConfiguration = "Sunday" + StartTime = "10:30" + EndTime = "12:30" + ChargeStartTime = "21:45" + } + } + +SEE ALSO + http://en.community.dell.com/techcenter/enterprise-client/w/wiki/6901.dell-Command-powershell-provider + + diff --git a/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/libxml2.dll b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/libxml2.dll new file mode 100644 index 0000000..ca8e1aa Binary files /dev/null and b/Bios-ActiveTPM-Dell/Modules/DellBIOSProvider/libxml2.dll differ diff --git a/Bios-ActiveTPM-Dell/install.cmd b/Bios-ActiveTPM-Dell/install.cmd new file mode 100644 index 0000000..7fc6760 --- /dev/null +++ b/Bios-ActiveTPM-Dell/install.cmd @@ -0,0 +1,15 @@ +Set cmddism=dism +Set cmdwusa=wusa +Set cmdpowershell=powershell +Set cmdreg=reg +Set cmdpowercfg=powercfg +Set cmdcscript=cscript +if defined PROCESSOR_ARCHITEW6432 Set cmddism=%SystemRoot%\Sysnative\cmd.exe /c Dism +if defined PROCESSOR_ARCHITEW6432 Set cmdpowershell=%SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell.exe +if defined PROCESSOR_ARCHITEW6432 Set cmdwusa=%SystemRoot%\sysnative\wusa.exe +if defined PROCESSOR_ARCHITEW6432 Set cmdreg=%SystemRoot%\sysnative\reg.exe +if defined PROCESSOR_ARCHITEW6432 Set cmdpowercfg=%SystemRoot%\Sysnative\cmd.exe /c powercfg +if defined PROCESSOR_ARCHITEW6432 Set cmdcscript=%SystemRoot%\Sysnative\cscript.exe + +xcopy "%~dp0Modules\DellBIOSProvider" "C:\Program Files\WindowsPowerShell\Modules\DellBIOSProvider\" /S /Y /E +%cmdpowershell% -executionPolicy bypass -file "%~dp0ActiveTPM.ps1" diff --git a/Bios-ActiveTPM-Dell/readme.md b/Bios-ActiveTPM-Dell/readme.md new file mode 100644 index 0000000..19b10e1 --- /dev/null +++ b/Bios-ActiveTPM-Dell/readme.md @@ -0,0 +1,25 @@ +# Enable TPM on Dell Systems + +This PowerShell script enables **TPM (Trusted Platform Module)** on Dell machines using the official **DellBIOSProvider** PowerShell module. + +## ✨ Features +- Detects if the **DellBIOSProvider** module is installed +- Enables TPM security in BIOS +- Supports optional BIOS password parameter + +## 📌 Requirements +- Windows with PowerShell +- [DellBIOSProvider module](https://www.powershellgallery.com/packages/DellBIOSProvider) installed +- Administrator privileges + +## 🚀 Usage +Run in an elevated PowerShell session: + +```powershell +.\Enable-TPM_Dell.ps1 +``` +If BIOS is password-protected: + +```powershell +.\Enable-TPM_Dell.ps1 -BiosPassword "YourPassword" +``` \ No newline at end of file diff --git a/Bios-ActiveVirtualisation-HP/Enable-Virtualization.ps1 b/Bios-ActiveVirtualisation-HP/Enable-Virtualization.ps1 new file mode 100644 index 0000000..f097205 --- /dev/null +++ b/Bios-ActiveVirtualisation-HP/Enable-Virtualization.ps1 @@ -0,0 +1,16 @@ +$BiosInfo = Get-WmiObject -Namespace root/hp/instrumentedBIOS -Class hp_biosEnumeration +$BiosSetup = Get-WmiObject -class hp_biossettinginterface -Namespace root\hp\instrumentedbios +foreach ($Conf in $BiosInfo) { + $Param = $conf.Name + $Valeur = $Conf.Value + + If ($Param -eq 'Virtualization Technology (VTx)') { + Write-host $Param $Valeur + $BiosSetup.SetBIOSSetting('Virtualization Technology (VTx)','Enable') + } + If ($Param -eq 'Virtualization Technology for Directed I/O (VTd)') { + Write-host $Param $Valeur + $BiosSetup.SetBIOSSetting('Virtualization Technology for Directed I/O (VTd)','Enable') + } +} + diff --git a/Bios-ActiveVirtualisation-HP/readme.md b/Bios-ActiveVirtualisation-HP/readme.md new file mode 100644 index 0000000..0609ab1 --- /dev/null +++ b/Bios-ActiveVirtualisation-HP/readme.md @@ -0,0 +1,33 @@ +# HP BIOS – Enable Virtualization + +This PowerShell script uses **WMI (hp_biosEnumeration + hp_biossettinginterface)** to enable virtualization options directly in the BIOS of HP systems. + +## ✨ Features +- Connects to HP BIOS via `root/hp/instrumentedBIOS` +- Reads current settings with `hp_biosEnumeration` +- Enables: + - **Virtualization Technology (VTx)** + - **Virtualization Technology for Directed I/O (VTd)** + +## 📌 Requirements +- HP device with BIOS supporting these options +- Windows PowerShell (Run as Administrator) +- WMI namespace `root/hp/instrumentedBIOS` available + +## 🚀 Usage +Run the script in an elevated PowerShell console: + +```powershell +powershell -ExecutionPolicy Bypass -File .\Enable-Virtualization.ps1 +``` + +The script will: + +- Display current **VTx** and **VTd** values +- Enable them if disabled + +⚠️ Notes + +- Some changes may require a **system reboot** to take effect. +- If the BIOS is password-protected, additional parameters may be needed to provide credentials. +- These WMI classes are specific to **HP devices** and will not work on other vendors. diff --git a/Bios-Configuration-HP/HpBiosConfigGui.ps1 b/Bios-Configuration-HP/HpBiosConfigGui.ps1 new file mode 100644 index 0000000..2a5ef35 --- /dev/null +++ b/Bios-Configuration-HP/HpBiosConfigGui.ps1 @@ -0,0 +1,190 @@ +Add-Type -AssemblyName PresentationFramework + +# Expected BIOS values +$expectedValues = @{ + "USB Storage Boot" = "Disable" + "IPv6 during UEFI Boot" = "Disable" + "Prompt on Memory Size Change" = "Disable" + "Embedded LAN Controller" = "Disable" + "LAN / WLAN Auto Switching" = "Enable" + "Wake on WLAN" = "Enable" + "HUB Wake on LAN" = "Enable" + "Secure Boot" = "Disable" +} + +# Function to retrieve BIOS settings +function Get-BIOSValues { + $biosSettings = @{} + $BiosInfo = Get-WmiObject -Namespace root/hp/instrumentedBIOS -Class hp_biosEnumeration + + foreach ($Conf in $BiosInfo) { + $Param = $Conf.Name + $Value = $Conf.Value -join ", " # Convert array to text + $ActiveValue = ($Conf.Value -split "," | Where-Object {$_ -match "\*"}) -replace "\*", "" # Extract active value + + $biosSettings[$Param] = @{ + "AllValues" = $Value + "ActiveValue" = $ActiveValue + } + } + return $biosSettings +} + +# Retrieve initial BIOS settings +$BiosSetup = Get-WmiObject -Class hp_biossettinginterface -Namespace root/hp/instrumentedBIOS +$biosSettings = Get-BIOSValues + +# Create main window +$window = New-Object System.Windows.Window +$window.Title = "HP BIOS Configuration - Component Status" +$window.Width = 550 +$window.Height = 450 +$window.WindowStartupLocation = "CenterScreen" +$window.FontFamily = "Segoe UI" +$window.FontSize = 14 + +# Create grid +$grid = New-Object System.Windows.Controls.Grid +$grid.Margin = "15" +$window.Content = $grid + +# Define grid columns +$grid.ColumnDefinitions.Add((New-Object System.Windows.Controls.ColumnDefinition)) # Configuration Name +$grid.ColumnDefinitions.Add((New-Object System.Windows.Controls.ColumnDefinition)) # Status + +# Settings list +$settings = $expectedValues.Keys +$statusLabels = @{} # Store UI labels for dynamic updates + +# Function to refresh the UI with updated BIOS values +function Refresh-UI { + $biosSettings = Get-BIOSValues # Retrieve latest BIOS values + + foreach ($setting in $settings) { + if ($biosSettings.ContainsKey($setting)) { + $ActiveValue = $biosSettings[$setting]["ActiveValue"] + } else { + $ActiveValue = "Unknown" + } + + # Check if the value matches the expected setting + $color = if ($expectedValues.ContainsKey($setting) -and $ActiveValue -eq $expectedValues[$setting]) { "Green" } else { "Red" } + + # Update the UI dynamically + $statusLabels[$setting].Content = $ActiveValue + $statusLabels[$setting].Foreground = $color + } +} + +# Add rows for each setting +$rowIndex = 0 +foreach ($setting in $settings) { + # Configuration name label + $label = New-Object System.Windows.Controls.Label + $label.Content = $setting + $label.Margin = "5" + $label.HorizontalAlignment = "Left" + [System.Windows.Controls.Grid]::SetRow($label, $rowIndex) + [System.Windows.Controls.Grid]::SetColumn($label, 0) + $grid.Children.Add($label) + + # Get current value + if ($biosSettings.ContainsKey($setting)) { + $ActiveValue = $biosSettings[$setting]["ActiveValue"] + } else { + $ActiveValue = "Unknown" + } + + # Compare with expected values + $color = if ($expectedValues.ContainsKey($setting) -and $ActiveValue -eq $expectedValues[$setting]) { "Green" } else { "Red" } + + # Status label + $statusLabel = New-Object System.Windows.Controls.Label + $statusLabel.Content = $ActiveValue + $statusLabel.Margin = "5" + $statusLabel.FontWeight = "Bold" + $statusLabel.HorizontalAlignment = "Right" + $statusLabel.Foreground = $color + $statusLabels[$setting] = $statusLabel # Store reference for later updates + + [System.Windows.Controls.Grid]::SetRow($statusLabel, $rowIndex) + [System.Windows.Controls.Grid]::SetColumn($statusLabel, 1) + $grid.Children.Add($statusLabel) + + $rowIndex++ +} + +# Add rows dynamically +for ($i = 0; $i -lt $settings.Count; $i++) { + $grid.RowDefinitions.Add((New-Object System.Windows.Controls.RowDefinition)) +} + +# Visual separator +$separator = New-Object System.Windows.Controls.Separator +$separator.Margin = "5,10,5,10" +[System.Windows.Controls.Grid]::SetRow($separator, $settings.Count) +[System.Windows.Controls.Grid]::SetColumnSpan($separator, 2) +$grid.Children.Add($separator) + +# "Configure" button +$configureButton = New-Object System.Windows.Controls.Button +$configureButton.Content = "Configure" +$configureButton.Margin = "5" +$configureButton.Width = 150 +$configureButton.Height = 40 +$configureButton.FontSize = 14 +$configureButton.FontWeight = "Bold" +$configureButton.Background = "#0071C5" +$configureButton.Foreground = "White" +$configureButton.HorizontalAlignment = "Center" +$configureButton.VerticalAlignment = "Bottom" +$configureButton.Cursor = "Hand" +$configureButton.BorderThickness = "2" +$configureButton.BorderBrush = "Black" + +[System.Windows.Controls.Grid]::SetRow($configureButton, $settings.Count + 1) +[System.Windows.Controls.Grid]::SetColumnSpan($configureButton, 2) +$grid.Children.Add($configureButton) + +# Handle "Configure" button click +$configureButton.Add_Click({ + $errors = @() # Store errors + $changesMade = $false # Track changes + + foreach ($setting in $settings) { + if ($biosSettings.ContainsKey($setting)) { + $currentValue = $biosSettings[$setting]["ActiveValue"] + $expectedValue = $expectedValues[$setting] + + if ($currentValue -ne $expectedValue) { + try { + $BiosSetup.SetBIOSSetting($setting, $expectedValue) + Write-Host "Modified $setting -> $expectedValue" + $changesMade = $true # A change was made + } catch { + $errors += "Error modifying $setting" + } + } + } else { + $errors += "Setting $setting not found in BIOS" + } + } + + # Refresh UI after modifications + Refresh-UI + + # Show message with success or errors + if ($errors.Count -gt 0) { + [System.Windows.MessageBox]::Show("Some errors occurred:`n`n$($errors -join "`n")", "Error", "OK", "Error") + } elseif ($changesMade) { + [System.Windows.MessageBox]::Show("All settings have been successfully configured and updated in the interface.", "Success", "OK", "Information") + } else { + [System.Windows.MessageBox]::Show("No changes were necessary.", "Success", "OK", "Information") + } +}) + +# Add extra row for the "Configure" button +$grid.RowDefinitions.Add((New-Object System.Windows.Controls.RowDefinition)) + +# Show the window +$window.ShowDialog() diff --git a/Bios-Configuration-HP/readme.md b/Bios-Configuration-HP/readme.md new file mode 100644 index 0000000..449c6e9 --- /dev/null +++ b/Bios-Configuration-HP/readme.md @@ -0,0 +1,22 @@ +# HP BIOS Config GUI + +A minimal **PowerShell + WPF** tool to **audit and enforce BIOS settings** on HP devices via `root/hp/instrumentedBIOS`. + +## ✨ What it does +- Reads current BIOS values (`hp_biosEnumeration`) +- Compares to an **expected policy** (color‑coded: green = OK, red = mismatch) +- **Configure** button applies changes with `hp_biossettinginterface.SetBIOSSetting` +- Live refresh + error summary + +## 📌 Requirements +- HP device exposing `root/hp/instrumentedBIOS` +- Windows + PowerShell (run as Administrator, STA) +- .NET Framework (WPF) + +## 🚀 Usage +1. (Optional) Edit the `expectedValues` table in the script to match your policy. +2. Run in an elevated, STA PowerShell: + ```powershell + powershell -sta -File .\HpBiosConfigGui.ps1 + ``` +3. Review statuses → Configure to enforce → confirm results. \ No newline at end of file diff --git a/Bios-Update-HP-v1.0/BCUsignature32.dll b/Bios-Update-HP-v1.0/BCUsignature32.dll new file mode 100644 index 0000000..1571052 Binary files /dev/null and b/Bios-Update-HP-v1.0/BCUsignature32.dll differ diff --git a/Bios-Update-HP-v1.0/BCUsignature64.dll b/Bios-Update-HP-v1.0/BCUsignature64.dll new file mode 100644 index 0000000..4f13bbb Binary files /dev/null and b/Bios-Update-HP-v1.0/BCUsignature64.dll differ diff --git a/Bios-Update-HP-v1.0/BIOS.CMD b/Bios-Update-HP-v1.0/BIOS.CMD new file mode 100644 index 0000000..622c1bc --- /dev/null +++ b/Bios-Update-HP-v1.0/BIOS.CMD @@ -0,0 +1,50 @@ +REM Initialisation des variables vardate et vartime +for /F "skip=1 delims=" %%F in (' + wmic PATH Win32_LocalTime GET Day^,Month^,Year /FORMAT:TABLE +') do ( + for /F "tokens=1-3" %%L in ("%%F") do ( + set CurrDay=0%%L + set CurrMonth=0%%M + set CurrYear=%%N + ) +) +set CurrDay=%CurrDay:~-2% +set CurrMonth=%CurrMonth:~-2% +set vardate=%CurrYear%%CurrMonth%%CurrDay% +if "%time:~0,1%"==" " ( +set vartime=0%time:~1,1%%time:~3,2% +) else ( +set vartime=%time:~0,2%%time:~3,2% +) + +Set cmdreg=reg +Set cmdPnputil=c:\windows\system32\pnputil.exe +Set cmdpowershell=powershell +if defined PROCESSOR_ARCHITEW6432 Set cmdreg=%SystemRoot%\sysnative\reg.exe +if defined PROCESSOR_ARCHITEW6432 Set cmdPnputil=%SystemRoot%\Sysnative\cmd.exe /c c:\windows\system32\pnputil.exe +if defined PROCESSOR_ARCHITEW6432 Set cmdpowershell=%SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell.exe + +echo ---------Bios update ----------->>C:\pnpDrivers\BIOS.log +for /f "delims=" %%D in ('dir /a:d /b %~dp0') do set BIOSFILE=%%D +echo %BIOSFILE% +set Fullpath=%~dp0%BIOSFILE% +echo ---------Fullpath = %Fullpath% ----------->>C:\pnpDrivers\BIOS.log + +cd "%Fullpath%" +del "%Fullpath%\HpFirmwareUpdRec.log" /F /Q + +echo 3010:SUCCESS:REBOOT=A restart is required to complete the install>>C:\pnpDrivers\BIOS.log +echo 1602:CANCEL:NOREBOOT=The install is cannot complete due to a dependency>>C:\pnpDrivers\BIOS.log +echo 273:CANCEL:NOREBOOT=Flash did not update because update is same BIOS version>>C:\pnpDrivers\BIOS.log +echo 282:CANCEL:NOREBOOT=Flash did not update because update is an older BIOS version>>C:\pnpDrivers\BIOS.log + +if EXIST "%Fullpath%\HpFirmwareUpdRec.exe" echo HpFirmwareUpdRec.exe>>C:\pnpDrivers\BIOS.log +if EXIST "%Fullpath%\HpFirmwareUpdRec.exe" start /wait "BIOS" "%Fullpath%\HpFirmwareUpdRec.exe" -s -r -h -b -f"%Fullpath% +if EXIST "%Fullpath%\HPBIOSUPDREC.exe" echo HPBIOSUPDREC.exe>>C:\pnpDrivers\BIOS.log +if EXIST "%Fullpath%\HPBIOSUPDREC.exe" start /wait "BIOS" "%Fullpath%\HPBIOSUPDREC.exe" -s -b -r -a +if EXIST "%Fullpath%\install.cmd" echo %Fullpath%\install.cmd>>C:\pnpDrivers\BIOS.log +if EXIST "%Fullpath%\install.cmd" Call "%Fullpath%\install.cmd" + +set codesortie=%ERRORLEVEL% +echo %codesortie%>>C:\pnpDrivers\BIOS.log +if %codesortie% EQU 3010 exit /B 0 diff --git a/Bios-Update-HP-v1.0/Bios Flash.htm b/Bios-Update-HP-v1.0/Bios Flash.htm new file mode 100644 index 0000000..6283184 --- /dev/null +++ b/Bios-Update-HP-v1.0/Bios Flash.htm @@ -0,0 +1,394 @@ + + + + + + + + +HP Firmware Flash Update + + + + + + + + + +
+ + + + + + + +
+

+
+

Firmware Flash Update

+
+

+
+ +
+ +
+ +
+ +

This Firmware Update SoftPaq contains utilities and data files for restoring or upgrading the firmware on HP business notebooks and desktops. See below for descriptions of some of the supported methods.

+ +
+ +
+ +
+ + + + +

+
+ +
+ +
+ +
+ +

General Information +

+ +

This package is used to update firmware locally or to provide files needed to deploy the firmware update to supported systems on a local network. The default Softpaq unbundle location is C:\SWSETUP\SPnnnnn\ where 'nnnnn' is the Softpaq number.

+ +

However the target systems may also use the internet to search for and apply the latest system firmware updates - check Windows Update to find new releases for supported firmware components. In addition the BIOS firmware can be updated directly from BIOS Setup (F10 hotkey at boot). Select the 'Update System BIOS' option under the Main menu to access this function. Under the 'BIOS Update Preferences' option you may set up periodic update checks, or you can use the 'Check HP.com for BIOS Updates' link to search for an update immediately.

+ +
+ +
+ +
+ +

HP Firmware Update and Recovery (HpFirmwareUpdRec) Flash Utility

+ +

The HP Firmware Update tool for use in Microsoft Windows operating systems is found in this package. To display the available options for this utility, enter [Path]\HpFirmwareUpdRec -? at a command prompt or local search box. If the system has a BIOS administrator password enabled, then HpFirmwareUpdRec will prompt for the password to be entered before completing the flash process. For more information, view contents.txt or HpFirmwareUpdRec.txt.

+ + +

Using a USB Device to run HpFirmwareUpdRec

+ +

HpFirmwareUpdRec can also be run from a USB storage device, including flash memory devices and external hard drives. To do this insert the device and take note of the assigned drive letter. Run HpFirmwareUpdRec64.exe and choose the option to Create Recovery USB flash drive. Or you can manually copy the application .exe and the associated .bin file and .inf file to the root of the drive indicated by the drive letter or a folder on that drive. The update utility can then be executed from its location on the USB device. If the system has a BIOS Setup password enabled, then HpFirmwareUpdRec will prompt for the password to be entered before completing the flash process. For +more information, view contents.txt +or HpFirmwareUpdRec.txt.

+ +

Several HP models support more than one configuration, requiring a different BIOS family for each. In some cases the included version of the update utility packs both files together when creating BIOS Update USB key, which will not result in a successful update. You may avoid this problem by checking the system's BIOS version and family in the BIOS information page +(F1 or F10 key at boot) or using msinfo32.exe in Windows. Once you know the correct family for your system, delete the other 2 files in the Softpaq folder that do not match your system's BIOS. The folder default location is c:\swsetup\SP######.

+ +
+ +
+ +
+ +

Startup Menu / F10 +Setup Firmware Update

+ +

The HP Business Desktop systems provide a firmware upgrade option through both the Startup Menu and the F10 Setup application. using the "Update System BIOS" +link.  Reboot the PC and press the Esc key to display the Startup Menu. Select the "Update System and Supported Device Firmware" menu option directly for an immediate update from media (see below).   Alternatively, select "BIOS Setup (F10)" or reboot and press F10 to access the BIOS Setup utility. In the Update System BIOS menu, select "Update System and Supported Device Firmware Using Local Media".

+ +

These methods require that the firmware binary file is present on USB media or the hard drive in a specific folder - either "HP\DEVFW" or "EFI\HP\DEVFW" will support this feature. The file must be named 'firmware.bin'. +The HP Firmware Update and Recovery utility has a feature that will copy the image file to the correct folder on a USB device for you.   If no firmware file is found on USB media, the system will look for a firmware file on the hard drive.   +If a BIOS administrator password has been set, the password will be required before being able to access the "Update System BIOS" menu or BIOS Setup.   The firmware update will not be complete until the system is restarted.

+ +
+ +
+ +
+ +

HP Client Management Solutions (HPCMS) BIOS Management

+ +

Use this Softpaq with more Client Management Solutions from HP and other vendors to remotely target, distribute, and update the System BIOS and BIOS settings on network PCs. Refer to the chosen application's documentation for specific capabilities and instructions. For more information, see HP Client Management Solutions -> Additional Resources: HP Whitepapers.

+ +
+ +
+ +
+ +

BitLocker Drive Encryption / BIOS Measurements

+ +

If you have Windows BitLocker Drive Encryption (BDE) enabled on your system, it is recommended that BDE be suspended temporarily before the BIOS is updated. +You should also obtain your BDE recovery password or recovery PIN before suspending BDE. After the BIOS is flashed, BDE can be resumed.

+ +

To make a change to BDE, select Start > Control Panel > BitLocker Drive Encryption, click 'Suspend Protection' or 'Resume Protection' and then click 'Yes'.

+ +

If you use HpFirmwareUpdRec to update your BIOS in Windows, the application will attempt to suspend Bitlocker for you while the firmware updates are in progress.

+ +

As a general rule, updating the BIOS will modify measurement values stored in the Platform Configuration Registers (PCRs) of the system's security module (TPM). +Technologies that use these PCR values to verify platform health (BDE is one such example) should be temporarily disabled prior to flashing the BIOS. Once the BIOS is updated, the functions should be re-enabled and the system should be restarted so that new measurements can be taken.

+ +

The primary measurement for BIOS code is stored in PCR 0. When the TPM is enabled, the value of PCR 0 after the system has been updated should match the value listed in the revision history (History.txt).

+ +
+ +
+ +
+ +

Crisis Recovery Mode

+ +

In the event of a failed BIOS update (for example if power is lost while updating), the System BIOS may become corrupted.  Crisis Recovery Mode detects this condition and will automatically attempt to recover to a known good state. Some advanced systems have the ability to recover without user intervention - an error response during boot up showing 2 red and then 4 white blinks on the power LED indicates this mode. After restoring the BIOS image, the system will reboot normally. If this feature is not present on your model, the recovery process will search the hard drive and any USB media sources for a compatible binary image.   +The original factory image will have a suitable BIOS binary for automatic recovery without user intervention. Otherwise, the binary (.bin) file in the Softpaq root folder should be copied to the "EFI\HP\BIOS\current" folder of the desired storage device in a FAT or FAT32 partition, and the system powered on. Once the binary image is located, the BIOS will display a recovery screen and will start the recovery process. Do not power off the system until recovery is complete.

+ +

Whenever HpFirmwareUpdRec is used to update the firmware, the utility will automatically populate the recovery file in the correct location should the Tools partition or \EFI file path exist. This process can be used to configure for automatic recovery a system which has had the original hard drive image replaced or reinstalled with system software recovery media.

+ +

Sometimes there are restrictions on which BIOS versions are allowed to be installed on a platform. If the BIOS that was on +the system had restrictions, then only allowable BIOS versions may be used for recovery.

+ +

 

+ +
+ +
+ +
+ +

Copyright (c) 2022 HP Development Company, L.P. All Rights Reserved.
+Product names mentioned herein may be trademarks and/or registered trademarks +of their respective companies.

+ +
+ + + + diff --git a/Bios-Update-HP-v1.0/History.txt b/Bios-Update-HP-v1.0/History.txt new file mode 100644 index 0000000..7832272 --- /dev/null +++ b/Bios-Update-HP-v1.0/History.txt @@ -0,0 +1,170 @@ + Revision History + T76 ROM Family + +Models Supported: HP EliteBook 830 G8 Notebook PC + HP EliteBook 840 G8 Notebook PC + HP EliteBook 850 G8 Notebook PC + HP ZBook Firefly 14 inch G8 Mobile Workstation PC + HP ZBook Firefly 15.6 inch G8 Mobile Workstation PC + HP EliteBook 840 Aero G8 Notebook PC + +- Provides the following drivers and firmware: +T76 +Cypress Power Delivery (PD) Firmware (CCG6), version 2.5.0 +EC/SIO Firmware, version 30.37.00 +Intel GOP EFI Driver, version 17.0.1053 +Management Engine (ME) Firmware, version 15.0.35.1951 +T37 +EC/SIO Firmware, version 58.01.00(TI PD : v7.4) +Intel GOP EFI Driver, version 17.0.1053 +Management Engine (ME) Firmware, version 15.0.35.1951 + +Version 01.08.20 + +ENHANCEMENTS: +- Enhancement to address security vulnerabilities CVE-2022-23924, CVE-2022-23925, CVE-2022-23926, CVE-2022-23927, CVE-2022-23928, CVE-2022-23929, CVE-2022-23930, CVE-2022-23931, CVE-2022-23932, CVE-2022-23933, CVE-2022-23934. +- Enhancement to address security vulnerabilities CVE-2022-23953, CVE-2022-23954, CVE-2022-23955, CVE-2022-23956, CVE-2022-23957, CVE-2022-23958. +- Adds a feature to control display of BIOS Admin login based on ""BIOS Administrator visible at power-on authentication"" when Enhanced BIOS Authentication Mode (EBAM) is set. + +FIXES: +- Fixes issue where system failure to boot after switching between two different saved bootstores. + +PCR0 (TPM2.0) = T76 : 347A7153B67EFD154D50053731DABEDD0C6FC57D69CDEA90D83FC61F50F038FE + T37 : 9646D40EA7EFF6A91DA5671049DD5F7B7D27FB1526030AB078EC033CC39DA1EE + +Version 01.08.00 + +ENHANCEMENTS: +- Addresses security vulnerabilities CVE-2021-39297, CVE-2021-39299, CVE-2021-39300, CVE-2021-39301. +- Updates the splash screen with Protected by Sure Start bitmaps. +- Updates the Intel Thunderbolt retimer firmware to version 2.25.1.1. +- Provides support for the Hynix 32GB memory module. +- Provides support for the Realtek audio codec. + +FIXES: +- Fixes an issue where the system displays the incorrect unlock screen message when the system screen is locked. +- Fixes an issue where system battery does not recharge properly through the HP Thunderbolt Dock G4r. +- Fixes an issue where a system that attempts to update firmware via FTP server with proxy from the F10 setup interface reports the error, Failure during data transfer (maximum downloaded content size exceeded). +- Fixes an issue where an unsupported Thunderbolt Dock is displayed in the BIOS Config Utility. +- Fixes an issue where the audio replay volume is lower than expected after the BIOS is updated. + +PCR0 (TPM2.0) = 70EE7804465E4706A4C891043A17448835886BC11BBAE74BCD94E935DFBFBBA8 + +Version 01.07.02 + +ENHANCEMENTS: +- Enhancement to address security vulnerabilities CVE-2021-0145. +- Enhancement to address security vulnerabilities CVE-2021-0157, CVE-2021-0156. +- Enhancement to address security vulnerabilities CVE-2021-0107, CVE-2021-0111, CVE-2021-0114, CVE-2021-0115, CVE-2021-0116, CVE-2021-0117, CVE-2021-0118, CVE-2021-0119, CVE-2021-0124, CVE-2021-0125. +- Update camera Firmware Management to enhance camera firmware flash stability +- Update HP Sure Run Agent to v5.0.0.26569 for compatibility and stability enhancement. +- Adds Windows11 operating system support. +- Enhancement to address security vulnerabilities CVE-2021-0107, CVE-2021-0111, CVE-2021-0114, CVE-2021-0115, CVE-2021-0116, CVE-2021-0117, CVE-2021-0118, CVE-2021-0119, CVE-2021-0124, CVE-2021-0125. +- Enhancement to address security vulnerabilities CVE-2021-33113, CVE-2021-33115. +- Correct help string for F10 "Special Keys mapped to Fn+Keypress" +- Correct POST error message for "300-Confguration change warning" on Traditional Chinese + +FIXES: +- Fixes an issue where Thunderbolt grahpic card doesnt work properly after restarting unit. +- Fixes an issue where can't adjust brightness by FN+F3/F4 when Privacy Panel brightness turned on in F10 +- Fixes an issue where charge LED from amber change to white when battery charging to 88% +- Fixes an issue where it showes yellow bang in device manager on UCSI item. +- Fixes an issue where mobile hotspot doesnt work properly when a device connects to 5GHz channel. +- Fixes issue where HP Sure Run failure to enable with error message "Operation failed with the following error code:4" when "Remote Device Management" permanently disabled. +- Fixes issue where option in F10 setup menu does not match option get from BIOS Configuration Utility when HP Cloud Managed is permanently disabled. +- Fixes issue where some F10 settings or help message display incomplete when change to non-English language." +- Fixes an issue where HP logo doesn't appear when system triggers ME recovery. + +PCR0 (TPM2.0) = 2A382FFFAA90861C18C45568BDFB25A7EDA5915D6561DACA2689EBA7EE17378A + +Version 01.06.02 + +ENHANCEMENTS: +- Addresses security vulnerabilities CVE-2021-0072, CVE-2021-0161, CVE-2021-0164, CVE-2021-0165, CVE-2021-0166, CVE-2021-0168, CVE-2021-0170, CVE-2021-0076, CVE-2021-0183. +- Updates the power-on battery warning message when the battery capacity is low. +- Updates the battery capacity icon display when Maximize My Battery Health is set in the F10 settings and the battery is fully charged. +- Provides support for the Apple USB-C 87W adaptor. +- Provides support for a new camera module. +- Updates the Realtek USB UEFI PXE driver to v2.035. +- Updates HP Sure Run Service Agent to enhance compatibility and stability. +- Delays the response of the power button on the keyboard to avoid accidental activation of the power button during sanitization mode while HP Easy Clean is used. +- Provides support for the Soft Start feature. +- Provides support for the Apple XDR display. +- Updates the Intel reference code to provide enhanced stability and compatibility. +- Adds support for a new memory module. +- Improves power management on systems running multiple Type-C ports. + +NOTE: Due to the enhanced security features included in this update, the BIOS cannot be downgraded to an earlier version after this package is installed. + +FIXES: +- Fixes an issue on a system with Sure Admin enabled where the Power-On Password cannot be cleared after the defaults are restored using Restore Security Settings to Factory Defaults. +- Fixes an issue where the CTRL+ALT+Insert key combination does not function in the Fn unlock mode. +- Fixes an issue where the current and new version numbers in the HP Firmware Update and Recovery tool are reversed. +- Fixes an issue where the touchscreen does not function in the F10 menu. +- Fixes issue where the HP Sure Recover page is not displayed correctly in the F10 setup menu after the display language is changed to a non-English language. +- Fixes an issue where the system cannot charge the battery when battery is in shipping mode. +- Fixes an issue where the HP Thunderbolt G2 dock disconnects from the system unexpectedly. + +PCR0 (TPM2.0) = 9E4BD2BEE9B44D6E74744FA8BCE34B946E6B0BD0ECAA3C0727762D52EE2ABB1D + +Version 01.04.01 + +ENHANCEMENTS: +- Addresses security vulnerabilities CVE-2021-0069, CVE-2021-0071, and CVE-2021-0075. +- Addresses security vulnerabilities CVE-2020-12359. +- Addresses security vulnerabilities CVE-2020-8700, CVE-2020-8703, CVE-2020-24507 and CVE-2020-24516. +- Addresses security vulnerabilities CVE-2020-24489, CVE-2020-24511, and CVE-2020-24512. +- Improves Customer Experience when a 3rd party device is used to charge the system through the USB-C port. +- Updates the UEFI Wi-Fi Driver to version 1.2.4.2193 to enhance connection stability in the pre-boot environment. +- Adds camera firmware update capability for additional supported camera devices. +- Improves the performance of the clickpad firmware update process. +- Enhances cursor movement when the clickpad is used. +- Enhances cursor movement when a Bluetooth mouse is used. +- Provides enhanced stability when an external monitor is connected to the system using an HP USB-C Dock G5. +- Updates the Intel Sensor Hub firmware to version 5.4.300.4468. + +FIXES: +- Fixes an issue where the keyboard Fn key LED does not power off when the system is in hibernation. +- Fixes an issue on a system connected to an HP dock that enters hibernation where the system restarts or shuts down during Wake on LAN. +- Fixes an issue that occurs on a system connected to an external monitor using an HP Docking station where the speaker on the monitor does not function properly function after the system resumes from a hibernate or system off state while the lid is closed. +- Fixes an issue on a system with the lid closed where the system cannot power on with external monitor connected though HP Docking station. + +PCR0 (TPM2.0) = 4A0024313F0A692D5D4ED2F8C2BFC2425B758C8AC87AD22403DE0D42582367F7 + + +Version 01.01.32 + +- Fixes an issue where a system connected to a dock monitor stops functioning (hangs) when a BIOS update is performed. + +- Fixes an issue where an external monitor connected to the system using VGA or DisplayPort displays a black screen after the system is powered on (cold boot) while the lid is closed and BitLocker is enabled. + +- Fixes an issue where the F1 through F12 keys do not function properly. + +- Fixes an issue where the system cannot boot to PXE from an IPv4/IPV6 network after Custom/system address is enabled in the F10 menu. + +- Fixes an issue which causes an error to occur when the HP Sure Admin QR Code is used on a system when Intel AMT (Active Management Technology) is disabled and Pre-boot WiFi is enabled. + +- Fixes an issue where the SSD ID string is incomplete in Secure Erase in the F10 menu. + +- Fixes an issue where system continues to boot to the USB recovery partition and not the USB image partition after the USB drive is selected from the boot menu. + +- Fixes an issue where the system does not boot successfully after the A/C power adapter is disconnected from the system during a capsule BIOS update on EMMC systems. + +- Improves the resume time from Modern Standby time when the system is running in DC mode. + +- Improves the Modern Standby (MSC) experience when the system transitions from AC to DC power mode while the lid is closed. + +- Enables the second source ELAN Clickpad Firmware update. + +- Enables Brightness hotkey support for Linux Ubuntu. + +- Adds the Permanent Configuration of Boot Order for external network devices. + +- Limits system power when the system is running in DC mode and the battery temperature is below 10C. + +PCR0 (TPM2.0) = 48A46D5C8AD10C3F55E5A1423C700CC519A0A4F1902EAC2C5EC20DE3C6187BD5 + + +Version 01.01.04 + +PCR0 (TPM2.0) = 8D09D72E59E783817DD6847FECDA9CFE2B8C8B71DEEE02472555271ADB1AA69E \ No newline at end of file diff --git a/Bios-Update-HP-v1.0/HpFirmwareUpdRec.exe b/Bios-Update-HP-v1.0/HpFirmwareUpdRec.exe new file mode 100644 index 0000000..1f09b86 Binary files /dev/null and b/Bios-Update-HP-v1.0/HpFirmwareUpdRec.exe differ diff --git a/Bios-Update-HP-v1.0/HpFirmwareUpdRec.txt b/Bios-Update-HP-v1.0/HpFirmwareUpdRec.txt new file mode 100644 index 0000000..4efcb91 --- /dev/null +++ b/Bios-Update-HP-v1.0/HpFirmwareUpdRec.txt @@ -0,0 +1,81 @@ +HP Firmware Update and Recovery + +The purpose of the HP Firmware Update and Recovery Utility is to provide a method for end-users +to update the system BIOS, ME (Intel only), and other supported firmware on a system running MS Windows. + +NOTES: + 1. [Path]\HPFIRMWAREUPDREC -? will display the available options for this utility. + + 2. If the system has a BIOS Setup password enabled, then HPFIRMWAREUPDREC will prompt + for the password to be entered before completing the update process. + +USAGE: + + 1. Close all other applications before launching HPFIRMWAREUPDREC. The system will + restart to apply the update. + + 2. Open the folder containing the application and firmware binary file. Double-click + on the HPFIRMWAREUPDREC icon. + + 3. HPFIRMWAREUPDREC will inform the user that a firmware update is about to occur. + + 4. The version of the firmware image in the binary file and the version of the + current system firmware are displayed. Once OK is selected the system will restart + to begin the update process. + + 5. Upon completion, the user is notified that the firmware update was successful. + Select Restart. + + 6. On restart, you may see the firmware performing the final update, and the system + may reset several times before loading the operating system. + + 7. When the system starts Windows, the system firmware update is complete. + + +ADVANCED USAGE: + + 1. Close all other applications before launching HPFIRMWAREUPDREC. + + 2. On the Windows Task Bar select Start, then Run, and enter + the following on the command line: + [Path]\HPFIRMWAREUPDREC -f[bin file] + + 3. HPFIRMWAREUPDREC will inform the user that a firmware update is about to occur. + + 4. The version of the firmware image in the [bin file] and the version of the + current system firmware are displayed. Once OK is selected the system will + restart to begin the update process. + + 5. Upon completion, the user is notified that the firmware update was successful. + Select Restart. + + 6. On restart, you may see the firmware performing the final update, and the system + may reset several times before loading the operating system. + + 7. When the system starts Windows, the system firmware update is complete. + + + +Command Line Options + + +-fBIN-file Specifies the path to the .BIN image file, and does not change the working + directory?from the location of the utility. Default is *.BIN in the executable + folder. Valid with all other options. + +-ppassword-file Specify encrypted password file created with the HpqPswd utility. Valid with + all other options. + +-s Silent mode. Suppresses all output. + +-b If BitLocker with TPM is in use, automatically suspend it. + +-? Show the same usage dialog that appears if an invalid command line is detected. + This options overrides all other options, including -s. + + +Copyright (c) 2020 HP Development Company, L.P. + + +Product names mentioned herein may be trademarks and/or registered trademarks +of their respective companies. diff --git a/Bios-Update-HP-v1.0/HpFirmwareUpdRec64.exe b/Bios-Update-HP-v1.0/HpFirmwareUpdRec64.exe new file mode 100644 index 0000000..aace2fb Binary files /dev/null and b/Bios-Update-HP-v1.0/HpFirmwareUpdRec64.exe differ diff --git a/Bios-Update-HP-v1.0/HpqPswd.exe b/Bios-Update-HP-v1.0/HpqPswd.exe new file mode 100644 index 0000000..043d3af Binary files /dev/null and b/Bios-Update-HP-v1.0/HpqPswd.exe differ diff --git a/Bios-Update-HP-v1.0/HpqPswd.txt b/Bios-Update-HP-v1.0/HpqPswd.txt new file mode 100644 index 0000000..03eb357 --- /dev/null +++ b/Bios-Update-HP-v1.0/HpqPswd.txt @@ -0,0 +1,29 @@ +HP Password Encryption Utility Client Usage Guide + +HPQPswd is a utility for saving a BIOS Setup Password to an encrypted file. +This file can be provided to HP BIOS update utilities for automated scripting, +to avoid user prompting. + +Command Line Switches + +Command Result + +-p"password" BIOS Setup Password to encrypt. Quotes are optional. +-f"filename" File pathname to create. Quotes are optional. +-s Silent mode. Requires p and f options. +-? Show usage. + +Requirements: + +- AES 256 encryption is used. +- User interface prompts for password, verification, and destination file. +- Browse supported for file location. +- Command line options are provided to support automated silent mode execution. +- No dependencies on other software. +- Support password max length of 32 Unicode characters. + + +Copyright (c) 2020 HP Development Company, L.P. + +Product names mentioned herein may be trademarks and/or registered trademarks +of their respective companies. diff --git a/Bios-Update-HP-v1.0/HpqPswd64.exe b/Bios-Update-HP-v1.0/HpqPswd64.exe new file mode 100644 index 0000000..7668cda Binary files /dev/null and b/Bios-Update-HP-v1.0/HpqPswd64.exe differ diff --git a/Bios-Update-HP-v1.0/T37_01082000.bin b/Bios-Update-HP-v1.0/T37_01082000.bin new file mode 100644 index 0000000..7e0f991 Binary files /dev/null and b/Bios-Update-HP-v1.0/T37_01082000.bin differ diff --git a/Bios-Update-HP-v1.0/T37_01082000.inf b/Bios-Update-HP-v1.0/T37_01082000.inf new file mode 100644 index 0000000..a81533e --- /dev/null +++ b/Bios-Update-HP-v1.0/T37_01082000.inf @@ -0,0 +1,57 @@ + +; Copyright (C) 2022 HP Development Company. L.P. All Rights Reserved. + +[Version] +Signature = "$WINDOWS NT$" +Provider = %Provider% +Class = Firmware +ClassGuid = {f2e7dd72-6468-4e36-b6f1-6488f42c1b52} +DriverVer = 03/13/2022,1.8.20.0 +CatalogFile = T37_01082000.cat +PnpLockdown = 1 + +[Manufacturer] +%MfgName% = Firmware,NTx86, NTamd64, NTarm + +[Firmware.NTx86] +%FirmwareDesc% = Firmware_Install,UEFI\RES_{ea11c3ed-db24-4c6b-bede-4940ea19cb84} + +[Firmware.NTamd64] +%FirmwareDesc% = Firmware_Install,UEFI\RES_{ea11c3ed-db24-4c6b-bede-4940ea19cb84} + +[Firmware.NTarm] +%FirmwareDesc% = Firmware_Install,UEFI\RES_{ea11c3ed-db24-4c6b-bede-4940ea19cb84} + +[Firmware_Install.NT] +CopyFiles = Firmware_CopyFiles + +[Firmware_CopyFiles] +T37_01082000.bin + +[Firmware_Install.NT.Hw] +AddReg = Firmware_AddReg + +[Firmware_AddReg] +HKR,,FirmwareId,,{ea11c3ed-db24-4c6b-bede-4940ea19cb84} +HKR,,FirmwareVersion,%REG_DWORD%,0x01081400 +HKR,,FirmwareFilename,,{ea11c3ed-db24-4c6b-bede-4940ea19cb84}\T37_01082000.bin + +[SourceDisksNames] +1 = %DiskName% + +[SourceDisksFiles] +T37_01082000.bin = 1 + +[DestinationDirs] +DefaultDestDir = %DIRID_WINDOWS%,Firmware\{ea11c3ed-db24-4c6b-bede-4940ea19cb84} ; %SystemRoot%\Firmware + +[Strings] +; localizable +Provider = "HP Inc." +MfgName = "HP Inc." +FirmwareDesc = "HP T37 System Firmware" +DiskName = "Firmware Update" + +; non-localizable +DIRID_WINDOWS = 10 +REG_DWORD = 0x00010001 diff --git a/Bios-Update-HP-v1.0/T76_01082000.bin b/Bios-Update-HP-v1.0/T76_01082000.bin new file mode 100644 index 0000000..5a07954 Binary files /dev/null and b/Bios-Update-HP-v1.0/T76_01082000.bin differ diff --git a/Bios-Update-HP-v1.0/T76_01082000.inf b/Bios-Update-HP-v1.0/T76_01082000.inf new file mode 100644 index 0000000..db1ca77 --- /dev/null +++ b/Bios-Update-HP-v1.0/T76_01082000.inf @@ -0,0 +1,57 @@ + +; Copyright (C) 2022 HP Development Company. L.P. All Rights Reserved. + +[Version] +Signature = "$WINDOWS NT$" +Provider = %Provider% +Class = Firmware +ClassGuid = {f2e7dd72-6468-4e36-b6f1-6488f42c1b52} +DriverVer = 03/11/2022,1.8.20.0 +CatalogFile = T76_01082000.cat +PnpLockdown = 1 + +[Manufacturer] +%MfgName% = Firmware,NTx86, NTamd64, NTarm + +[Firmware.NTx86] +%FirmwareDesc% = Firmware_Install,UEFI\RES_{563e71f8-8344-418c-a722-9b55c56997e5} + +[Firmware.NTamd64] +%FirmwareDesc% = Firmware_Install,UEFI\RES_{563e71f8-8344-418c-a722-9b55c56997e5} + +[Firmware.NTarm] +%FirmwareDesc% = Firmware_Install,UEFI\RES_{563e71f8-8344-418c-a722-9b55c56997e5} + +[Firmware_Install.NT] +CopyFiles = Firmware_CopyFiles + +[Firmware_CopyFiles] +T76_01082000.bin + +[Firmware_Install.NT.Hw] +AddReg = Firmware_AddReg + +[Firmware_AddReg] +HKR,,FirmwareId,,{563e71f8-8344-418c-a722-9b55c56997e5} +HKR,,FirmwareVersion,%REG_DWORD%,0x01081400 +HKR,,FirmwareFilename,,{563e71f8-8344-418c-a722-9b55c56997e5}\T76_01082000.bin + +[SourceDisksNames] +1 = %DiskName% + +[SourceDisksFiles] +T76_01082000.bin = 1 + +[DestinationDirs] +DefaultDestDir = %DIRID_WINDOWS%,Firmware\{563e71f8-8344-418c-a722-9b55c56997e5} ; %SystemRoot%\Firmware + +[Strings] +; localizable +Provider = "HP Inc." +MfgName = "HP Inc." +FirmwareDesc = "HP T76 System Firmware" +DiskName = "Firmware Update" + +; non-localizable +DIRID_WINDOWS = 10 +REG_DWORD = 0x00010001 diff --git a/Bios-Update-HP-v1.0/contents.txt b/Bios-Update-HP-v1.0/contents.txt new file mode 100644 index 0000000..23aa902 --- /dev/null +++ b/Bios-Update-HP-v1.0/contents.txt @@ -0,0 +1,35 @@ +FILES INCLUDED IN THIS PACKAGE: + +BCUsignature32.dll +BCUsignature64.dll +Bios Flash.htm (How to Use documentation) +History.txt (Softpaq release history) +HPFIRMWAREUPDREC.exe +HPFIRMWAREUPDREC64.exe +HPFIRMWAREUPDREC.txt +HpqPswd.exe +HpqPswd64.exe +HpqPswd.txt +logo.bmp +contents.txt (this file) +license.txt (copy of Softpaq license text) +T76_xxxxxx.bin (firmware image file) +T76_xxxxxx.inf (firmware install map) +T37_xxxxxx.bin (firmware image file) +T37_xxxxxx.inf (firmware install map) + +HpFirmwareUpdRec.exe - A utility to locally update the system firmware on + individual systems in Microsoft Windows. + +HpFirmwareUpdRec64.exe - 64-bit version of HpFirmwareUpdRec.exe + + +HPQ Password Utility - HPQPswd is a utility for saving a BIOS Setup Password to + an encrypted file. This file is provided to HP firmware update + utilities for automated scripting to avoid user prompting. + + +Copyright (c) 2020 HP Development Company, L.P. + +Product names mentioned herein may be trademarks and/or registered trademarks +of their respective companies. diff --git a/Bios-Update-HP-v1.0/license.txt b/Bios-Update-HP-v1.0/license.txt new file mode 100644 index 0000000..567c6da --- /dev/null +++ b/Bios-Update-HP-v1.0/license.txt @@ -0,0 +1,49 @@ +PLEASE READ CAREFULLY BEFORE USING THIS SOFTWARE OR SOFTWARE AVAILABLE ON AN HP PRODUCT: +This End-User license Agreement ("EULA") is a legal agreement between (a) you (either an individual or a single entity) and (b) HP Inc. ("HP") that governs your use of any Software Product, installed on or made available by HP for use as a standalone product or with your HP product ("HP Product") that is not otherwise subject to a separate license agreement between you and HP or its suppliers. The term "Software Product" includes application software, firmware, operating systems, drivers, and any other types of software and may include associated media, printed materials, and online or electronic documentation. +AN AMENDMENT OR ADDENDUM TO THIS EULA MAY ACCOMPANY THE HP PRODUCT OR THE SOFTWARE PRODUCT. IN THE EVENT OF A CONFLICT BETWEEN ANY SUCH AMENDMENT OR ADDENDUM AND THIS EULA, THE TERMS OF THE AMENDMENT OR ADDENDUM SHALL CONTROL. +RIGHTS IN THE SOFTWARE PRODUCT ARE OFFERED ONLY ON THE CONDITION THAT YOU AGREE TO ALL TERMS AND CONDITIONS OF THIS EULA. BY INSTALLING, COPYING, DOWNLOADING, OR OTHERWISE USING THE SOFTWARE PRODUCT, YOU AGREE TO BE BOUND BY THE TERMS OF THIS EULA. IF YOU DO NOT ACCEPT THESE LICENSE TERMS, YOUR SOLE REMEDY IS TO RETURN THE ENTIRE UNUSED PRODUCT (HARDWARE AND SOFTWARE) WITHIN 14 DAYS FOR A REFUND SUBJECT TO THE REFUND POLICY OF YOUR PLACE OF PURCHASE. +THIS EULA IS A GLOBAL AGREEMENT AND IS NOT SPECIFIC TO ANY PARTICULAR COUNTRY, STATE OR TERRITORY. IF YOU ACQUIRED THE HP PRODUCT OR THE SOFTWARE PRODUCT AS A CONSUMER WITHIN THE MEANING OF RELEVANT CONSUMER LEGISLATION IN YOUR COUNTRY, STATE OR TERRITORY, THEN DESPITE ANYTHING TO THE CONTRARY IN THIS EULA, NOTHING IN THIS EULA AFFECTS ANY NON-EXCLUDABLE STATUTORY RIGHTS OR REMEDIES THAT YOU MAY HAVE UNDER SUCH CONSUMER LEGISLATION; THIS EULA IS SUBJECT TO THOSE RIGHTS AND REMEDIES. +1. GRANT OF LICENSE. HP grants you the following rights provided you comply with all terms and conditions of this EULA: +a. Use. You may use the Software Product on a single HP Product. If the Software Product is provided to you via the internet and was originally licensed for use on more than one HP Product, you may install and use the Software Product only on those HP Products. You may not separate component parts of the Software Product for use on more than one HP Product. You do not have the right to distribute the Software Product. You may load the Software Product into your HP Product’s temporary memory (RAM) for purposes of using the Software Product. +b. Storage. You may copy the Software Product into the local memory or storage device of the HP Product. +c. Copying. You may make archival or back-up copies of the Software Product, provided the copy contains all of the original Software Product's proprietary notices and that it is used only for back-up purposes. +d. Reservation of Rights. To the maximum extent permitted by applicable law, HP and its suppliers reserve all rights not expressly granted to you in this EULA. +e. Freeware. Notwithstanding the terms and conditions of this EULA, all or any portion of the Software Product which constitutes non-proprietary HP software or software provided under public license by third parties ("Freeware"), is licensed to you subject to the terms and conditions of the software license agreement accompanying such Freeware whether in the form of a discrete agreement, shrink wrap license or electronic license terms accepted at time of download. Use of the Freeware by you shall be governed entirely by the terms and conditions of such license. +f. Recovery Solution. Any software recovery solution provided with/for your HP Product, whether in the form of a hard disk drive-based solution, an external media-based recovery solution (e.g. CD or DVD) or an equivalent solution delivered in any other form, may only be used for restoring the hard disk of the HP Product with/for which the recovery solution was originally purchased. The use of any Microsoft operating system software contained in such recovery solution shall be governed by the Microsoft License Agreement. +2. UPGRADES. To use a Software Product identified as an upgrade, you must first be licensed for the original Software Product identified by HP as eligible for the upgrade. After upgrading, you may no longer use the original Software Product that formed the basis for your upgrade eligibility as a separate Software Product. +3. ADDITIONAL SOFTWARE. This EULA applies to updates or supplements to the original Software Product provided by HP unless HP provides other terms along with the update or supplement. In case of a conflict between such terms, the other terms will prevail. +4. TRANSFER. +a. Third Party. The initial user of the Software Product may make a one-time transfer of the Software Product to another end user. Any transfer must include all component parts, media, printed materials, this EULA, and if applicable, the Certificate of Authenticity. The transfer may not be an indirect transfer, such as a consignment. Prior to the transfer, the end user receiving the transferred product must agree to all the EULA terms. Upon transfer of the Software Product, your license is automatically terminated. +b. Restrictions. You may not rent, lease, or lend the Software Product or use the Software Product for commercial timesharing or bureau use. You may not sublicense, assign, or transfer the license or Software Product except as expressly provided in this EULA. +5. PROPRIETARY RIGHTS. All intellectual property rights in the Software Product and user documentation are owned by HP or its suppliers and are protected by law, including but not limited to United States copyright, trade secret, and trademark law, as well as other applicable laws and international treaty provisions. You shall not remove any product identification, copyright notices, or proprietary restrictions from the Software Product. +6. LIMITATION ON REVERSE ENGINEERING. You may not reverse engineer, decompile, or disassemble the Software Product, except and only to the extent that the right to do so is mandated under applicable law notwithstanding this limitation or it is expressly provided for in this EULA. +7. TERM. This EULA is effective unless terminated or rejected. This EULA will also terminate upon conditions set forth elsewhere in this EULA or if you fail to comply with any term or condition of this EULA. +8. NOTICE OF DATA COLLECTION. HP and its affiliates may collect, combine, and use device and individual user information you provide in relation to support services related to the Software Product. HP will not use this information to market to you without your consent. Learn More about HP data collection practices at www.hp.com/go/privacy. +9. DISCLAIMER OF WARRANTIES. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, HP AND ITS SUPPLIERS PROVIDE THE SOFTWARE PRODUCT "AS IS" AND WITH ALL FAULTS, AND HEREBY DISCLAIM ALL OTHER WARRANTIES, DUTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, WARRANTIES: (i) OF FITNESS FOR A PARTICULAR PURPOSE; (ii) OF MERCHANTABILITY; (iii) OF TITLE, (iv) OF NONINFRINGEMENT, (v) THAT THE SOFTWARE PRODUCT WILL FUNCTION WITH NON-HP SUPPLIES OR ACCESSORIES; AND (vi) OF LACK OF VIRUSES ALL WITH REGARD TO THE SOFTWARE PRODUCT. Some states/jurisdictions do not allow exclusion of implied warranties or limitations on the duration of implied warranties, so the above disclaimer may not apply to you in its entirety. +10. LIMITATION OF LIABILITY. Subject to local law, notwithstanding any damages that you might incur, the entire liability of HP and any of its suppliers under any provision of this EULA and your exclusive remedy for all of the foregoing shall be limited to the greater of the amount actually paid by you separately for the Software Product or U.S. $5.00. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL HP OR ITS SUPPLIERS BE LIABLE FOR (A) ANY LOSS OF PROFITS, BUSINESS, REVENUE, ANTICIPATED SAVINGS, GOODWILL, DATA, OR CONTRACTS, (B) ANY TYPE OF SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER, (C) BUSINESS INTERRUPTION, (D) PERSONAL INJURY, OR (E) LOSS OF PRIVACY, ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF OR INABILITY TO USE THE SOFTWARE PRODUCT, OR OTHERWISE IN CONNECTION WITH ANY PROVISION OF THIS EULA, EVEN IF HP OR ANY SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES AND EVEN IF THE REMEDY FAILS OF ITS ESSENTIAL PURPOSE. Some states/jurisdictions do not allow the exclusion or limitation of incidental, consequential, product liability, or certain direct damages, so the above limitation or exclusion may not apply to you. +11. U.S. GOVERNMENT CUSTOMERS. Consistent with FAR 12.211 and 12.212, Commercial Computer Software, Computer Software Documentation, and Technical Data for Commercial Items are licensed to the U.S. Government under HP's standard commercial license. +12. COMPLIANCE WITH EXPORT LAWS. You shall comply with all laws and regulations of the United States and other countries ("Export Laws") to assure that the Software Product is not (1) exported, directly or indirectly, in violation of Export Laws, or (2) used for any purpose prohibited by Export Laws, including, without limitation, nuclear. +13. CAPACITY AND AUTHORITY TO CONTRACT. You represent that you are of the legal age of majority in your state or country of residence and, if applicable, you are duly authorized by your employer to enter into this contract. +14. APPLICABLE LAW. If the Software Product is provided as part of an HP Product, this EULA is governed by the laws of the country, state, or territory in which the HP Product was purchased. If the Software Product is being licensed to you as a standalone product, this EULA is governed by the laws of the State of California, U.S.A. +15. ENTIRE AGREEMENT. This EULA (including any addendum or amendment to this EULA which is included with the HP Product) is the entire agreement between you and HP relating to the Software Product, and this EULA supersedes all prior or contemporaneous oral or written communications, proposals, and representations with respect to the Software Product or any other subject matter covered by this EULA. To the extent the terms of any HP policies or programs for support services conflict with the terms of this EULA, the terms of this EULA shall control. Should any term, condition or provision of this EULA be held invalid or unenforceable as to any party or circumstance, such ruling shall not affect the validity and enforceability of the remaining terms, conditions, and provisions of this EULA. +16. CONSUMER RIGHTS. Consumers in some countries, states, or territories may have the benefit of certain statutory rights, remedies, localizations, and limitations under consumer legislation in respect of which HP’s liability cannot lawfully be excluded or limited. Notwithstanding anything to the contrary in this EULA, if you acquired the HP Product or licensed the Software Product as a consumer within the meaning of relevant consumer legislation in your country, state, or territory, the provisions of this EULA (including the disclaimers of warranties, limitations and exclusion of liability) must be read subject to applicable law and apply only to the maximum extent permitted by such applicable law. For example: +AUSTRALIA: If you acquired the Software Product as a consumer within the meaning of the ‘Australian Consumer Law’ under the Australian Competition and Consumer Act 2010 (Cth), then despite any other provision of this EULA: +(1) The Software Product comes with guarantees that cannot be excluded under the Australian Consumer Law, including that goods will be of acceptable quality and services will be supplied with due care and skill. If HP fails to comply with any such consumer guarantee, HP’s or HP’s licensors’ liability is limited to the following: +(A) in connection with the provision of warranty and support services for the Software Product, to any one or more of the following (at HP’s discretion): (i) the supplying of the services again; or (ii) the payment of the costs of having the services supplied again; and +(B) in connection with the provision of the Software Product, to any one or more of the following (at HP’s discretion): (i) the replacement of the Software Product or the supply of equivalent software; (ii) the repair of the Software Product; (iii) the payment of the costs of replacing the Software Product or of acquiring equivalent software; or (iv) the payment of the costs of having the Software Product repaired; and +(C) otherwise, to the maximum extent permitted by law; +(2) Nothing in this EULA excludes, restricts, or modifies any right or remedy, or any guarantee, warranty, or other term or condition implied or imposed by the Australian Consumer Law which cannot be lawfully excluded or limited; and +(3) The benefits provided to you by the warranties in this EULA are in addition to other rights and remedies available to you under applicable law in relation to the goods or services to which the warranty relates. +If you think that you are entitled to any warranty under this EULA or any of the above remedies, please contact HP at: +HP PPS Australia Pty Ltd +353 Burwood Hwy +Forest Hill +VIC 3131 +Australia +To initiate a support request or warranty claim, please call 13 10 47 (within Australia) or +61 2 8278 1039 (if dialing internationally) or visit www.hp.com.au and select the “Customer Service” option for the most current list of phone support numbers. +NEW ZEALAND: If you are purchasing goods for personal, domestic or household use or consumption and not for the purpose of a business as a New Zealand consumer, you are entitled to repair, replacement, or refund for a failure, as well as compensation for other reasonably foreseeable loss or damage as a result of the failure. +© Copyright 2015, 2021 HP Development Company, L.P. +The information contained herein is subject to change without notice. The only warranties for HP products and services are set forth in the express warranty statements accompanying such products and services. Nothing herein should be construed as constituting an additional warranty. HP shall not be liable for technical or editorial errors or omissions contained herein. +Third Edition: June 2021 +First Edition: August 2015 +Document Part Number: 817678-003 diff --git a/Bios-Update-HP-v1.0/logo.bmp b/Bios-Update-HP-v1.0/logo.bmp new file mode 100644 index 0000000..6d7553e Binary files /dev/null and b/Bios-Update-HP-v1.0/logo.bmp differ diff --git a/Bios-Update-HP-v1.0/readme.md b/Bios-Update-HP-v1.0/readme.md new file mode 100644 index 0000000..a8fd224 --- /dev/null +++ b/Bios-Update-HP-v1.0/readme.md @@ -0,0 +1,24 @@ +# HP BIOS Update (Batch) + +Automates **HP BIOS** updates using HP tools (`HpFirmwareUpdRec.exe` / `HPBIOSUPDREC.exe`) and optional `install.cmd`, with consistent logging and exit handling. + +## How it works +- Detects architecture to call proper binaries (`sysnative` when needed). +- Finds the **first subfolder** next to the script and treats it as the **BIOS package folder**. +- Cleans previous `HpFirmwareUpdRec.log`, then runs: + - `HpFirmwareUpdRec.exe -s -r -h -b -f""` if present + - `HPBIOSUPDREC.exe -s -b -r -a` if present + - `install.cmd` if present +- Writes detailed logs to **`C:\pnpDrivers\BIOS.log`** (including result code). + +## Exit codes (mapped) +- **3010** → SUCCESS: *Reboot required* +- **1602** → CANCEL: *Dependency prevents completion* +- **273** → CANCEL: *Same BIOS version (no update)* +- **282** → CANCEL: *Attempted downgrade (older version)* + +## Requirements +- Run as **Administrator**. +- Place HP BIOS package files in a **subfolder** next to the `.cmd/.bat`. +- Supported tools inside that folder: `HpFirmwareUpdRec.exe` and/or `HPBIOSUPDREC.exe` (from HP). + diff --git a/Bios-Update-HP-v2.0/install.cmd b/Bios-Update-HP-v2.0/install.cmd new file mode 100644 index 0000000..0f8efeb --- /dev/null +++ b/Bios-Update-HP-v2.0/install.cmd @@ -0,0 +1,4 @@ +xcopy "%~dp0module" "c:\Program Files\WindowsPowerShell\Modules\" /S /Y /E +powershell -executionpolicy bypass -file "%~dp0updatebiosHP.ps1" + +:: NEED Reboot manually or schedule \ No newline at end of file diff --git a/Bios-Update-HP-v2.0/module/HP.ClientManagement/HP.ClientManagement.psd1 b/Bios-Update-HP-v2.0/module/HP.ClientManagement/HP.ClientManagement.psd1 new file mode 100644 index 0000000..e677129 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.ClientManagement/HP.ClientManagement.psd1 @@ -0,0 +1,294 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + + + +@{ + + RootModule = 'HP.ClientManagement.psm1' + NestedModules = @( + 'HP.UEFI' + ) + #FullModuleVersion = '1.7.2.774' + ModuleVersion = '1.7.2' + GUID = 'e5f40402-f5b0-42f9-b10b-28910aacdf5b' + Author = 'HP Development Company, L.P.' + CompanyName = 'HP Inc' + Copyright = '(C) Copyright 2018-2024 HP Development Company, L.P.' + Description = 'Device and BIOS management module for HP Client Management Script Library' + PowerShellVersion = '5.1' + + FunctionsToExport = + 'Clear-HPBIOSPowerOnPassword', + 'Clear-HPBIOSSetupPassword', + 'Get-HPBIOSAuthor', + 'Get-HPBIOSPowerOnPasswordIsSet', + 'Get-HPBIOSSetting', + 'Get-HPBIOSSettingsList', + 'Get-HPBIOSSettingValue', + 'Get-HPBIOSSetupPasswordIsSet', + 'Get-HPBIOSUpdates', + 'Get-HPBIOSUUID', + 'Get-HPBIOSVersion', + 'Get-HPDeviceAssetTag', + 'Get-HPDeviceBootInformation', + 'Get-HPDeviceDetails', + 'Get-HPDeviceManufacturer', + 'Get-HPDeviceModel', + 'Get-HPDevicePartNumber', + 'Get-HPDeviceProductID', + 'Get-HPDeviceSerialNumber', + 'Get-HPDeviceUptime', + 'Get-HPDeviceUUID', + 'Set-HPPrivateBIOSSettingValuePayload', + 'Set-HPBIOSPowerOnPassword', + 'Set-HPBIOSSettingDefaults', + 'Set-HPPrivateBIOSSettingDefaultsPayload', + 'Set-HPBIOSSettingValue', + 'Set-HPBIOSSettingValuesFromFile', + 'Set-HPBIOSSetupPassword', + 'Get-HPUEFIVariable', + 'Set-HPUEFIVariable', + 'Remove-HPUEFIVariable', + 'Get-HPBIOSWindowsUpdate', + 'Add-HPBIOSWindowsUpdateScripts', + 'Add-PSScriptsEntry', + 'Remove-PSScriptsEntry', + 'Get-HPCMSLEnvironment' + + PrivateData = @{ + PSData = @{ + LicenseUri = 'https://developers.hp.com/node/11493' + RequireLicenseAcceptance = $true + } # End of PSData hashtable + } # End of PrivateData hashtable + + +} + + +# SIG # Begin signature block +# MIIoHgYJKoZIhvcNAQcCoIIoDzCCKAsCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDedMvvVZTL7OSP +# b5aN/4eSDUMrUAvXq4MkWScFzsBIGqCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6jCCGeYCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIH9fMeb7 +# DuVl6sbFU16va6RD1ti7T0k5qI0esfs3ljUWMA0GCSqGSIb3DQEBAQUABIIBgJ9j +# +ZNtx1yh3JxrOqP/P+j/wwwyhj4jKavlDGRT7fgxN0B9zVjateakMTZ3cPlFmuVK +# VHGYqvNhnZXl8fOlvcUBs/egEtGdMmug9NhEOsU0fA6QqMkYxGc9XyAVsR+3nbbG +# Q+37EQzZ2d7kfS6QqUtynrFLDgnwt8Kz3jLsFLPZaU9msHD3qTLKWxWwBrKC8+Hf +# pEsofNPGPefwzLZ1qwGDmE4c34iB0IK+Zp6hhjf8CascKLKZVmO8POXAawQVQLrJ +# QJR13wM41ifkvGQw14SbMQgaXvtywJ5FzoU8TCkb7xspgtsTVWmTzI02Fv+BFCSS +# 69Pc5z+eTof8u0RWwZDMowLx5IiYgfjDPJgRVI3kKklX2NFnpSBF1q4qPq82Oqs7 +# 6YdZhBp1Ke5KE0gOlca2E6bkFYloj4QE7rYdM9KtW7G8RiMOmwdBc0vDCEVZU19z +# ml8YX/7oLqlcvbY7v/q8nDJQdRmpfNJatLRfnbKP2qpd+N+9wFycxzDHRQ5jtaGC +# F0Awghc8BgorBgEEAYI3AwMBMYIXLDCCFygGCSqGSIb3DQEHAqCCFxkwghcVAgED +# MQ8wDQYJYIZIAWUDBAIBBQAweAYLKoZIhvcNAQkQAQSgaQRnMGUCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCCKJ/TgBR6WwZ6pcjTQ6ypECvjw66p0EAi5 +# 9zBO9zY3WQIRAJBmUoL3lsA5N1PeHuzHMB8YDzIwMjQwODI3MTY1NTUwWqCCEwkw +# ggbCMIIEqqADAgECAhAFRK/zlJ0IOaa/2z9f5WEWMA0GCSqGSIb3DQEBCwUAMGMx +# CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMy +# RGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcg +# Q0EwHhcNMjMwNzE0MDAwMDAwWhcNMzQxMDEzMjM1OTU5WjBIMQswCQYDVQQGEwJV +# UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xIDAeBgNVBAMTF0RpZ2lDZXJ0IFRp +# bWVzdGFtcCAyMDIzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo1NF +# hx2DjlusPlSzI+DPn9fl0uddoQ4J3C9Io5d6OyqcZ9xiFVjBqZMRp82qsmrdECmK +# HmJjadNYnDVxvzqX65RQjxwg6seaOy+WZuNp52n+W8PWKyAcwZeUtKVQgfLPywem +# MGjKg0La/H8JJJSkghraarrYO8pd3hkYhftF6g1hbJ3+cV7EBpo88MUueQ8bZlLj +# yNY+X9pD04T10Mf2SC1eRXWWdf7dEKEbg8G45lKVtUfXeCk5a+B4WZfjRCtK1ZXO +# 7wgX6oJkTf8j48qG7rSkIWRw69XloNpjsy7pBe6q9iT1HbybHLK3X9/w7nZ9MZll +# R1WdSiQvrCuXvp/k/XtzPjLuUjT71Lvr1KAsNJvj3m5kGQc3AZEPHLVRzapMZoOI +# aGK7vEEbeBlt5NkP4FhB+9ixLOFRr7StFQYU6mIIE9NpHnxkTZ0P387RXoyqq1AV +# ybPKvNfEO2hEo6U7Qv1zfe7dCv95NBB+plwKWEwAPoVpdceDZNZ1zY8SdlalJPrX +# xGshuugfNJgvOuprAbD3+yqG7HtSOKmYCaFxsmxxrz64b5bV4RAT/mFHCoz+8LbH +# 1cfebCTwv0KCyqBxPZySkwS0aXAnDU+3tTbRyV8IpHCj7ArxES5k4MsiK8rxKBMh +# SVF+BmbTO77665E42FEHypS34lCh8zrTioPLQHsCAwEAAaOCAYswggGHMA4GA1Ud +# DwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATAfBgNVHSMEGDAWgBS6 +# FtltTYUvcyl2mi91jGogj57IbzAdBgNVHQ4EFgQUpbbvE+fvzdBkodVWqWUxo97V +# 40kwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp +# Z2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNybDCB +# kAYIKwYBBQUHAQEEgYMwgYAwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj +# ZXJ0LmNvbTBYBggrBgEFBQcwAoZMaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t +# L0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNy +# dDANBgkqhkiG9w0BAQsFAAOCAgEAgRrW3qCptZgXvHCNT4o8aJzYJf/LLOTN6l0i +# kuyMIgKpuM+AqNnn48XtJoKKcS8Y3U623mzX4WCcK+3tPUiOuGu6fF29wmE3aEl3 +# o+uQqhLXJ4Xzjh6S2sJAOJ9dyKAuJXglnSoFeoQpmLZXeY/bJlYrsPOnvTcM2Jh2 +# T1a5UsK2nTipgedtQVyMadG5K8TGe8+c+njikxp2oml101DkRBK+IA2eqUTQ+OVJ +# dwhaIcW0z5iVGlS6ubzBaRm6zxbygzc0brBBJt3eWpdPM43UjXd9dUWhpVgmagNF +# 3tlQtVCMr1a9TMXhRsUo063nQwBw3syYnhmJA+rUkTfvTVLzyWAhxFZH7doRS4wy +# w4jmWOK22z75X7BC1o/jF5HRqsBV44a/rCcsQdCaM0qoNtS5cpZ+l3k4SF/Kwtw9 +# Mt911jZnWon49qfH5U81PAC9vpwqbHkB3NpE5jreODsHXjlY9HxzMVWggBHLFAx+ +# rrz+pOt5Zapo1iLKO+uagjVXKBbLafIymrLS2Dq4sUaGa7oX/cR3bBVsrquvczro +# SUa31X/MtjjA2Owc9bahuEMs305MfR5ocMB3CtQC4Fxguyj/OOVSWtasFyIjTvTs +# 0xf7UGv/B3cfcZdEQcm4RtNsMnxYL2dHZeUbc7aZ+WssBkbvQR7w8F/g29mtkIBE +# r4AQQYowggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqGSIb3DQEB +# CwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNV +# BAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQg +# Um9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMxCzAJBgNV +# BAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNl +# cnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggIi +# MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXHJQPE8pE3 +# qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMfUBMLJnOW +# bfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w1lbU5ygt +# 69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRktFLydkf3 +# YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYbqMFkdECn +# wHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUmcJgmf6Aa +# RyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP65x9abJTy +# UpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzKQtwYSH8U +# NM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo80VgvCON +# WPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjBJgj5FBAS +# A31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXcheMBK9Rp61 +# 03a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAd +# BgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF +# BwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln +# aWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJo +# dHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy +# bDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQEL +# BQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd4ksp+3CK +# Daopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiCqBa9qVbP +# FXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl/Yy8ZCaH +# bJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeCRK6ZJxur +# JB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYTgAnEtp/N +# h4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/a6fxZsNB +# zU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37xJV77Qpf +# MzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmLNriT1Oby +# F5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0YgkPCr2B +# 2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJRyvmfxqk +# hQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIFjTCCBHWg +# AwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +# EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +# cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcN +# MjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEVMBMG +# A1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +# HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqGSIb3DQEB +# AQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +# pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+ +# n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYykt +# zuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw +# 2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6Qu +# BX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC +# 5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK +# 3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3 +# IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEP +# lAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98 +# THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t9dmpsh3l +# GwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8w +# DgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0 +# cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0 +# cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MEUGA1Ud +# HwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz +# c3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAowCDAGBgRVHSAAMA0GCSqGSIb3DQEB +# DAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9mqyhhyzshV6pGrsi+IcaaVQi +# 7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxSA8hO0Cre+i1Wz/n096wwepqL +# sl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE1Od/6Fmo8L8vC6bp8jQ87PcDx4eo +# 0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSMb++hUD38dglohJ9vytsgjTVg +# HAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbObyMt9H5xaiNrIv8SuFQtJ37YOtnw +# toeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMYIDdjCCA3ICAQEwdzBjMQswCQYDVQQG +# EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0 +# IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAFRK/z +# lJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUAoIHRMBoGCSqGSIb3DQEJAzENBgsq +# hkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwODI3MTY1NTUwWjArBgsqhkiG +# 9w0BCRACDDEcMBowGDAWBBRm8CsywsLJD4JdzqqKycZPGZzPQDAvBgkqhkiG9w0B +# CQQxIgQgHVweUyFmAFUk+Kw93apyWspuATt5UhCuQtMRgNnkEm0wNwYLKoZIhvcN +# AQkQAi8xKDAmMCQwIgQg0vbkbe10IszR1EBXaEE2b4KK2lWarjMWr00amtQMeCgw +# DQYJKoZIhvcNAQEBBQAEggIAWCxDFo4zy71qfx6lUb5F/MNSjXiI9BYN0PTCGtRZ +# L1wPuWLLLtAXHqH2e9OXu0Q9SqtVln3QB8Tf7CbhI6D0vUa8HJSrea7v6vhxXug0 +# Mc3G2me/VjBVd94fN5z80mDGm4IM1d52psU1G+v6LlOOClq1CmuajfBbdcHELl9L +# nqMse2RbLr53k3JsD3eoZbP6x4YLOi0T3fXtBFHvwhSWClXM16TsIHKliD4Q07y7 +# gNul5B6091ThLUs6aU+ySYPKnDudOHDRInqVo+gaDGz0VcISKg1ZyHdHb8rnVDV1 +# 8Yv3pnNhXedGOazvUfq4VAU2T3/rtB1GBr0pJDaOPkQTANKE2+p15y/R5LOWHmBn +# TS/XaLNSp/c79QeoDU0bH4qRzuXf/IWPssD5qhm9G4e/BVKgUPiVUBM9kNw41Lmu +# qwIiePqvZWXe8+gjrp/VxZn8hBMnbS5WeFC0gIv6vu3H9b0tjlk3ES39no3t05Du +# x2rOgJNijsyVBIBZCUuC+3Mzhw4uz8YIi1NIyQNMrC8MuDhD3pmej6eDHvGBzzEP +# DzXscsVbc4Wu9F5P+e770/pytfBDG2nBghp22Uv+JViDgBVatWvjDyN2S6WszZRE +# Hvm53bo9kF4QTy/ZRQnCBZitF2hRqcAUIB/4Q2R746xE2ejQt+T5/qX0SyXP7pbH +# Vm8= +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.ClientManagement/HP.ClientManagement.psm1 b/Bios-Update-HP-v2.0/module/HP.ClientManagement/HP.ClientManagement.psm1 new file mode 100644 index 0000000..4a3ce12 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.ClientManagement/HP.ClientManagement.psm1 @@ -0,0 +1,3262 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + +using namespace HP.CMSLHelper + +Add-Type -AssemblyName System.Web +Set-StrictMode -Version 3.0 +#requires -Modules "HP.Private" + +# CMSL is normally installed in C:\Program Files\WindowsPowerShell\Modules +# but if installed via PSGallery and via PS7, it is installed in a different location +if (Test-Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll") { + Add-Type -Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll" +} +else{ + Add-Type -Path "$PSScriptRoot\..\..\HP.Private\1.7.2\HP.CMSLHelper.dll" +} + +<# +.SYNOPSIS + Retrieves an HP BIOS Setting object by name on the current device unless specified for another platform + +.DESCRIPTION + This command retrieves an HP BIOS Setting object by name on the current device unless specified for another platform. + +.PARAMETER Name + Specifies the name of the BIOS setting to retrieve. This parameter is mandatory and has no default value. + +.PARAMETER Format + Specifies the format of the result. The value must be one of the following values: + + - BCU: format as HP BIOS Config Utility input format + - CSV: format as a comma-separated values list + - XML: format as XML + - JSON: format as JSON + + If not specified, the default PowerShell formatting is used. + +.PARAMETER ComputerName +Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession + Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + +.NOTES + HP BIOS is required. + +.EXAMPLE + Get-HPBIOSSetting -Name "Serial Number" -Format BCU +#> +function Get-HPBIOSSetting { + [CmdletBinding(DefaultParameterSetName = 'NewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPBIOSSetting")] + param( + [Parameter(ParameterSetName = 'NewSession',Position = 0,Mandatory = $true)] + [Parameter(ParameterSetName = 'ReuseSession',Position = 0,Mandatory = $true)] + $Name, + [Parameter(ParameterSetName = 'NewSession',Position = 1,Mandatory = $false)] + [Parameter(ParameterSetName = 'ReuseSession',Position = 1,Mandatory = $false)] + [ValidateSet('XML','JSON','BCU','CSV')] + $Format, + [Parameter(ParameterSetName = 'NewSession',Position = 2,Mandatory = $false)] + [Alias('Target')] + [string]$ComputerName = ".", + [Parameter(ParameterSetName = 'ReuseSession',Position = 3,Mandatory = $true)] + [CimSession]$CimSession + ) + + $ns = getNamespace + Write-Verbose "Reading HP BIOS Setting '$Name' from $ns on '$ComputerName'" + $result = $null + + $params = @{ + Class = "HP_BIOSSetting" + Namespace = $ns + Filter = "Name='$name'" + } + + if ($PSCmdlet.ParameterSetName -eq 'NewSession') { + $params.CimSession = newCimSession -Target $ComputerName + } + if ($PSCmdlet.ParameterSetName -eq 'ReuseSession') { + $params.CimSession = $CimSession + } + + try { + $result = Get-CimInstance @params -ErrorAction stop + } catch [Microsoft.Management.Infrastructure.CimException] + { + if ($_.Exception.Message.trim() -eq "Access denied") + { + throw [System.UnauthorizedAccessException]"Access denied: Please ensure you have the rights to perform this operation." + } + throw [System.NotSupportedException]"$($_.Exception.Message): Please ensure this is a supported HP device." + } + + + if (-not $result) { + $Err = "Setting not found: '" + $name + "'" + throw [System.Management.Automation.ItemNotFoundException]$Err + } + Add-Member -InputObject $result -Force -NotePropertyName "Class" -NotePropertyValue $result.CimClass.CimClassName | Out-Null + Write-Verbose "Retrieved HP BIOS Setting '$name' ok." + + switch ($format) { + { $_ -eq 'CSV' } { return convertSettingToCSV ($result) } + { $_ -eq 'XML' } { return convertSettingToXML ($result) } + { $_ -eq 'BCU' } { return convertSettingToBCU ($result) } + { $_ -eq 'JSON' } { return convertSettingToJSON ($result) } + default { return $result } + } +} + + +<# + .SYNOPSIS + Retrieves the device UUID via standard OS providers on the current device unless specified for another platform + +.DESCRIPTION + This command retrieves the system UUID via standard OS providers. The result should normally match the result from the Get-HPBIOSUUID command. + +.PARAMETER ComputerName + Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession + Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + +.EXAMPLE + Get-HPDeviceUUID +#> +function Get-HPDeviceUUID () { + [CmdletBinding(DefaultParameterSetName = 'NewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPDeviceUUID")] + param( + [Parameter(ParameterSetName = 'NewSession',Position = 0,Mandatory = $false)] + [Alias('Target')] + [string]$ComputerName = ".", + [Parameter(ParameterSetName = 'ReuseSession',Position = 1,Mandatory = $true)] + [CimSession]$CimSession + ) + $params = @{ + ClassName = 'Win32_ComputerSystemProduct' + Namespace = 'root\cimv2' + } + if ($PSCmdlet.ParameterSetName -eq 'NewSession') { $params.CimSession = newCimSession -Target $ComputerName } + if ($PSCmdlet.ParameterSetName -eq 'ReuseSession') { $params.CimSession = $CimSession } + $obj = Get-CimInstance @params -ErrorAction stop + ([string](getWmiField $obj "UUID")).trim().ToUpper() +} + + +<# + .SYNOPSIS + Retrieves the BIOS UUID on the current device unless specified for another platform + +.DESCRIPTION + This command retrieves the system UUID from the BIOS. The result should normally match the result from the Get-HPDeviceUUID command. + +.PARAMETER ComputerName +Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession + Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.EXAMPLE + Get-HPBIOSUUID +#> +function Get-HPBIOSUUID { + [CmdletBinding(DefaultParameterSetName = 'NewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPBIOSUUID")] + param( + [Parameter(ParameterSetName = 'NewSession',Position = 0,Mandatory = $false)] + [Alias('Target')] + [string]$ComputerName = ".", + [Parameter(ParameterSetName = 'ReuseSession',Position = 1,Mandatory = $true)] + [CimSession]$CimSession + ) + + $params = @{ Name = 'Universally Unique Identifier (UUID)' } + if ($PSCmdlet.ParameterSetName -eq 'NewSession') { $params.CimSession = newCimSession -Target $ComputerName } + if ($PSCmdlet.ParameterSetName -eq 'ReuseSession') { $params.CimSession = $CimSession } + + $obj = Get-HPBIOSSetting @params -ErrorAction stop + if ($obj.Value -match '-') { + return (getFormattedBiosSettingValue $obj) + } + else { + $raw = ([guid]::new($obj.Value)).ToByteArray() + $raw[0],$raw[3] = $raw[3],$raw[0] + $raw[1],$raw[2] = $raw[2],$raw[1] + $raw[4],$raw[5] = $raw[5],$raw[4] + $raw[6],$raw[7] = $raw[7],$raw[6] + return ([guid]::new($raw)).ToString().ToUpper().trim() + } +} + + +<# +.SYNOPSIS + Retrieves the current BIOS version on the current device unless specified for another platform + +.DESCRIPTION + This command retrieves the current BIOS version. If the BIOS family is available and the -includeFamily parameter is specified, the BIOS family is also included in the result. + +.PARAMETER IncludeFamily + If specified, the BIOS family is included in the result. + +.PARAMETER ComputerName + Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession + Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.EXAMPLE + Get-HPBIOSVersion +#> +function Get-HPBIOSVersion { + [CmdletBinding(DefaultParameterSetName = 'NewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPBIOSVersion")] + param( + [Parameter(ParameterSetName = 'NewSession',Position = 0,Mandatory = $false)] + [Parameter(ParameterSetName = 'ReuseSession',Position = 0,Mandatory = $false)] + [switch]$IncludeFamily, + [Parameter(ParameterSetName = 'NewSession',Position = 1,Mandatory = $false)] + [Parameter(Position = 1,Mandatory = $false)] + [Alias('Target')] + [string]$ComputerName = ".", + [Parameter(ParameterSetName = 'ReuseSession',Position = 2,Mandatory = $true)] + [CimSession]$CimSession + ) + + $params = @{ + ClassName = 'Win32_BIOS' + Namespace = 'root\cimv2' + } + if ($PSCmdlet.ParameterSetName -eq 'NewSession') { $params.CimSession = newCimSession -Target $ComputerName } + if ($PSCmdlet.ParameterSetName -eq 'ReuseSession') { $params.CimSession = $CimSession } + $obj = Get-CimInstance @params -ErrorAction stop + $verfield = getWmiField $obj "SMBIOSBIOSVersion" + $ver = $null + + Write-Verbose "Received object with $verfield" + try { + $ver = extractBIOSVersion $verfield + } + catch { throw [System.InvalidOperationException]"The BIOS version on this system could not be parsed. This BIOS may not be supported." } + if ($includeFamily.IsPresent) { $result = $ver + " " + $verfield.Split()[0] } + else { $result = $ver } + $result.TrimStart("0").trim() +} + +<# +.SYNOPSIS + Retrieves the current BIOS author (manufacturer) on the current device unless specified for another platform + + +.DESCRIPTION + This command retrieves the BIOS manufacturer via the Win32_BIOS WMI class. In some cases, the BIOS manufacturer may be different from the device manufacturer. + +.PARAMETER ComputerName +Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession +Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.EXAMPLE + Get-HPBIOSAuthor +#> +function Get-HPBIOSAuthor { + [CmdletBinding(DefaultParameterSetName = 'NewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPBIOSAuthor")] + param( + [Parameter(ParameterSetName = 'NewSession',Position = 0,Mandatory = $false)] + [Alias('Target')] + [string]$ComputerName = ".", + [Parameter(ParameterSetName = 'ReuseSession',Position = 1,Mandatory = $true)] + [CimSession]$CimSession + ) + $params = @{ + ClassName = 'Win32_BIOS' + Namespace = 'root\cimv2' + } + if ($PSCmdlet.ParameterSetName -eq 'NewSession') { $params.CimSession = newCimSession -Target $ComputerName } + if ($PSCmdlet.ParameterSetName -eq 'ReuseSession') { $params.CimSession = $CimSession } + $obj = Get-CimInstance @params -ErrorAction stop + ([string](getWmiField $obj "Manufacturer")).trim() + +} + +<# +.SYNOPSIS + Retrieves the current device manufacturer on the current device unless specified for another platform + +.PARAMETER ComputerName +Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession + Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.DESCRIPTION + This command retrieves the current device manufacturer on the current device unless specified for another platform via Windows Management Instrumentation (WMI). In some cases, the BIOS manufacturer may be different from the device manufacturer. + +.EXAMPLE + Get-HPDeviceManufacturer +#> +function Get-HPDeviceManufacturer { + [CmdletBinding(DefaultParameterSetName = 'NewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPDeviceManufacturer")] + param( + [Parameter(ParameterSetName = 'NewSession',Position = 0,Mandatory = $false)] + [Alias('Target')] + [string]$ComputerName = ".", + [Parameter(ParameterSetName = 'ReuseSession',Position = 1,Mandatory = $true)] + [CimSession]$CimSession + ) + $params = @{ + ClassName = 'Win32_ComputerSystem' + Namespace = 'root\cimv2' + } + if ($PSCmdlet.ParameterSetName -eq 'NewSession') { $params.CimSession = newCimSession -Target $ComputerName } + if ($PSCmdlet.ParameterSetName -eq 'ReuseSession') { $params.CimSession = $CimSession } + $obj = Get-CimInstance @params -ErrorAction stop + ([string](getWmiField $obj "Manufacturer")).trim() +} + +<# +.SYNOPSIS + Retrieves the serial number on the current device unless specified for another platform + +.DESCRIPTION +This command retrieves the serial number on the current device unless specified for another platform via Windows Management Instrumentation (WMI). This command is equivalent to reading the SerialNumber property from the Win32_BIOS WMI class. If no parameters are specified, this command will create its own one-time-use CIMSession object using the current device and default the CIMSession to use DCOM protocol. + +.PARAMETER ComputerName +Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession +Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.EXAMPLE + Get-HPDeviceSerialNumber +#> +function Get-HPDeviceSerialNumber { + [CmdletBinding(DefaultParameterSetName = 'NewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPDeviceSerialNumber")] + param( + [Parameter(ParameterSetName = 'NewSession',Position = 0,Mandatory = $false)] + [Alias('Target')] + [string]$ComputerName = ".", + [Parameter(ParameterSetName = 'ReuseSession',Position = 1,Mandatory = $true)] + [CimSession]$CimSession + ) + $params = @{ + ClassName = 'Win32_BIOS' + Namespace = 'root\cimv2' + } + if ($PSCmdlet.ParameterSetName -eq 'NewSession') { $params.CimSession = newCimSession -Target $ComputerName } + if ($PSCmdlet.ParameterSetName -eq 'ReuseSession') { $params.CimSession = $CimSession } + $obj = Get-CimInstance @params -ErrorAction stop + + ([string](getWmiField $obj "SerialNumber")).trim() +} + +<# +.SYNOPSIS + Retrieves the official marketing name of the current device unless specified for another platform + +.DESCRIPTION + This command retrieves the official marketing name of the current device unless specified for another platform. + +.PARAMETER ComputerName +Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession +Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.EXAMPLE + Get-HPDeviceModel +#> +function Get-HPDeviceModel { + [CmdletBinding(DefaultParameterSetName = 'NewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPDeviceModel")] + param( + [Parameter(ParameterSetName = 'NewSession',Position = 0,Mandatory = $false)] + [Alias('Target')] + [string]$ComputerName = ".", + [Parameter(ParameterSetName = 'ReuseSession',Position = 1,Mandatory = $true)] + [CimSession]$CimSession + ) + $params = @{ + ClassName = 'Win32_ComputerSystem' + Namespace = 'root\cimv2' + } + + if ($PSCmdlet.ParameterSetName -eq 'NewSession') { $params.CimSession = newCimSession -Target $ComputerName } + if ($PSCmdlet.ParameterSetName -eq 'ReuseSession') { $params.CimSession = $CimSession } + $obj = Get-CimInstance @params -ErrorAction stop + + ([string](getWmiField $obj "Model")).trim() +} + + + + +<# +.SYNOPSIS + Retrieves the Part Number (or SKU) on the current device unless specified for another platform + +.PARAMETER ComputerName +Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession + Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.DESCRIPTION + This command retrieves the Part Number (or SKU) on the current device unless specified for another platform. This command is equivalent to reading the field SystemSKUNumber from the WMI class Win32_ComputerSystem. + +.EXAMPLE + Get-HPDevicePartNumber +#> +function Get-HPDevicePartNumber { + [CmdletBinding(DefaultParameterSetName = 'NewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPDevicePartNumber")] + param( + [Parameter(ParameterSetName = 'NewSession',Position = 0,Mandatory = $false)] + [Alias('Target')] + [string]$ComputerName = ".", + [Parameter(ParameterSetName = 'ReuseSession',Position = 1,Mandatory = $true)] + [CimSession]$CimSession + ) + $params = @{ + ClassName = 'Win32_ComputerSystem' + Namespace = 'root\cimv2' + } + + if ($PSCmdlet.ParameterSetName -eq 'NewSession') { $params.CimSession = newCimSession -Target $ComputerName } + if ($PSCmdlet.ParameterSetName -eq 'ReuseSession') { $params.CimSession = $CimSession } + $obj = Get-CimInstance @params -ErrorAction stop + + ([string](getWmiField $obj "SystemSKUNumber")).trim().ToUpper() +} + + +<# +.SYNOPSIS + Retrieves the product ID of the current device unless specified for another platform + +.DESCRIPTION + This command retrieves the product ID of the current device unless specified for another platform. The product ID (Platform ID) is a 4-character hexadecimal string. It corresponds to the Product field in the Win32_BaseBoard WMI class. + +.PARAMETER ComputerName +Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession + Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.EXAMPLE + Get-HPDeviceProductID +#> +function Get-HPDeviceProductID { + [CmdletBinding(DefaultParameterSetName = 'NewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPDeviceProductID")] + param( + [Parameter(ParameterSetName = 'NewSession',Position = 0,Mandatory = $false)] + [Alias('Target')] + [string]$ComputerName = ".", + [Parameter(ParameterSetName = 'ReuseSession',Position = 1,Mandatory = $true)] + [CimSession]$CimSession + ) + $params = @{ + ClassName = 'Win32_BaseBoard' + Namespace = 'root\cimv2' + } + + if ($PSCmdlet.ParameterSetName -eq 'NewSession') { $params.CimSession = newCimSession -Target $ComputerName } + if ($PSCmdlet.ParameterSetName -eq 'ReuseSession') { $params.CimSession = $CimSession } + + $obj = Get-CimInstance @params -ErrorAction stop + ([string](getWmiField $obj "Product")).trim().ToUpper() +} + + +<# +.SYNOPSIS + Retrieves the device asset tag of the current device unless specified for another platform + +.DESCRIPTION + This command retrieves the asset tag (also called the Asset Tracking Number) for a device. Some computers may have a blank asset tag or have the asset tag pre-populated with the serial number. + +.PARAMETER ComputerName + Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession + Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.EXAMPLE + Get-HPDeviceAssetTag +#> +function Get-HPDeviceAssetTag { + [CmdletBinding(DefaultParameterSetName = 'NewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPDeviceAssetTag")] + param( + [Parameter(ParameterSetName = 'NewSession',Position = 0,Mandatory = $false)] + [Alias('Target')] + [string]$ComputerName = ".", + [Parameter(ParameterSetName = 'ReuseSession',Position = 1,Mandatory = $true)] + [CimSession]$CimSession + ) + + $params = @{ + Name = 'Asset Tracking Number' + } + if ($PSCmdlet.ParameterSetName -eq 'NewSession') { $params.CimSession = newCimSession -Target $ComputerName } + if ($PSCmdlet.ParameterSetName -eq 'ReuseSession') { $params.CimSession = $CimSession } + + $obj = Get-HPBIOSSetting @params -ErrorAction stop + getFormattedBiosSettingValue $obj +} + + +<# +.SYNOPSIS + Retrieves the value of a BIOS setting on the current device unless specified for another platform + +.DESCRIPTION + This command retrieves the value of a BIOS setting on the current device unless specified for another platform. In comparison to the Get-HPBIOSSetting command that retrieves all fields for the BIOS setting, this command retrieves only the setting's value. + +.NOTES + HP BIOS is required. + +.PARAMETER name + Specifies the name of the BIOS setting to retrieve + +.PARAMETER ComputerName + Specifies a target computer to execute this command. If not specified, this command is executed on the local computer. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession + Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.EXAMPLE + Get-HPBIOSSettingValue -Name 'Asset Tracking Number' +#> +function Get-HPBIOSSettingValue { + [CmdletBinding(DefaultParameterSetName = 'NewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPBIOSSettingValue")] + param( + [Parameter(ParameterSetName = 'NewSession',Position = 0,Mandatory = $true)] + [Parameter(ParameterSetName = 'ReuseSession',Position = 0,Mandatory = $true)] + [string]$Name, + [Parameter(ParameterSetName = 'NewSession',Position = 1,Mandatory = $false)] + [Alias('Target')] + [string]$ComputerName = ".", + [Parameter(ParameterSetName = 'ReuseSession',Position = 2,Mandatory = $false)] + [CimSession]$CimSession + ) + $params = @{ + Name = $Name + } + if ($PSCmdlet.ParameterSetName -eq 'NewSession') { $params.CimSession = newCimSession -Target $ComputerName } + if ($PSCmdlet.ParameterSetName -eq 'ReuseSession') { $params.CimSession = $CimSession } + + $obj = Get-HPBIOSSetting @params + if ($obj) { + getFormattedBiosSettingValue $obj + } + + +} + + +<# +.SYNOPSIS + Retrieves all BIOS settings on the current device unless specified for another platform + +.DESCRIPTION + This command retrieves all BIOS settings on the current device unless specified for another platform as native objects or in a specified format. + +.PARAMETER ComputerName + Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER Format + Specifies the format of the result. The value must be one of the following values: + + - BCU: format as HP BIOS Config Utility input format + - CSV: format as a comma-separated values list + - XML: format as XML + - JSON: format as JSON + - brief: (default) format as a list of names + + If not specified, the default PowerShell formatting is used. + +.PARAMETER NoReadonly + If specified, this command will not include read-only settings in the result. + +.PARAMETER CimSession + Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.EXAMPLE + Get-HPBIOSSettingsList -Format BCU + +.NOTES + - Although this command supports HP BIOS Config Utility (BCU), note that redirecting the command's output to a file will not be usable by BCU, because PowerShell will insert a unicode BOM in the file. To obtain a compatible file, either remove the BOM manually or use bios-cli.ps1. + - BIOS settings of type 'password' are not outputted when using XML, JSON, BCU, or CSV formats. + - By convention, when representing multiple values in an enumeration as a single string, the value with an asterisk in front is the currently active value. For example, given the string "One,*Two,Three" representing three possible enumeration choices, the current active value is "Two". + - Requires HP BIOS. +#> +function Get-HPBIOSSettingsList { + [CmdletBinding(DefaultParameterSetName = 'NewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPBIOSSettingsList")] + param( + [Parameter(ParameterSetName = 'NewSession',Position = 0,Mandatory = $false)] + [Parameter(ParameterSetName = 'ReuseSession',Position = 0,Mandatory = $false)] + [Parameter(Position = 0,Mandatory = $false)] + [ValidateSet('XML','JSON','BCU','CSV','brief')] + [string]$Format, + [Parameter(ParameterSetName = 'NewSession',Position = 1,Mandatory = $false)] + [Parameter(ParameterSetName = 'ReuseSession',Position = 1,Mandatory = $false)] + [Parameter(Position = 1,Mandatory = $false)] [switch]$NoReadonly, + [Parameter(ParameterSetName = 'NewSession',Position = 2,Mandatory = $false)] + [Alias('Target')] + [Parameter(Position = 2,Mandatory = $false)] [string]$ComputerName = ".", + [Parameter(ParameterSetName = 'ReuseSession',Position = 3,Mandatory = $false)] + [Parameter(Position = 3,Mandatory = $false)] [CimSession]$CimSession + ) + $ns = getNamespace + + Write-Verbose "Getting all BIOS settings from '$ComputerName'" + $params = @{ + ClassName = 'HP_BIOSSetting' + Namespace = $ns + } + + if ($PSCmdlet.ParameterSetName -eq 'NewSession') { $params.CimSession = newCimSession -Target $ComputerName } + if ($PSCmdlet.ParameterSetName -eq 'ReuseSession') { $params.CimSession = $CimSession } + + try { + $cs = Get-CimInstance @params -ErrorAction stop + } + catch [Microsoft.Management.Infrastructure.CimException]{ + if ($_.Exception.Message.trim() -eq "Access denied") + { + throw [System.UnauthorizedAccessException]"Access denied: Please ensure you have the rights to perform this operation." + } + throw [System.NotSupportedException]"$($_.Exception.Message): Please ensure this is a supported HP device." + } + + switch ($format) { + { $_ -eq 'BCU' } { + # to BCU format + $now = Get-Date + Write-Output "BIOSConfig 1.0" + Write-Output ";" + Write-Output "; Created by CMSL function Get-HPBIOSSettingsList" + Write-Output "; Date=$now" + Write-Output ";" + Write-Output "; Found $($cs.count) settings" + Write-Output ";" + foreach ($c in $cs) { + if ($c.CimClass.CimClassName -ne "HPBIOS_BIOSPassword") { + if ((-not $noreadonly.IsPresent) -or ($c.IsReadOnly -eq 0)) { + convertSettingToBCU ($c) + } + } + } + return + } + + { $_ -eq 'XML' } { + # to IA format + Write-Output "" + Write-Output "" + Write-Output " " + + foreach ($c in $cs) { + if ($c.CimClass.CimClassName -ne "HPBIOS_BIOSPassword") { + if ((-not $noreadonly.IsPresent) -or ($c.IsReadOnly -eq 0)) { + convertSettingToXML ($c) + } + } + } + Write-Output " " + Write-Output "" + return + } + + { $_ -eq 'JSON' } { + # to JSON format + $first = $true + "[" | Write-Output + + + foreach ($c in $cs) { + Add-Member -InputObject $c -Force -NotePropertyName "Class" -NotePropertyValue $c.CimClass.CimClassName | Out-Null + + if ($c.CimClass.CimClassName -ne "HPBIOS_BIOSPassword") { + if ((-not $noreadonly.IsPresent) -or ($c.IsReadOnly -eq 0)) { + if ($first -ne $true) { + Write-Output "," + } + convertSettingToJSON ($c) + $first = $false + } + } + + } + "]" | Write-Output + + } + + { $_ -eq 'CSV' } { + # to CSV format + Write-Output ("NAME,CURRENT_VALUE,READONLY,TYPE,PHYSICAL_PRESENCE_REQUIRED,MIN,MAX,"); + foreach ($c in $cs) { + if ($c.CimClass.CimClassName -ne "HPBIOS_BIOSPassword") { + if ((-not $noreadonly.IsPresent) -or ($c.IsReadOnly -eq 0)) { + convertSettingToCSV ($c) + } + } + } + return + } + { $_ -eq 'brief' } { + foreach ($c in $cs) { + if ((-not $noreadonly.IsPresent) -or ($c.IsReadOnly -eq 0)) { + Write-Output $c.Name + } + } + return + } + default { + if (-not $noreadonly.IsPresent) { + return $cs + } + else { + return $cs | Where-Object IsReadOnly -EQ 0 + } + } + } +} + + +<# +.SYNOPSIS + This is a private function for internal use only + +.DESCRIPTION + This is a private function for internal use only + +.EXAMPLE + +.NOTES + - This is a private function for internal use only +#> +function Set-HPPrivateBIOSSettingValuePayload { + param( + [Parameter(ParameterSetName = 'Payload',Position = 0,Mandatory = $true,ValueFromPipeline = $true)] + [string]$Payload + ) + + $portable = $Payload | ConvertFrom-Json + + if ($portable.purpose -ne "hp:sureadmin:biossetting") { + throw "The payload should be generated by New-HPSureAdminBIOSSettingValuePayload function" + } + + [SureAdminSetting]$setting = [System.Text.Encoding]::UTF8.GetString($portable.Data) | ConvertFrom-Json + + Set-HPPrivateBIOSSetting -Setting $setting +} + +<# +.SYNOPSIS + Sets the value of a BIOS setting on the current device unless specified for another platform + +.DESCRIPTION + This command sets the value of a BIOS setting on the current device unless specified for another platform. Note that some BIOS settings may have various constraints restricting the input that can be provided. + +.PARAMETER Name + Specifies the name of a BIOS setting to set. Note that the setting name is usually case sensitive. + +.PARAMETER Value + Specifies the new value for the BIOS setting specified in the -Name parameter + +.PARAMETER ComputerName +Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER Password + Specifies the setup password, if any + +.PARAMETER CimSession + Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.PARAMETER SkipPrecheck + If specified, this command skips reading the setting value from the BIOS before applying the new value. This parameter is used for optimization purposes when the setting is guaranteed to exist on the system, or when preparing an HP Sure Admin platform for a remote platform which may contain settings not present on the local platform. + +.NOTES + - Requires HP BIOS. + - Use single quotes around the password to prevent PowerShell from interpreting special characters in the string. + - By convention, when representing multiple values in an enumeration as a single string, the value with an asterisk in front is the currently active value. For example, given the string "One,*Two,Three" representing three possible enumeration choices, the current active value is "Two". + +.EXAMPLE + Set-HPBIOSSettingValue -Name "Asset Tracking Number" -Value "Hello World" -password 's3cr3t' +#> +function Set-HPBIOSSettingValue { + [CmdletBinding(DefaultParameterSetName = 'NewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Set-HPBIOSSettingValue")] + param( + [Parameter(ParameterSetName = "NewSession",Position = 0,Mandatory = $false)] + [Parameter(ParameterSetName = "ReuseSession",Position = 0,Mandatory = $false)] + [AllowEmptyString()] + [string]$Password, + + [Parameter(ParameterSetName = "NewSession",Position = 1,Mandatory = $true)] + [Parameter(ParameterSetName = "ReuseSession",Position = 1,Mandatory = $true)] + [string]$Name, + + [Parameter(ParameterSetName = "NewSession",Position = 2,Mandatory = $true)] + [Parameter(ParameterSetName = "ReuseSession",Position = 2,Mandatory = $true)] + [AllowEmptyString()] + [string]$Value, + + [Parameter(ParameterSetName = "NewSession",Position = 3,Mandatory = $false)] + [Parameter(ParameterSetName = "ReuseSession",Position = 3,Mandatory = $false)] + [switch]$SkipPrecheck, + + [Parameter(ParameterSetName = 'NewSession',Position = 4,Mandatory = $false)] + [Alias('Target')] + $ComputerName = ".", + + [Parameter(ParameterSetName = 'ReuseSession',Position = 4,Mandatory = $true)] + [CimSession]$CimSession + ) + + [SureAdminSetting]$setting = New-Object -TypeName SureAdminSetting + $setting.Name = $Name + $setting.Value = $Value + + $params = @{ + Setting = $setting + Password = $Password + CimSession = $CimSession + ComputerName = $ComputerName + SkipPrecheck = $SkipPrecheck + } + Set-HPPrivateBIOSSetting @params +} + +<# +.SYNOPSIS + Checks if the BIOS Setup password is set on the current device unless specified for another platform + +.DESCRIPTION + This command returns $true if a BIOS password is currently active, or $false otherwise. + +.PARAMETER ComputerName + Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession + Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.NOTES + Requires HP BIOS. + +.EXAMPLE + Get-HPBIOSSetupPasswordIsSet + +.LINK + [Set-HPBIOSSetupPassword](https://developers.hp.com/hp-client-management/doc/Set-HPBIOSSetupPassword) + +.LINK + [Get-HPBIOSSetupPasswordIsSet](https://developers.hp.com/hp-client-management/doc/Get-HPBIOSSetupPasswordIsSet) +#> +function Get-HPBIOSSetupPasswordIsSet () { + [CmdletBinding(DefaultParameterSetName = 'NewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPBIOSSetupPasswordIsSet")] + param( + [Parameter(ParameterSetName = 'NewSession',Position = 0,Mandatory = $false)] + [Alias('Target')] + [string]$ComputerName = ".", + [Parameter(ParameterSetName = 'ReuseSession',Position = 1,Mandatory = $true)] + [CimSession]$CimSession + + ) + $params = @{ Name = "Setup Password" } + if ($PSCmdlet.ParameterSetName -eq 'NewSession') { $params.CimSession = newCimSession -Target $ComputerName } + if ($PSCmdlet.ParameterSetName -eq 'ReuseSession') { $params.CimSession = $CimSession } + + $obj = Get-HPBIOSSetting @params + return [boolean]$obj.IsSet +} + +<# +.SYNOPSIS + Sets the BIOS Setup password on the current device unless specified for another platform + +.DESCRIPTION + This command sets the BIOS Setup password to a new password. The password must comply with the current active security policy. + +.PARAMETER NewPassword + Specifies the new password. To clear the password, use the Clear-HPBIOSSetupPassword command instead. + +.PARAMETER Password + Specifies the existing setup password, if any. If there is a password set, this parameter is required. If there is no password set, providing a value to this parameter has no effect on the outcome. Use the Get-HPBIOSSetupPasswordIsSet command to determine if a password is currently set. + +.PARAMETER ComputerName +Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession + Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.EXAMPLE + Set-HPBIOSSetupPassword -NewPassword 'newpassword' -Password 'oldpassword' + +.LINK + [Clear-HPBIOSSetupPassword](https://developers.hp.com/hp-client-management/doc/Clear-HPBIOSSetupPassword) + +.LINK + [Get-HPBIOSSetupPasswordIsSet](https://developers.hp.com/hp-client-management/doc/Get-HPBIOSSetupPasswordIsSet) + +.NOTES + - Requires HP BIOS. + - Use single quotes around the password to prevent PowerShell from interpreting special characters in the string. + - Multiple attempts to change the password with an incorrect existing password may trigger BIOS lockout mode, which can be cleared by rebooting the system. +#> +function Set-HPBIOSSetupPassword { + [CmdletBinding(DefaultParameterSetName = 'NoPassthruNewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/set-HPBIOSSetupPassword")] + param( + [Parameter(ParameterSetName = 'NoPassthruNewSession',Position = 0,Mandatory = $true)] + [Parameter(ParameterSetName = 'NoPassthruReuseSession',Position = 0,Mandatory = $true)] + [string]$NewPassword, + + [Parameter(ParameterSetName = 'NoPassthruNewSession',Position = 1,Mandatory = $false)] + [Parameter(ParameterSetName = 'NoPassthruReuseSession',Position = 1,Mandatory = $false)] + [string]$Password, + + + [Parameter(ParameterSetName = 'NoPassthruNewSession',Position = 2,Mandatory = $false)] + [Alias('Target')] + [string]$ComputerName = ".", + + [Parameter(ParameterSetName = 'NoPassthruReuseSession',Position = 3,Mandatory = $true)] + [CimSession]$CimSession + ) + $params = @{} + $settingName = 'Setup Password' + + # if password is set but no Password parameter is provided, throw an error + if ((Get-HPBIOSSetupPasswordIsSet) -and (-not $Password)) { + throw [System.ArgumentException]'There is a BIOS Setup password currently set. Please provide it via the -Password parameter to set a new password.' + } + + if ($PSCmdlet.ParameterSetName -eq 'NoPassthruNewSession') { $params.CimSession = newCimSession -Target $ComputerName } + if ($PSCmdlet.ParameterSetName -eq 'NoPassthruReuseSession') { $params.CimSession = $CimSession } + + $iface = getBiosSettingInterface @params + + $r = $iface | Invoke-CimMethod -ErrorAction Stop -MethodName 'SetBIOSSetting' -Arguments @{ + Name = $settingName + Password = '' + $Password + Value = '' + $newPassword + } + + if ($r.Return -ne 0) { + $Err = "$(biosErrorCodesToString($r.Return))" + throw [System.InvalidOperationException]$Err + } +} + +<# +.SYNOPSIS + Clears the BIOS Setup password on the current device unless specified for another platform + +.DESCRIPTION + This command clears the BIOS setup password on the current device unless specified for another platform. To set the password, use the Set-HPBIOSSetupPassword command. + +.PARAMETER Password + Specifies the existing setup password. Use the Get-HPBIOSSetupPasswordIsSet command to determine if a password is currently set. + +.PARAMETER ComputerName +Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession +Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.EXAMPLE + Clear-HPBIOSSetupPassword -Password 'currentpassword' + +.NOTES + - Requires HP BIOS. + - Use single quotes around the password to prevent PowerShell from interpreting special characters in the string. + - Multiple attempts to change the password with an incorrect existing password may trigger BIOS lockout mode. BIOS lockout mode can be cleared by rebooting the system. + +.LINK + [Set-HPBIOSSetupPassword](https://developers.hp.com/hp-client-management/doc/Set-HPBIOSSetupPassword) + +.LINK + [Get-HPBIOSSetupPasswordIsSet](https://developers.hp.com/hp-client-management/doc/Get-HPBIOSSetupPasswordIsSet) +#> +function Clear-HPBIOSSetupPassword { + [CmdletBinding(DefaultParameterSetName = 'NoPassthruNewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Clear-HPBIOSSetupPassword")] + param( + [Parameter(ParameterSetName = 'NoPassthruNewSession',Position = 0,Mandatory = $true)] + [Parameter(ParameterSetName = 'NoPassthruReuseSession',Position = 0,Mandatory = $true)] + [string]$Password, + + [Parameter(ParameterSetName = 'NoPassthruNewSession',Position = 1,Mandatory = $false)] + [Alias('Target')] + $ComputerName = ".", + [Parameter(ParameterSetName = 'NoPassthruReuseSession',Position = 2,Mandatory = $true)] + [CimSession]$CimSession + ) + $settingName = 'Setup Password' + + + $params = @{} + if ($PSCmdlet.ParameterSetName -eq 'NoPassthruNewSession') { $params.CimSession = newCimSession -Target $ComputerName } + if ($PSCmdlet.ParameterSetName -eq 'NoPassthruReuseSession') { $params.CimSession = $CimSession } + + $iface = getBiosSettingInterface @params + $r = $iface | Invoke-CimMethod -MethodName SetBiosSetting -Arguments @{ Name = "Setup Password"; Value = ""; Password = "" + $Password; } + if ($r.Return -ne 0) { + $Err = "$(biosErrorCodesToString($r.Return))" + throw [System.InvalidOperationException]$Err + } +} + + +<# +.SYNOPSIS + Checks if the BIOS Power-On password is set on the current device unless specified for another platform + +.DESCRIPTION + This command returns $true if a BIOS power-on password is currently active, or $false otherwise. + +.PARAMETER ComputerName +Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession + Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.NOTES + Changes in the state of the BIOS Power-On Password may not be visible until the system is rebooted and the POST prompt regarding the BIOS Power-On password is accepted. + +.EXAMPLE + Get-HPBIOSPowerOnPasswordIsSet + +.LINK + [Set-HPBIOSPowerOnPassword](https://developers.hp.com/hp-client-management/doc/Set-HPBIOSPowerOnPassword) + +.LINK + [Clear-HPBIOSPowerOnPassword](https://developers.hp.com/hp-client-management/doc/Clear-HPBIOSPowerOnPassword) +#> +function Get-HPBIOSPowerOnPasswordIsSet () { + [CmdletBinding(DefaultParameterSetName = 'NewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPBIOSPowerOnPasswordIsSet")] + param( + [Parameter(ParameterSetName = 'NewSession',Position = 0,Mandatory = $false)] + [Alias('Target')] + [string]$ComputerName = ".", + [Parameter(ParameterSetName = 'ReuseSession',Position = 1,Mandatory = $true)] + [CimSession]$CimSession + + ) + $params = @{ Name = "Power-On Password" } + if ($PSCmdlet.ParameterSetName -eq 'NewSession') { $params.CimSession = newCimSession -Target $ComputerName } + if ($PSCmdlet.ParameterSetName -eq 'ReuseSession') { $params.CimSession = $CimSession } + + $obj = Get-HPBIOSSetting @params + return [boolean]$obj.IsSet +} + +<# +.SYNOPSIS + Sets the BIOS Power-On password on the current device unless specified for another platform + +.DESCRIPTION + This commmand sets the BIOS Power-On password on the current device unless specified for another platform. The password must comply with password complexity requirements active on the system. + +.PARAMETER NewPassword + Specifies a new password for the BIOS Power-On password. To clear the password, use the Clear-HPBIOSPowerOnPassword command instead. + +.PARAMETER Password + Specifies the existing BIOS Setup password (not Power-On password), if any. If there is no BIOS Setup password set, this parameter may be omitted. Use the Get-HPBIOSSetupPasswordIsSet command to determine if a setup password is currently set. + +.PARAMETER ComputerName +Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession + Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.NOTES + Changes in the state of the BIOS Power-On Password may not be visible until the system is rebooted and the POST prompt regarding the BIOS Power-On password is accepted. + +.EXAMPLE + Set-HPBIOSPowerOnPassword -NewPassword 'newpassword' -Password 'setuppassword' + +.LINK + [Clear-HPBIOSPowerOnPassword](https://developers.hp.com/hp-client-management/doc/Clear-HPBIOSPowerOnPassword) + +.LINK + [Get-HPBIOSPowerOnPasswordIsSet](https://developers.hp.com/hp-client-management/doc/Get-HPBIOSPowerOnPasswordIsSet) + +.NOTES + - Requires HP BIOS. + - Use single quotes around the password to prevent PowerShell from interpreting special characters in the string. + - On many platform families, changing the Power-On password requires that a BIOS password is active. + +#> +function Set-HPBIOSPowerOnPassword { + [CmdletBinding(DefaultParameterSetName = 'NoPassthruNewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Set-HPBIOSPowerOnPassword")] + param( + [Parameter(ParameterSetName = 'NoPassthruNewSession',Position = 0,Mandatory = $true)] + [Parameter(ParameterSetName = 'NoPassthruReuseSession',Position = 0,Mandatory = $true)] + [string]$NewPassword, + [Parameter(ParameterSetName = 'NoPassthruNewSession',Position = 1,Mandatory = $false)] + [Parameter(ParameterSetName = 'NoPassthruReuseSession',Position = 1,Mandatory = $false)] + [string]$Password, + + [Parameter(ParameterSetName = 'NoPassthruNewSession',Position = 3,Mandatory = $false)] + [Alias('Target')] + [string]$ComputerName = ".", + [Parameter(ParameterSetName = 'NoPassthruReuseSession',Position = 4,Mandatory = $true)] + [CimSession]$CimSession + ) + $settingName = 'Power-On Password' + + $params = @{} + if ($PSCmdlet.ParameterSetName -eq 'NoPassthruNewSession') { $params.CimSession = newCimSession -Target $ComputerName } + if ($PSCmdlet.ParameterSetName -eq 'NoPassthruReuseSession') { $params.CimSession = $CimSession } + + $iface = getBiosSettingInterface @params + $r = $iface | Invoke-CimMethod -MethodName SetBiosSetting -Arguments @{ Name = $settingName; Value = "" + $newPassword; Password = "" + $Password; } + if ($r.Return -ne 0) { + $Err = "$(biosErrorCodesToString($r.Return))" + throw $Err + } +} + +<# +.SYNOPSIS + Clears the BIOS Power-On password on the current device unless specified for another platform + +.DESCRIPTION + This command clears any active power-on password on the current device unless specified for another platform. + +.PARAMETER Password + Specifies the existing setup (not power-on) password. Use the Get-HPBIOSSetupPasswordIsSet command to determine if a password is currently set. See important note regarding the BIOS Setup Password prerequisite below. + +.PARAMETER ComputerName + Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession + Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.EXAMPLE + Clear-HPBIOSPowerOnPassword -Password 's3cr3tpassword' + +.LINK + [Set-HPBIOSPowerOnPassword](https://developers.hp.com/hp-client-management/doc/Set-HPBIOSPowerOnPassword) + +.LINK + [Get-HPBIOSPowerOnPasswordIsSet](https://developers.hp.com/hp-client-management/doc/Get-HPBIOSPowerOnPasswordIsSet) + +.LINK + [Get-HPBIOSSetupPasswordIsSet](https://developers.hp.com/hp-client-management/doc/Get-HPBIOSSetupPasswordIsSet) + +.NOTES + - Requires HP BIOS. + - Use single quotes around the password to prevent PowerShell from interpreting special characters in the string. + - For many platform families, an active BIOS password is required to change the Power-On password. If BIOS Setup password is not set, set the BIOS Setup password before using this command. + +#> +function Clear-HPBIOSPowerOnPassword { + [CmdletBinding(DefaultParameterSetName = 'NoPassthruNewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Clear-HPBIOSPowerOnPassword")] + param( + [Parameter(ParameterSetName = 'NoPassthruNewSession',Position = 0,Mandatory = $false)] + [Parameter(ParameterSetName = 'NoPassthruReuseSession',Position = 0,Mandatory = $false)] + [string]$Password, + + + [Parameter(ParameterSetName = 'NoPassthruNewSession',Position = 1,Mandatory = $false)] + [Alias('Target')] + $ComputerName = ".", + [Parameter(ParameterSetName = 'NoPassthruReuseSession',Position = 2,Mandatory = $true)] + [CimSession]$CimSession + ) + + $settingName = 'Power-On Password' + + + $params = @{} + if ($PSCmdlet.ParameterSetName -eq 'NoPassthruNewSession') { $params.CimSession = newCimSession -Target $ComputerName } + if ($PSCmdlet.ParameterSetName -eq 'NoPassthruReuseSession') { $params.CimSession = $CimSession } + + $iface = getBiosSettingInterface @params + $r = $iface | Invoke-CimMethod -MethodName SetBiosSetting -Arguments @{ + Name = "Power-On Password" + Value = "" + Password = ("" + $Password) + } + if ($r.Return -ne 0) { + $Err = "$(biosErrorCodesToString($r.Return))" + throw [System.InvalidOperationException]$Err + } +} + +<# +.SYNOPSIS + Sets one or more BIOS settings from a file on the current device unless specified for another platform + +.DESCRIPTION + This command sets multiple BIOS settings from a file on the current device unless specified for another platform. The file format may be specified via the -Format parameter; however, this command will try to infer the format from the file extension. + +.PARAMETER File + Specifies the file to process. This parameter can take in both a relative path and an absolute path. Note that BIOS passwords are not encrypted in this file. Protect the file contents until applied to the target system. + +.PARAMETER Format + Specifies the format of the input file in the File parameter. The value must be one of the following values: + - BCU + - CSV + - XML + - JSON + + If not specified, this command will attempt to deduce the format from the file extension and parse accordingly. + +.PARAMETER Password + Specifies the current BIOS setup password, if any. + +.PARAMETER NoSummary + If specified, this command suppresses the one line summary at the end of the import. + +.PARAMETER ErrorHandling + Specifies the type of error handling this command will use. The value must be one of the following values: + 0 - operate normally + 1 - raise exceptions as warnings + 2 - no warnings or exceptions, fail silently + +.PARAMETER ComputerName +Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession + Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.EXAMPLE + Set-HPBIOSSettingValuesFromFile -File .\file.bcu -NoSummary + +.NOTES + - Requires HP BIOS. + - Use single quotes around the password to prevent PowerShell from interpreting special characters in the string. +#> +function Set-HPBIOSSettingValuesFromFile { + [CmdletBinding(DefaultParameterSetName = "NotPassThruNewSession", + HelpUri = "https://developers.hp.com/hp-client-management/doc/Set-HPBIOSSettingValuesFromFile")] + param( + [Parameter(ParameterSetName = "NotPassThruNewSession",Position = 0,Mandatory = $true)] + [Parameter(ParameterSetName = "NotPassThruReuseSession",Position = 0,Mandatory = $true)] + [System.IO.FileInfo]$File, + + [Parameter(ParameterSetName = "NotPassThruNewSession",Position = 1,Mandatory = $false)] + [Parameter(ParameterSetName = "NotPassThruReuseSession",Position = 1,Mandatory = $false)] + [ValidateSet('XML','JSON','BCU','CSV')] + [string]$Format = $null, + + [Parameter(ParameterSetName = "NotPassThruNewSession",Position = 2,Mandatory = $false)] + [Parameter(ParameterSetName = "NotPassThruReuseSession",Position = 2,Mandatory = $false)] + [string]$Password, + + [Parameter(ParameterSetName = "NotPassThruNewSession",Position = 3,Mandatory = $false)] + [Parameter(ParameterSetName = "NotPassThruReuseSession",Position = 3,Mandatory = $false)] + [switch]$NoSummary, + + [Parameter(ParameterSetName = "NotPassThruNewSession",Position = 4,Mandatory = $false)] + [Alias('Target')] + [string]$ComputerName = ".", + + [Parameter(ParameterSetName = "NotPassThruNewSession",Position = 5,Mandatory = $false)] + [Parameter(ParameterSetName = "NotPassThruReuseSession",Position = 5,Mandatory = $false)] + $ErrorHandling = 2, + + [Parameter(ParameterSetName = "NotPassThruReuseSession",Position = 6,Mandatory = $true)] + [CimSession]$CimSession + ) + + if (-not $Format) { + $Format = (Split-Path -Path $File -Leaf).Split(".")[1].ToLower() + Write-Verbose "Format from file extension: $Format" + } + + Write-Verbose "Format specified: '$Format'. Reading file..." + [System.Collections.Generic.List[SureAdminSetting]]$settingsList = Get-HPPrivateSettingsFromFile -FileName $File -Format $Format + + $params = @{ + SettingsList = $settingsList + ErrorHandling = $ErrorHandling + ComputerName = $ComputerName + CimSession = $CimSession + Password = $Password + NoSummary = $NoSummary + } + Set-HPPrivateBIOSSettingsList @params -Verbose:$VerbosePreference +} + +<# +.SYNOPSIS + Resets the BIOS settings to shipping defaults on the current device unless specified for another platform + +.DESCRIPTION + This command resets the BIOS settings to shipping defaults on the current device unless specified for another platform. Please note that the default values are platform-specific. + +.PARAMETER Password + Specifies the current BIOS setup password, if any. + +.PARAMETER ComputerName + Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession + Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.EXAMPLE + Set-HPBIOSSettingDefaults -Password 's3cr3t' + +.NOTES + - HP BIOS is required. + - Use single quotes around the password to prevent PowerShell from interpreting special characters in the string. + +#> +function Set-HPBIOSSettingDefaults { + [CmdletBinding(DefaultParameterSetName = 'NewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Set-HPBIOSSettingDefaults")] + param( + [Parameter(ParameterSetName = "NewSession",Position = 0,Mandatory = $false)] + [Parameter(ParameterSetName = "ReuseSession",Position = 0,Mandatory = $false)] + [AllowEmptyString()] + [string]$Password, + + [Parameter(ParameterSetName = 'NewSession',Position = 1,Mandatory = $false)] + [Alias('Target')] + $ComputerName = ".", + + [Parameter(ParameterSetName = 'ReuseSession',Position = 2,Mandatory = $true)] + [CimSession]$CimSession + ) + + $authorization = "" + $Password + Set-HPPrivateBIOSSettingDefaultsAuthorization -ComputerName $ComputerName -CimSession $CimSession -Authorization $authorization -Verbose:$VerbosePreference +} + +function Set-HPPrivateBIOSSettingDefaultsAuthorization { + param( + [string]$Authorization, + [string]$ComputerName, + [CimSession]$CimSession + ) + + Write-Verbose "Calling SetSystemDefaults() on $ComputerName" + $params = @{} + if ($CimSession) { + $params.CimSession = $CimSession + } + else { + $params.CimSession = newCimSession -Target $ComputerName + } + $iface = getBiosSettingInterface @params + $r = $iface | Invoke-CimMethod -MethodName SetSystemDefaults -Arguments @{ Password = $Authorization; } + + if ($r.Return -ne 0) { + $Err = "$(biosErrorCodesToString($r.Return))" + throw $Err + } +} + + +<# +.SYNOPSIS + Sets the BIOS Settings defaults payload + +.DESCRIPTION + This is a private command for internal use only. + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Set-HPPrivateBIOSSettingDefaultsPayload { + param( + [Parameter(ParameterSetName = 'Payload',Position = 0,Mandatory = $true,ValueFromPipeline = $true)] + [string]$Payload + ) + + $portable = $Payload | ConvertFrom-Json + + if ($portable.purpose -ne "hp:sureadmin:resetsettings") { + throw "The payload should be generated by New-HPSureAdminSettingDefaultsPayload function" + } + + [SureAdminSetting]$setting = [System.Text.Encoding]::UTF8.GetString($portable.Data) | ConvertFrom-Json + + Set-HPPrivateBIOSSettingDefaultsAuthorization -Authorization $setting.AuthString +} + +<# +.SYNOPSIS + Retrieves the system boot time and uptime of the current device unless specified for another platform + +.DESCRIPTION + This command retrieves the system boot time and uptime of the current device unless specified for another platform. + +.PARAMETER ComputerName + Specifies a target computer for this command to create its own one-time-use CIMSession object using with. If not specified, this command will use the current device as the target computer for this command. The alias 'Target' can also be used for this parameter. + +.PARAMETER CimSession + Specifies a pre-established CIMSession object (as created by the [New-CIMSession](https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/new-cimsessionoption?view=powershell-5.1) command) or a ComputerName in string format for this command to create a one-time-use CIMSession object with + + +.EXAMPLE + (Get-HPDeviceUptime).BootTime + +#> +function Get-HPDeviceUptime { + [CmdletBinding(DefaultParameterSetName = 'NewSession',HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPDeviceUptime")] + param( + [Parameter(ParameterSetName = 'NewSession',Position = 0,Mandatory = $false)] + [Alias('Target')] + [string]$ComputerName = ".", + [Parameter(ParameterSetName = 'ReuseSession',Position = 1,Mandatory = $true)] + [CimSession]$CimSession + ) + $params = @{ + ClassName = 'Win32_OperatingSystem' + Namespace = 'root\cimv2' + } + if ($PSCmdlet.ParameterSetName -eq 'NewSession') { $params.CimSession = newCimSession -Target $ComputerName } + if ($PSCmdlet.ParameterSetName -eq 'ReuseSession') { $params.CimSession = $CimSession } + + $result = Get-CimInstance @params -ErrorAction stop + $resultobject = @{} + $resultobject.BootTime = $result.LastBootUpTime + + $span = (Get-Date) - ($resultobject.BootTime) + $resultobject.Uptime = "$($span.days) days, $($span.hours) hours, $($span.minutes) minutes, $($span.seconds) seconds" + $resultobject +} + + + +<# +.SYNOPSIS + Retrieves the current boot mode and uptime on the current device + +.DESCRIPTION + This command returns an object containing the system uptime, last boot time, whether secure boot is enabled, and whether the system was booted in UEFI or Legacy mode. + + +.EXAMPLE + $IsUefi = (Get-HPDeviceBootInformation).Mode -eq "UEFI" + +#> +function Get-HPDeviceBootInformation { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPDeviceBootInformation")] + param() + + $mode = @{} + + try { + $sb = Confirm-SecureBootUEFI + $mode.Mode = "UEFI" + $mode.SecureBoot = $sb + } + catch { + $mode.Mode = "Legacy" + $mode.SecureBoot = $false + } + + try { + $uptime = Get-HPDeviceUptime + $mode.Uptime = $uptime.Uptime + $mode.BootTime = $uptime.BootTime + } + catch { + $mode.Uptime = "N/A" + $mode.BootTime = "N/A" + } + + $mode +} + + + +<# +.SYNOPSIS + Retrieves available BIOS updates (or downgrades) + +.DESCRIPTION + This command uses an internet service to retrieve the list of BIOS updates available for a platform, and optionally checks it against the current system. + + The result is a series of records, with the following definition: + + - Ver: the BIOS update version + - Date: the BIOS release date + - Bin: the BIOS update binary file + + Online Mode uses Seamless Firmware Update Service that can update the BIOS in the background while the operating system is running (no authentication needed). 2022 and newer HP computers with Intel processors support Seamless Firmware Update Service. + Offline Mode then finishes updating the BIOS after reboot and requires authentication (password or payload). + +.PARAMETER Platform + Specifies the Platform ID to check. This parameter can be obtained via the Get-HPDeviceProductID command. The Platform ID cannot be specified for a flash operation. If not specified, the current Platform ID is used. + +.PARAMETER Target + Specifies the target computer to execute this command. If not specified, the command is executed on the local computer. + +.PARAMETER Format + Specifies the format of the result. The value must be one of the following values: + + - list: format as a list + - CSV: format as a comma-separated values list + - XML: format as XML + - JSON: format as JSON + + If not specified, the default PowerShell formatting is used. + +.PARAMETER Latest + If specified, this command returns or downloads the latest available BIOS version between remote and local. If the -Platform parameter is specified, the BIOS on the current device will not be read and the latest BIOS version available remotely will be returned. + +.PARAMETER Check + If specified, this command returns true if the latest version corresponds to the installed version or installed version is higher and returns false otherwise. Please note that this parameter is only valid for use when comparing against current platform. + +.PARAMETER All + If specified, this command includes all known BIOS update information. This may include additional data such as dependencies, rollback support, and criticality. + +.PARAMETER Download + If specified, this command will download the BIOS file to the current directory or a path specified by the -SaveAs parameter. + +.PARAMETER Flash + If specified, the BIOS update will be flashed onto the current system. + +.PARAMETER Password + Specifies the BIOS password, if any. This parameter is only necessary when the -Flash parameter is specified. Use single quotes around the password to prevent PowerShell from interpreting special characters in the string. + +.PARAMETER Version + Specifies the BIOS version to download and/or flash. If not specified, the latest version will be used. This parameter must be specified with the -Download parameter and/or -Flash parameter. + +.PARAMETER SaveAs + Specifies the file name for the downloaded BIOS file. If not specified, the remote file name will be used. + +.PARAMETER Quiet + If specified, this command will not display a progress bar during the BIOS file download. + +.PARAMETER Overwrite + If specified, this command will force overwrite any existing file with the same name during BIOS file download. This command is only necessary when the -Download parameter is used. + +.PARAMETER Yes + If specified, this command will show an 'Are you sure you want to flash' prompt. This parameter prevents users from accidentally flashing the BIOS. + +.PARAMETER Force + If specified, this command forces the BIOS update even if the target BIOS is already installed. + +.PARAMETER BitLocker + Specifies the behavior to the BitLocker check prompt (if any). The value must be one of the following values: + - stop: (default option) stops execution if BitLocker is detected but not suspended, and prompts + - ignore: skips the BitLocker check + - suspend: suspend sBitLocker if active and continues with execution + +.PARAMETER Url + Specifies an alternate Url source for the platform's BIOS update catalog (xml). This URL must be an HTTPS URL. + +.PARAMETER Offline + If specified, this command uses the offline mode to flash the BIOS instead of the default online mode. In offline mode, the actual flash will occur after reboot at pre-OS environment. Please note that offline mode is selected by default when downgrading the BIOS version and requires authentication so either a Password or a PayloadFile should be specified. + +.PARAMETER NoWait + If specified, the script does not wait for the online flash background task to finish. If the user reboots the PC during the online flash, the BIOS update will complete only after reboot. + +.NOTES + - Flash is only supported on Windows 10 1709 (Fall Creators Updated) and later. + - UEFI boot mode is required for flashing; legacy mode is not supported. + - The flash operation requires 64-bit PowerShell (not supported under 32-bit PowerShell). + + **WinPE notes** + + - Use '-BitLocker ignore' when using this command in WinPE because BitLocker checks are not applicable in Windows PE. + - Requires that the WinPE image is built with the WinPE-SecureBootCmdlets.cab component. + +.EXAMPLE + Get-HPBIOSUpdates + +.EXAMPLE + Get-HPBIOSUpdates -Platform "87ED" + +.EXAMPLE + Get-HPBIOSUpdates -Download -Version "01.26.00" + +.EXAMPLE + Get-HPBIOSUpdates -Flash -Version "01.26.00" +#> +function Get-HPBIOSUpdates { + + [CmdletBinding(DefaultParameterSetName = "ViewSet", + HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPBIOSUpdates")] + param( + [Parameter(ParameterSetName = "DownloadSet",Position = 0,Mandatory = $false)] + [Parameter(ParameterSetName = "ViewSet",Position = 0,Mandatory = $false)] + [Parameter(Position = 0,Mandatory = $false)] + [ValidatePattern("^[a-fA-F0-9]{4}$")] + [string]$Platform, + + [ValidateSet('XML','JSON','CSV','List')] + [Parameter(ParameterSetName = "ViewSet",Position = 1,Mandatory = $false)] + [string]$Format, + + [Parameter(ParameterSetName = "ViewSet",Position = 2,Mandatory = $false)] + [switch]$Latest, + + [Parameter(ParameterSetName = "CheckSet",Position = 3,Mandatory = $false)] + [switch]$Check, + + [Parameter(ParameterSetName = "FlashSetPassword",Position = 4,Mandatory = $false)] + [Parameter(ParameterSetName = "DownloadSet",Position = 4,Mandatory = $false)] + [Parameter(ParameterSetName = "ViewSet",Position = 4,Mandatory = $false)] + [string]$Target = ".", + + [Parameter(ParameterSetName = "ViewSet",Position = 5,Mandatory = $false)] + [switch]$All, + + [Parameter(ParameterSetName = "DownloadSet",Position = 6,Mandatory = $true)] + [switch]$Download, + + [Parameter(ParameterSetName = "FlashSetPassword",Position = 7,Mandatory = $true)] + [switch]$Flash, + + [Parameter(ParameterSetName = 'FlashSetPassword',Position = 8,Mandatory = $false)] + [string]$Password, + + [Parameter(ParameterSetName = "FlashSetPassword",Position = 9,Mandatory = $false)] + [Parameter(ParameterSetName = "DownloadSet",Position = 9,Mandatory = $false)] + [string]$Version, + + [Parameter(ParameterSetName = "FlashSetPassword",Position = 10,Mandatory = $false)] + [Parameter(ParameterSetName = "DownloadSet",Position = 10,Mandatory = $false)] + [string]$SaveAs, + + [Parameter(ParameterSetName = "FlashSetPassword",Position = 11,Mandatory = $false)] + [Parameter(ParameterSetName = "DownloadSet",Position = 11,Mandatory = $false)] + [switch]$Quiet, + + [Parameter(ParameterSetName = "FlashSetPassword",Position = 12,Mandatory = $false)] + [Parameter(ParameterSetName = "DownloadSet",Position = 12,Mandatory = $false)] + [switch]$Overwrite, + + [Parameter(ParameterSetName = 'FlashSetPassword',Position = 13,Mandatory = $false)] + [switch]$Yes, + + [Parameter(ParameterSetName = 'FlashSetPassword',Position = 14,Mandatory = $false)] + [ValidateSet('Stop','Ignore','Suspend')] + [string]$BitLocker = 'Stop', + + [Parameter(ParameterSetName = 'FlashSetPassword',Position = 15,Mandatory = $false)] + [switch]$Force, + + [Parameter(ParameterSetName = 'FlashSetPassword',Position = 16,Mandatory = $false)] + [string]$Url = "https://ftp.hp.com/pub/pcbios", + + [Parameter(ParameterSetName = 'FlashSetPassword',Position = 17,Mandatory = $false)] + [switch]$Offline, + + [Parameter(ParameterSetName = 'FlashSetPassword',Position = 18,Mandatory = $false)] + [switch]$NoWait + ) + + if ($PSCmdlet.ParameterSetName -eq "FlashSetPassword") { + Test-HPFirmwareFlashSupported -CheckPlatform + + if ((Get-HPPrivateIsSureAdminEnabled) -eq $true) { + throw "Sure Admin is enabled, you must use Update-HPFirmware with a payload instead of a password" + } + } + + # only allow https or file paths with or without file:// URL prefix + if ($Url -and -not ($Url.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($Url) -or $Url.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if (-not $platform) { + # if platform is not provided, $platform is current platform + $platform = Get-HPDeviceProductID -Target $target + } + + $platform = $platform.ToUpper() + Write-Verbose "Using platform ID $platform" + + $uri = [string]"$Url/{0}/{0}.xml" -f $platform.ToUpper() + Write-Verbose "Retrieving catalog file $uri" + $ua = Get-HPPrivateUserAgent + + # access xml file + try { + [System.Net.ServicePointManager]::SecurityProtocol = Get-HPPrivateAllowedHttpsProtocols + $data = Invoke-WebRequest -Uri $uri -UserAgent $ua -UseBasicParsing -ErrorAction Stop + } + catch { + # checking 404 based on exception message + # bc PS5 throws WebException while PS7 throws httpResponseException + # bc PS5 is based on WebRequest while PS7 is based on HttpClient + if ($_.Exception.Message.contains("(404) Not Found") -or $_.Exception.Message.contains("404 (Not Found)")){ + throw [System.Management.Automation.ItemNotFoundException]"Unable to retrieve BIOS data for a platform with ID $platform (data file not found)." + } + + throw $_.Exception + } + + # read xml file + try { + [xml]$doc = [System.IO.StreamReader]::new($data.RawContentStream).ReadToEnd() + } + catch { + throw [System.FormatException]"Unable to read data: $($_.Exception.Message)" + } + + # in the case that the xml file is empty, or the xml file is not in the expected format i.e. no Rel entries, we will catch it here + if ((-not $doc) -or (-not (Get-Member -InputObject $doc -Type Property -Name "BIOS")) -or (-not (Get-Member -InputObject $doc.bios -Type Property -Name "Rel"))) + { + throw [System.FormatException]"There are currently no BIOS updates available for your platform." + } + + # reach to Rel nodes to find Bin entries in xml + # ignore any entry not ending in *.bin e.g. *.tgz, *.cab + $unwanted_nodes = $doc.SelectNodes("//BIOS/Rel") | Where-Object { -not ($_.Bin -like "*.bin") } + $unwanted_nodes | Where-Object { + $ignore = $_.ParentNode.RemoveChild($_) + } + + # trim the 0 from the start of the version and then sort on the version value + $refined_doc = $doc.SelectNodes("//BIOS/Rel") | Select-Object -Property @{ Name = 'Ver'; expr = { $_.Ver.TrimStart("0") } },'Date','Bin','RB','L','DP' ` + | Sort-Object -Property Ver -Descending + + # latest version + $latestVer = $refined_doc[0] + + if (($PSCmdlet.ParameterSetName -eq "ViewSet") -or ($PSCmdlet.ParameterSetName -eq "CheckSet")) { + Write-Verbose "Proceeding with parameter set => view" + if ($check.IsPresent -eq $true) { + [string]$haveVer = Get-HPBIOSVersion -Target $target + # check should return true if local BIOS is same or newer than the latest available remote BIOS. + return ([string]$haveVer.TrimStart("0") -ge [string]$latestVer[0].Ver) + } + + $args = @{} + if ($all.IsPresent) { + $args.Property = (@{ Name = 'Ver'; expr = { $_.Ver.TrimStart("0") } },"Date","Bin",` + (@{ Name = 'RollbackAllowed'; expr = { [bool][int]$_.RB.trim() } }),` + (@{ Name = 'Importance'; expr = { [Enum]::ToObject([BiosUpdateCriticality],[int]$_.L.trim()) } }),` + (@{ Name = 'Dependency'; expr = { [string]$_.DP.trim() } })) + } + else { + $args.Property = (@{ Name = 'Ver'; expr = { $_.Ver.TrimStart("0") } },"Date","Bin") + } + + # for current platform: latest should return whichever is latest, between local and remote. + # for any other platform specified: latest should return latest entry from SystemID.XML since we don't know local BIOSVersion + if ($latest) + { + if ($PSBoundParameters.ContainsKey('Platform')) + { + # platform specified, do not read information from local system and return latest platform published + $args.First = 1 + } + else { + $retrieved = 0 + # determine the local BIOS version + [string]$haveVer = Get-HPBIOSVersion -Target $target + # latest should return whichever is latest, between local and remote for current system. + if ([string]$haveVer -ge [string]$latestVer[0].Ver) + { + # local is the latest. So, retrieve attributes other than BIOSVersion to print for latest + for ($i = 0; $i -lt $refined_doc.Length; $i++) { + if ($refined_doc[$i].Ver -eq $haveVer) { + $haveVerFromDoc = $refined_doc[$i] + $pso = [pscustomobject]@{ + Ver = $haveVerFromDoc.Ver + Date = $haveVerFromDoc.Date + Bin = $haveVerFromDoc.Bin + } + if ($all) { + $pso | Add-Member -MemberType ScriptProperty -Name RollbackAllowed -Value { [bool][int]$haveVerFromDoc.RB.trim() } + $pso | Add-Member -MemberType ScriptProperty -Name Importance -Value { [Enum]::ToObject([BiosUpdateCriticality],[int]$haveVerFromDoc.L.trim()) } + $pso | Add-Member -MemberType ScriptProperty -Name Dependency -Value { [string]$haveVerFromDoc.DP.trim } + } + $retrieved = 1 + if ($pso) { + formatBiosVersionsOutputList ($pso) + return + } + } + } + if ($retrieved -eq 0) { + Write-Verbose "Retrieving entry from XML failed, get the information from CIM class." + # calculating date from Win32_BIOS + $year = (Get-CimInstance Win32_BIOS).ReleaseDate.Year + $month = (Get-CimInstance Win32_BIOS).ReleaseDate.Month + $day = (Get-CimInstance Win32_BIOS).ReleaseDate.Day + $date = $year.ToString() + '-' + $month.ToString() + '-' + $day.ToString() + Write-Verbose "Date calculated from CIM Class is: $date" + + $currentVer = Get-HPBIOSVersion + $pso = [pscustomobject]@{ + Ver = $currentVer + Date = $date + Bin = $null + } + if ($all) { + $pso | Add-Member -MemberType ScriptProperty -Name RollbackAllowed -Value { $null } + $pso | Add-Member -MemberType ScriptProperty -Name Importance -Value { $null } + $pso | Add-Member -MemberType ScriptProperty -Name Dependency -Value { $null } + } + if ($pso) { + $retrieved = 1 + formatBiosVersionsOutputList ($pso) + return + } + } + } + else { + # remote is the latest + $args.First = 1 + } + } + } + formatBiosVersionsOutputList ($refined_doc | Sort-Object -Property ver -Descending | Select-Object @args) + } + else { + $download_params = @{} + + if ($version) { + $version = $version.TrimStart('0') + $latestVer = $refined_doc ` + | Where-Object { $_.Ver.TrimStart("0") -eq $version } ` + | Select-Object -Property Ver,Bin -First 1 + } + + if (-not $latestVer) { throw [System.ArgumentOutOfRangeException]"Version $version was not found." } + + if (($flash.IsPresent) -and (-not $saveAs)) { + $saveAs = Get-HPPrivateTemporaryFileName -FileName $latestVer.Bin + $download_params.NoClobber = "yes" + Write-Verbose "Temporary file name for download is $saveAs" + } + else { $download_params.NoClobber = if ($overwrite.IsPresent) { "yes" } else { "no" } } + + Write-Verbose "Proceeding with parameter set => download, overwrite=$($download_params.NoClobber)" + + $remote_file = $latestVer.Bin + $local_file = $latestVer.Bin + $remote_ver = $latestVer.Ver + + if ($PSCmdlet.ParameterSetName -eq "FlashSetPassword" -or + $PSCmdlet.ParameterSetName -eq "FlashSetSigningKeyFile" -or + $PSCmdlet.ParameterSetName -eq "FlashSetSigningKeyCert") { + $running = Get-HPBIOSVersion + $offlineMode = $false + if ($running.TrimStart("0").trim() -ge $remote_ver.TrimStart("0").trim()) { + if ($Force.IsPresent) { + $offlineMode = $true + Write-Verbose "Offline mode selected to downgrade BIOS" + } + else { + Write-Host "This system is already running BIOS version $($remote_ver.TrimStart(`"0`").Trim()) or newer." + Write-Host -ForegroundColor Cyan "You can specify -Force on the command line to proceed anyway." + return + } + } + if (-not $offlineMode -and $Offline.IsPresent) { + $offlineMode = $true + Write-Verbose "Offline mode selected" + } + } + + if ($saveAs) { + $local_file = $saveAs + } + + [Environment]::CurrentDirectory = $pwd + #if (-not [System.IO.Path]::IsPathRooted($to)) { $to = ".\$to" } + + $download_params.url = [string]"$Url/{0}/{1}" -f $platform,$remote_file + $download_params.Target = [IO.Path]::GetFullPath($local_file) + $download_params.progress = ($quiet.IsPresent -eq $false) + Invoke-HPPrivateDownloadFile @download_params -panic + + if ($PSCmdlet.ParameterSetName -eq "FlashSetPassword" -or + $PSCmdlet.ParameterSetName -eq "FlashSetSigningKeyFile" -or + $PSCmdlet.ParameterSetName -eq "FlashSetSigningKeyCert") { + if (-not $yes) { + Write-Host -ForegroundColor Cyan "Are you sure you want to flash this system with version '$remote_ver'?" + Write-Host -ForegroundColor Cyan "Current BIOS version is $(Get-HPBIOSVersion)." + Write-Host -ForegroundColor Cyan "A reboot will be required for the operation to complete." + $response = Read-Host -Prompt "Type 'Y' to continue and anything else to abort. Or specify -Yes on the command line to skip this prompt" + if ($response -ne "Y") { + Write-Verbose "User did not confirm and did not disable confirmation - aborting." + return + } + } + + Write-Verbose "Passing to flash process with file $($download_params.target)" + + $update_params = @{ + file = $download_params.Target + bitlocker = $bitlocker + Force = $Force + Password = $password + } + + Update-HPFirmware @update_params -Verbose:$VerbosePreference -Offline:$offlineMode -NoWait:$NoWait + } + } + +} + +function Get-HPPrivateBIOSFamilyNameAndVersion { + [CmdletBinding()] + param( + ) + + $params = @{ + ClassName = 'Win32_BIOS' + Namespace = 'root\cimv2' + } + $params.CimSession = newCimSession -Target "." + $obj = Get-CimInstance @params -ErrorAction stop + $verfield = (getWmiField $obj "SMBIOSBIOSVersion").Split() + + return $verfield[0],$verfield[2] +} + + +<# +.SYNOPSIS + Retrieves the available BIOS updates using Windows Update packages + +.DESCRIPTION + This command retrieves the available BIOS updates using Windows Update package by using an internet service to retrieve the list of BIOS capsule updates available for a platform family, and optionally install the update in the current system. The versions available through this command may differ from the Get-HPBIOSUpdate command since this command relies on the Microsoft capsules availability. The availability of the updates can be delayed due to the Windows Update in-flight processes. + +.PARAMETER Family + Specifies the platform family to retrieve. If not specified, this command retrieves and applies the current platform family. + +.PARAMETER Severity + If specified, this command returns the available BIOS for the specified severity: 'Latest' or 'LatestCritical'. + +.PARAMETER Download + If specified, this command downloads the BIOS file to the current directory or a path specified by the -SaveAs parameter. + +.PARAMETER Flash + If specified, this command checks and applies the BIOS update to the current system. + +.PARAMETER Version + Specifies the BIOS version to download. If not specified, the latest version available will be downloaded. + +.PARAMETER SaveAs + Specifies the file name for the downloaded BIOS file. If not specified, the remote file name will be used. + In order to use the downloaded file with the Add-HPBIOSWindowsUpdateScripts command, the file name must follow the standard: platform family (3 digit) + underscore + BIOS version (6 digits) + .cab, for instance: R70_011200.cab + +.PARAMETER Yes + If specified, this command will show an 'Are you sure you want to flash' prompt. This parameter prevents users from accidentally flashing the BIOS. + +.PARAMETER Force + If specified, this command forces the BIOS to update even if the target BIOS is already installed. + +.PARAMETER Url + Specifies an alternate Url source for the platform's BIOS update catalog (xml). This URL must be an HTTPS URL. + +.PARAMETER Quiet + If specified, this command will not display a progress bar during the BIOS file download. + +.PARAMETER List + If specified, this command will display a list with all the BIOS versions available for the specified platform. + +.NOTES + - Requires Windows group policy support + +.EXAMPLE + Get-HPBIOSWindowsUpdate + +.EXAMPLE + Get-HPBIOSWindowsUpdate -List -Family R70 + +.EXAMPLE + Get-HPBIOSWindowsUpdate -Flash -Severity Latest + +.EXAMPLE + Get-HPBIOSWindowsUpdate -Flash -Severity LatestCritical + +.EXAMPLE + Get-HPBIOSWindowsUpdate -Flash -Severity LatestCritical -Family R70 + +#> +function Get-HPBIOSWindowsUpdate { + [CmdletBinding(DefaultParameterSetName = "Severity",HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPBIOSWindowsUpdate")] + param( + [Parameter(Mandatory = $false,Position = 0,ParameterSetName = "Severity")] + [ValidateSet('Latest','LatestCritical')] + [string]$Severity = 'Latest', + + [Parameter(Mandatory = $true,Position = 0,ParameterSetName = "Specific")] + [string]$Version, + + [Parameter(Mandatory = $false,Position = 1,ParameterSetName = "Severity")] + [Parameter(Mandatory = $false,Position = 1,ParameterSetName = "Specific")] + [Parameter(Mandatory = $false,Position = 0,ParameterSetName = "List")] + [string]$Family, + + [Parameter(Mandatory = $false,Position = 2,ParameterSetName = "Severity")] + [Parameter(Mandatory = $false,Position = 2,ParameterSetName = "Specific")] + [Parameter(Mandatory = $false,Position = 1,ParameterSetName = "List")] + [string]$Url = "https://hpia.hpcloud.hp.com/downloads/capsule", + + [Parameter(Mandatory = $false,Position = 3,ParameterSetName = "Severity")] + [Parameter(Mandatory = $false,Position = 3,ParameterSetName = "Specific")] + [switch]$Quiet, + + [Parameter(Mandatory = $false,Position = 4,ParameterSetName = "Severity")] + [Parameter(Mandatory = $false,Position = 4,ParameterSetName = "Specific")] + [string]$SaveAs, + + [Parameter(Mandatory = $false,Position = 5,ParameterSetName = "Severity")] + [Parameter(Mandatory = $false,Position = 5,ParameterSetName = "Specific")] + [switch]$Download, + + [Parameter(Mandatory = $false,Position = 6,ParameterSetName = "Severity")] + [Parameter(Mandatory = $false,Position = 6,ParameterSetName = "Specific")] + [switch]$Flash, + + [Parameter(Mandatory = $false,Position = 7,ParameterSetName = "Severity")] + [Parameter(Mandatory = $false,Position = 7,ParameterSetName = "Specific")] + [switch]$Yes, + + [Parameter(Mandatory = $false,Position = 8,ParameterSetName = "Severity")] + [Parameter(Mandatory = $false,Position = 8,ParameterSetName = "Specific")] + [switch]$Force, + + [Parameter(Mandatory = $true,Position = 2,ParameterSetName = "List")] + [switch]$List + ) + + # only allow https or file paths with or without file:// URL prefix + if ($Url -and -not ($Url.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($Url) -or $Url.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if ($Family -and -not $Version) { + $_,$biosVersion = Get-HPPrivateBIOSFamilyNameAndVersion + $biosFamily = $Family + } + elseif (-not $Family -and $Version) { + $biosFamily,$_ = Get-HPPrivateBIOSFamilyNameAndVersion + $biosVersion = $Version + } + elseif (-not $Version -and -not $Family) { + $biosFamily,$biosVersion = Get-HPPrivateBIOSFamilyNameAndVersion + } else { + $biosFamily = $Family + $biosVersion = $Version + } + + [string]$uri = [string]"$Url/{0}/{0}.json" -f $biosFamily.ToUpper() + Write-Verbose "Retrieving $biosFamily catalog $uri" + Write-Verbose "BIOS Version: $biosVersion" + + $ua = Get-HPPrivateUserAgent + [System.Net.ServicePointManager]::SecurityProtocol = Get-HPPrivateAllowedHttpsProtocols + try { + $data = Invoke-WebRequest -Uri $uri -UserAgent $ua -UseBasicParsing -ErrorAction Stop + } + catch { + Write-Verbose $_.Exception + throw [System.Management.Automation.ItemNotFoundException]"Platform family $biosFamily is not currently supported. Unable to retrieve the $biosFamily BIOS update catalog. For list of supported platforms, please visit https://ftp.ext.hp.com/pub/caps-softpaq/cmit/imagepal/ref/platformList.html" + } + + $doc = [System.IO.StreamReader]::new($data.RawContentStream).ReadToEnd() | ConvertFrom-Json + + if ($List.IsPresent) { + $data = $doc | Sort-Object -Property biosVersion -Descending + return $data | Format-Table -Property biosFamily,biosVersion,severity,isLatest,IsLatestCritical + } + + if ($PSCmdlet.ParameterSetName -eq "Specific") { + $filter = $doc | Where-Object { $_.BiosVersion -eq $biosVersion } # specific + Write-Verbose "Locating a specific version" + if ($null -eq $filter) { + throw "The version specified is not available on the $biosFamily catalog" + } + } + elseif ($Severity -eq "LatestCritical") { + $filter = $doc | Where-Object { $_.isLatestCritical -eq $true } # latest critical + Write-Verbose "Locating the latest critical version available" + } + else { + $filter = $doc | Where-Object { $_.isLatest -eq $true } # latest + Write-Verbose "Locating the latest version available" + } + + $sort = $filter | Sort-Object -Property biosVersion -Descending + @{ + Family = $sort[0].biosFamily + Version = $sort[0].BiosVersion + } + + if ($Flash.IsPresent) { + $running = Get-HPBIOSVersion + if (-not $Yes.IsPresent) { + Write-Host -ForegroundColor Cyan "Are you sure you want to flash this system with version '$($sort[0].biosVersion)'?" + Write-Host -ForegroundColor Cyan "Current BIOS version is $running." + Write-Host -ForegroundColor Cyan "A reboot will be required for the operation to complete." + $response = Read-Host -Prompt "Type 'Y' to continue and anything else to abort. Or specify -Yes on the command line to skip this prompt" + if ($response -ne "Y") { + Write-Verbose "User did not confirm and did not disable confirmation - aborting." + return + } + } + if ((-not $Force.IsPresent) -and $running.TrimStart("0").trim() -ge $sort[0].BiosVersion.TrimStart("0").trim()) { + Write-Host "This system is already running BIOS version $($sort[0].biosVersion) or newer." + Write-Host -ForegroundColor Cyan "You can specify -Force on the command line to proceed anyway." + return + } + } + + if ($Download.IsPresent -or $Flash.IsPresent) { + Write-Verbose "Download from $($sort[0].url)" + if ($SaveAs) { + $localFile = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($SaveAs) + } else { + $extension = ($sort[0].url -split '\.')[-1] + $SaveAs = Get-HPPrivateTemporaryFileName -FileName "$($sort[0].biosFamily)_$($sort[0].biosVersion -Replace '\.').$extension" + $localFile = [IO.Path]::GetFullPath($SaveAs) + } + Write-Verbose "LocalFile: $localFile" + + $download_params = @{ + NoClobber = "yes" + url = $sort[0].url + Target = $localFile + progress = ($Quiet.IsPresent -eq $false) + } + + try { + Invoke-HPPrivateDownloadFile @download_params -Verbose:$VerbosePreference + } + catch { + throw [System.Management.Automation.ItemNotFoundException]"Unable to download the BIOS update archive from $($download_params.url): $($_.Exception)" + } + Write-Host "Saved as $localFile" + + $hash = (Get-FileHash $localFile -Algorithm SHA1).Hash + $bytes = [byte[]] -split ($hash -replace '..','0x$& ') + $base64 = [System.Convert]::ToBase64String($bytes) + if ($base64 -eq $sort[0].digest) { + Write-Verbose "Integrity check passed" + } + else { + throw "Cab file integrity check failed" + } + } + + if ($Flash.IsPresent) { + Add-HPBIOSWindowsUpdateScripts -WindowsUpdateFile $localFile + } +} + +function Get-HPPrivatePSScriptsEntries { + [CmdletBinding()] + param( + [Parameter(Mandatory = $false,Position = 0)] + [string]$Path = "${env:SystemRoot}\System32\GroupPolicy\Machine\Scripts\psscripts.ini" + ) + + $types = '[Logon]','[Logoff]','[Startup]','[Shutdown]' + $cmdLinesSet = @{} + $parametersSet = @{} + + if ([System.IO.File]::Exists($Path)) { + $contents = Get-Content $Path + if ($contents) { + for ($i = 0; $i -lt $contents.Length; $i++) { + if ($types.contains($contents[$i])) { + $t = $contents[$i] + $cmdLinesSet[$t] = [System.Collections.ArrayList]@() + $parametersSet[$t] = [System.Collections.ArrayList]@() + continue + } + if ($contents[$i].Length -gt 0) { + $cmdLinesSet[$t].Add($contents[$i].substring(1)) | Out-Null + $parametersSet[$t].Add($contents[$i + 1].substring(1)) | Out-Null + $i++ + } + } + } + } + + $cmdLinesSet,$parametersSet +} + +function Set-HPPrivatePSScriptsEntries { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true,Position = 0)] + $CmdLines, + + [Parameter(Mandatory = $true,Position = 1)] + $Parameters, + + [Parameter(Mandatory = $false,Position = 2)] + [string]$Path = "${env:SystemRoot}\System32\GroupPolicy\Machine\Scripts\psscripts.ini" + ) + + $types = '[Logon]','[Logoff]','[Startup]','[Shutdown]' + $contents = "" + foreach ($type in $types) { + if ($CmdLines.contains($type)) { + for ($i = 0; $i -lt $CmdLines[$type].Count; $i++) { + if ($i -eq 0) { + $contents += "$type`n" + } + $contents += "$($i)$($CmdLines[$type][$i])`n" + $contents += "$($i)$($Parameters[$type][$i])`n" + } + $contents += "`n" + } + } + + if (-not [System.IO.File]::Exists($Path)) { + New-Item -Force -Path $Path -Type File + } + $contents | Set-Content -Path $Path -Force +} + +<# +.SYNOPSIS + Adds a PowerShell script to run at Startup or Shutdown + +.DESCRIPTION + This command adds a PowerShell script to the group policy that runs at Startup or Shutdown. This command is invoked by the Add-HPBIOSWindowsUpdateScripts command. + +.PARAMETER Type + Specifies the type of script should run at Startup or Shutdown. The value of this parameter must be either 'Startup' or 'Shutdown'. + +.PARAMETER CmdLine + Specifies a command line for a PowerShell script + +.PARAMETER Parameters + Specifies the parameters to be passed to the script at its execution time + +.PARAMETER Path + If specified, a custom path can be used. + +.EXAMPLE + Add-PSScriptsEntry -Type 'Shutdown' -CmdLine 'myscript.ps1' + +.EXAMPLE + Add-PSScriptsEntry -Type 'Startup' -CmdLine 'myscript.ps1' + +.EXAMPLE + Add-PSScriptsEntry -Type 'Startup' -CmdLine 'myscript.ps1' -Parameters 'myparam' +#> +function Add-PSScriptsEntry +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Add-PSScriptsEntry")] + param( + [ValidateSet('Startup','Shutdown')] + [Parameter(Mandatory = $true,Position = 0)] + [string]$Type, + + [Parameter(Mandatory = $true,Position = 1)] + [string]$CmdLine, + + [Parameter(Mandatory = $false,Position = 2)] + [string]$Parameters, + + [Parameter(Mandatory = $false,Position = 3)] + [string]$Path = "${env:SystemRoot}\System32\GroupPolicy\Machine\Scripts\psscripts.ini" + ) + + $cmdLinesSet,$parametersSet = Get-HPPrivatePSScriptsEntries -Path $Path + + if (-not $cmdLinesSet.ContainsKey("[$Type]")) { + $cmdLinesSet["[$Type]"] = [System.Collections.ArrayList]@() + } + if (-not $parametersSet.ContainsKey("[$Type]")) { + $parametersSet["[$Type]"] = [System.Collections.ArrayList]@() + } + + if (-not $cmdLinesSet["[$Type]"].contains("CmdLine=$CmdLine")) { + $cmdLinesSet["[$Type]"].Add("CmdLine=$CmdLine") | Out-Null + $parametersSet["[$Type]"].Add("Parameters=$Parameters") | Out-Null + } + + Set-HPPrivatePSScriptsEntries -CmdLines $cmdLinesSet -Parameters $parametersSet -Path $Path +} + +<# +.SYNOPSIS + Retrieves the HP-CMSL environment configuration + +.DESCRIPTION + This command returns environment information to help debug issues. + +.EXAMPLE + Get-HPCMSLEnvironment > MyEnvironment.txt +#> +function Get-HPCMSLEnvironment { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPCMSLEnvironment")] + param() + + Get-ComputerInfo + $psVersionTable + try { + $psISE + } + catch { + 'Not running on Windows PowerShell ISE' + } + + $modules = @( + 'HP.Consent', + 'HP.Private', + 'HP.Utility', + 'HP.ClientManagement', + 'HP.Firmware', + 'HP.Notifications', + 'HP.Sinks', + 'HP.Retail', + 'HP.Softpaq', + 'HP.Repo', + 'HP.SmartExperiences' + ) + + $modulesFullVersion = @{} + foreach ($module in $modules) { + $m = Get-Module -Name $module + if ($null -eq $m) { + $m = Get-Module -Name $module -ListAvailable + } + $path = "$($m.ModuleBase)\$module.psd1" + $line = Select-String -Path $path -Pattern "FullModuleVersion = '(.+)'" + if ($null -eq $line -or $line.PSobject.Properties.name -notcontains 'Matches') { + $modulesFullVersion[$module] = $null + continue + } + $lineMatch = $line.Matches.Value + $lineMatch -match "'(.+)'" | Out-Null + $fullModuleVersion = $Matches[1] + $modulesFullVersion[$module] = $fullModuleVersion + } + $modulesFullVersion + @{ + SystemID = Get-HPDeviceProductID + Os = Get-HPPrivateCurrentOs + OsVer = Get-HPPrivateCurrentDisplayOSVer + Bitness = Get-HPPrivateCurrentOsBitness + } +} + +<# +.SYNOPSIS + Removes a PowerShell script from the group policy + +.DESCRIPTION + This command removes a PowerShell script from the group policy that runs at Startup or Shutdown. This command returns true if any entry was removed. This command is invoked by the Add-HPBIOSWindowsUpdateScripts command. + +.PARAMETER Type + Specifies the type of script that should run at Startup or Shutdown. The value of this parameter must be either 'Startup' or 'Shutdown'. + +.PARAMETER CmdLine + Specifies a command line for a PowerShell script + +.PARAMETER Parameters + Specifies the parameters to be passed to the script at its execution time + +.PARAMETER Path + If specified, a custom path can be used. + +.EXAMPLE + Remove-PSScriptsEntry -Type 'Shutdown' -CmdLine 'myscript.ps1' + +.EXAMPLE + Remove-PSScriptsEntry -Type 'Startup' -CmdLine 'myscript.ps1' + +.EXAMPLE + Remove-PSScriptsEntry -Type 'Startup' -CmdLine 'myscript.ps1' -Parameters 'myparam' +#> +function Remove-PSScriptsEntry { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Remove-PSScriptsEntry")] + param( + [ValidateSet('Startup','Shutdown')] + [Parameter(Mandatory = $true,Position = 0)] + [string]$Type, + + [Parameter(Mandatory = $true,Position = 1)] + [string]$CmdLine, + + [Parameter(Mandatory = $false,Position = 2)] + [string]$Parameters, + + [Parameter(Mandatory = $false,Position = 3)] + [string]$Path = "${env:SystemRoot}\System32\GroupPolicy\Machine\Scripts\psscripts.ini" + ) + + $cmdLinesSet,$parametersSet = Get-HPPrivatePSScriptsEntries -Path $Path + + if (-not $cmdLinesSet.ContainsKey("[$Type]") -and -not $parametersSet.ContainsKey("[$Type]")) { + # File doesn't contain the type specified. There is nothing to be removed + return + } + + $removed = $false + # If a parameter is specified we remove only the scripts with the specified parameter from the file + while ($cmdLinesSet["[$Type]"].contains("CmdLine=$CmdLine") -and + (-not $Parameters -or $parametersSet["[$Type]"].item($cmdLinesSet["[$Type]"].IndexOf("CmdLine=$CmdLine")) -eq "Parameters=$Parameters") + ) { + $index = $cmdLinesSet["[$Type]"].IndexOf("CmdLine=$CmdLine") + $cmdLinesSet["[$Type]"].RemoveAt($index) | Out-Null + $parametersSet["[$Type]"].RemoveAt($index) | Out-Null + $removed = $true + } + + Set-HPPrivatePSScriptsEntries -CmdLines $cmdLinesSet -Parameters $parametersSet -Path $Path + return $removed +} + +<# +.SYNOPSIS + Applies BIOS updates using a Windows Update package + +.DESCRIPTION + This command extracts the Windows Update file and prepares the system to receive a BIOS update. This command is invoked by the Get-HPBIOSWindowsUpdate command. + +.PARAMETER WindowsUpdateFile + Specifies the absolute path to the compressed CAB file downloaded with the Get-HPBIOSWindowsUpdate command. + The file name must follow the standard: platform family (3 digit) + underscore + BIOS version (6 digits) + .cab, for instance: R70_011200.cab + +.NOTES + Requires Windows group policy support + +.EXAMPLE + Add-HPBIOSWindowsUpdateScripts -WindowsUpdateFile C:\R70_011200.cab +#> +function Add-HPBIOSWindowsUpdateScripts { + [CmdletBinding(DefaultParameterSetName = "Default",HelpUri = "https://developers.hp.com/hp-client-management/doc/Add-HPBIOSWindowsUpdateScripts")] + param( + [ValidatePattern('^[A-Za-z]:\\(?:[^\\/:*?"<>|\r\n]+\\)*[A-Za-z0-9]{3}_[0-9]{6}\.(cab|CAB)$')] + [Parameter(Mandatory = $true,Position = 0,ParameterSetName = "Default")] + [string]$WindowsUpdateFile + ) + + $gpt = "${env:SystemRoot}\System32\GroupPolicy\gpt.ini" + $scripts = "${env:SystemRoot}\System32\GroupPolicy\Machine" + + New-Item -ItemType Directory -Force -Path "$scripts\Scripts" | Out-Null + New-Item -ItemType Directory -Force -Path "$scripts\Scripts\Startup" | Out-Null + New-Item -ItemType Directory -Force -Path "$scripts\Scripts\Shutdown" | Out-Null + + Invoke-HPPrivateExpandCAB -cab $WindowsUpdateFile -Verbose:$VerbosePreference + + $fileName = ($WindowsUpdateFile -split '\\')[-1] + $directory = $WindowsUpdateFile -replace $fileName,'' + + $fileName = $fileName.substring(0,$fileName.Length - 4) + + # Directory name comes from WindowsUpdateFile parameter, no need to check if version has 4 or 6 digits + $expectedDir = "$directory$fileName.cab.dir" + + # File name is expected to include a 6 digit version but will find all inf files + # that match the version regardless of trailing zeroes + # in case inf file includes a 4 digit version instead. + # Using first inf file if mulitple inf files are found. + $inf = (, $(Get-ChildItem -Path $expectedDir -File -Filter "$($fileName.TrimEnd("0"))*.inf" -Name))[0] + + if (-not $inf) { + # inf file with 4 digits or 6 digits not found in expanded cab file + Remove-Item $expectedDir -Force -Recurse + throw "Invalid cab file, did not find .inf in contents" + } + + $infFileName = $inf.substring(0,$inf.Length - 4) + $binFileLength = (Get-Item "$expectedDir\$infFileName.bin").Length + + # Remove cab file + Remove-Item $WindowsUpdateFile -Force + + # Remove previously extracted files in shutdown script directory + Remove-Item -Recurse -Force "$scripts\Scripts\Shutdown\wu_image" -ErrorAction Ignore + + # Move cab.dir and its contents to the shutdown script directory + Move-Item $expectedDir "$scripts\Scripts\Shutdown\wu_image" -Force + $log = ".\wu_bios_update.log" + + # CMSL modules should be included at startup to use Remove-PSScriptsEntry function + $clientManagementModulePath = (Get-Module -Name HP.ClientManagement).Path + $privateModulePath = (Get-Module -Name HP.Private).Path + + # Move DeviceInstall service to be notified after the Group Policy shutdown script + $preshutdownOrder = (Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control" -Name "PreshutdownOrder").PreshutdownOrder | Where-Object { $_ -ne "DeviceInstall" } + $preshutdownOrder += "DeviceInstall" + Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control" -Name "PreshutdownOrder" -Value $preshutdownOrder -Force -ErrorAction SilentlyContinue | Out-Null + + # Clean EFI partition to better predict free space remaining at the time of reboot + # There is still a risk that there will not be enough space when pnputil script is executed at reboot if EFI partition is modified + # between now and reboot time, but this check will at least avoid the case where there is not enough space now. + # We will notify users of insufficient space now rather than trying to figure out after reboot why bios update failed. + $volumes = Get-Partition | Select-Object ` + @{ Name = "Path"; Expression = { (Get-Volume -Partition $_).Path } },` + @{ Name = "Mount"; Expression = {(Get-Volume -Partition $_).DriveType } },` + @{ Name = "Type"; Expression = { $_.Type } },` + @{ Name = "Disk"; Expression = { $_.DiskNumber } },` + @{ Name = "UniqueId"; Expression = { $_.UniqueId } } + $volumes = $volumes | Where-Object Mount -EQ "Fixed" + [array]$efi = $volumes | Where-Object { $_.type -eq "System" } + [array]$efi = $efi | Where-Object { (Get-Disk -Number $_.Disk).OperationalStatus -eq "Online" } + [array]$efi = $efi | Where-Object { (Get-Disk -Number $_.Disk).IsBoot -eq $true } + Remove-Item "$($efi[0].Path)EFI\HP\DEVFW\*" -Recurse -Force -ErrorAction Ignore + + # Check if there is enough space on EFI partition to apply BIOS update with buffer of 3MB to be conservative + $freeSpace = Get-Volume -FilePath $efi.Path | Select-Object SizeRemaining + if ($freeSpace.SizeRemaining -lt ($binFileLength + 3000000)) { + throw "Not enough space on EFI partition to apply BIOS update. Free space is $($freeSpace.SizeRemaining) bytes, and the update requires $($binFileLength) bytes plus a buffer of 3MB." + } + + # Startup script + '$driver = Get-WmiObject Win32_PnPSignedDriver | ? DeviceClass -eq "Firmware" | Where Manufacturer -eq "HP Inc." +$infName = $driver.InfName +if ($infName) { + Write-Host "INF name: $infName" *>> ' + $log + ' + ' + ${env:SystemRoot} + '\System32\pnputil.exe /delete-driver $infName /uninstall /force *>> ' + $log + ' +} else { + Write-Host "No device to clean up" *>> ' + $log + ' +} + +Write-Host "Clean EFI partition" *>> ' + $log + ' +$volumes = Get-Partition | Select-Object ` + @{ Name = "Path"; Expression = { (Get-Volume -Partition $_).Path } },` + @{ Name = "Mount"; Expression = {(Get-Volume -Partition $_).DriveType } },` + @{ Name = "Type"; Expression = { $_.Type } },` + @{ Name = "Disk"; Expression = { $_.DiskNumber } } +$volumes = $volumes | Where-Object Mount -EQ "Fixed" +[array]$efi = $volumes | Where-Object { $_.type -eq "System" } +[array]$efi = $efi | Where-Object { (Get-Disk -Number $_.Disk).OperationalStatus -eq "Online" } +[array]$efi = $efi | Where-Object { (Get-Disk -Number $_.Disk).IsBoot -eq $true } +Remove-Item "$($efi[0].Path)EFI\HP\DEVFW\*" -Recurse -Force -ErrorAction Ignore *>> ' + $log + ' + +$freeSpace = Get-Volume -FilePath $efi.Path | Select-Object SizeRemaining +Write-Host "Free space on EFI partition: $($freeSpace.SizeRemaining)" *>> ' + $log + ' + +Remove-Item -Force ' + ${env:SystemRoot} + '\System32\GroupPolicy\Machine\Scripts\Startup\wu_startup.ps1 *>> ' + $log + ' +Remove-Item -Force ' + ${env:SystemRoot} + '\System32\GroupPolicy\Machine\Scripts\Shutdown\wu_shutdown.ps1 *>> ' + $log + ' +Remove-Item -Recurse -Force ' + ${env:SystemRoot} + '\System32\GroupPolicy\Machine\Scripts\Shutdown\wu_image *>> ' + $log + ' + +if (Get-Module -Name HP.Private) {remove-module -force HP.Private } +if (Get-Module -Name HP.ClientManagement) {remove-module -force HP.ClientManagement } +Import-Module -Force ' + $privateModulePath + ' *>> ' + $log + ' +Import-Module -Force ' + $clientManagementModulePath + ' -Function Remove-PSScriptsEntry *>> ' + $log + ' +Remove-PSScriptsEntry -Type "Startup" -CmdLine wu_startup.ps1 *>> ' + $log + ' +Remove-PSScriptsEntry -Type "Shutdown" -CmdLine wu_shutdown.ps1 *>> ' + $log + ' +gpupdate /wait:0 /force /target:computer *>> ' + $log + ' +' | Out-File "$scripts\Scripts\Startup\wu_startup.ps1" + + # Shutdown script + 'param($wu_inf_name) + +net start DeviceInstall *>> ' + $log + ' +$driver = Get-WmiObject Win32_PnPSignedDriver | ? DeviceClass -eq "Firmware" | Where Manufacturer -eq "HP Inc." +$infName = $driver.InfName +if ($infName) { + Write-Host "INF name: $infName" *>> ' + $log + ' + ' + ${env:SystemRoot} + '\System32\pnputil.exe /delete-driver $infName /uninstall /force *>> ' + $log + ' +} else { + Write-Host "No device to clean up" *>> ' + $log + ' +} + +Write-Host "Clean EFI partition" *>> ' + $log + ' +$volumes = Get-Partition | Select-Object ` + @{ Name = "Path"; Expression = { (Get-Volume -Partition $_).Path } },` + @{ Name = "Mount"; Expression = {(Get-Volume -Partition $_).DriveType } },` + @{ Name = "Type"; Expression = { $_.Type } },` + @{ Name = "Disk"; Expression = { $_.DiskNumber } } +$volumes = $volumes | Where-Object Mount -EQ "Fixed" +[array]$efi = $volumes | Where-Object { $_.type -eq "System" } +[array]$efi = $efi | Where-Object { (Get-Disk -Number $_.Disk).OperationalStatus -eq "Online" } +[array]$efi = $efi | Where-Object { (Get-Disk -Number $_.Disk).IsBoot -eq $true } +Remove-Item "$($efi[0].Path)EFI\HP\DEVFW\*" -Recurse -Force -ErrorAction Ignore *>> ' + $log + ' + +$freeSpace = Get-Volume -FilePath $efi.Path | Select-Object SizeRemaining +Write-Host "Free space on EFI partition: $($freeSpace.SizeRemaining)" *>> ' + $log + ' + +$volume = Get-BitLockerVolume | Where-Object VolumeType -EQ "OperatingSystem" +if ($volume.ProtectionStatus -ne "Off") { + Suspend-BitLocker -MountPoint $volume.MountPoint -RebootCount 1 *>> ' + $log + ' +} + +Write-Host "Invoke PnPUtil to update the BIOS" *>> ' + $log + ' +' + ${env:SystemRoot} + '\System32\pnputil.exe /add-driver ' + ${env:SystemRoot} + '\System32\GroupPolicy\Machine\Scripts\Shutdown\wu_image\$wu_inf_name.inf /install *>> ' + $log + ' +Write-Host "WU driver installed" *>> ' + $log + ' + +$volume = Get-BitLockerVolume | Where-Object VolumeType -EQ "OperatingSystem" +if ($volume.ProtectionStatus -ne "Off") { + Suspend-BitLocker -MountPoint $volume.MountPoint -RebootCount 1 *>> ' + $log + ' +} +' | Out-File "$scripts\Scripts\Shutdown\wu_shutdown.ps1" + + "[General]`ngPCMachineExtensionNames=[{42B5FAAE-6536-11D2-AE5A-0000F87571E3}{40B6664F-4972-11D1-A7CA-0000F87571E3}]`nVersion=65537" | Set-Content -Path $gpt -Force + + Remove-PSScriptsEntry -Type "Startup" -CmdLine "wu_startup.ps1" | Out-Null + Remove-PSScriptsEntry -Type "Shutdown" -CmdLine "wu_shutdown.ps1" | Out-Null + Add-PSScriptsEntry -Type "Startup" -CmdLine "wu_startup.ps1" + Add-PSScriptsEntry -Type "Shutdown" -CmdLine "wu_shutdown.ps1" -Parameters "$infFileName" + gpupdate /wait:0 /force /target:computer + Write-Host -ForegroundColor Cyan "Firmware image has been deployed. The process will continue after reboot." +} + +<# + .SYNOPSIS + Retrieves the platform name, system ID, or operating system support using either the platform name or its system ID + +.DESCRIPTION + This command retrieves information about the platform, given a platform name or system ID. This command can be used to convert between platform name and system IDs. Note that a platform may have multiple system IDs, or a system ID may map to multiple platforms. + + This command returns the following information: + + - SystemID: the system ID for this platform + - FamilyID: the platform family ID + - Name: the name of the platform + - DriverPackSupport: this platform supports driver packs + + Note that this command is not supported in WinPE. + +.PARAMETER Platform + Specifies a platform id (a 4-digit hexadecimal number) for the command to query with + +.PARAMETER Name + Specifies a platform name for the command to query with. The name must match the platform name exactly, unless the -Match/-Like parameter is also specified. + +.PARAMETER Like + Allows the query to return outputs based on a substring match rather than an exact match. If the platform contains the substring defined by the -Name parameter, it will be included in the output. This parameter can also be specified as -Match, for backwards compatibility. + + However, this parameter is now obsolete and may be removed at a future time. You can simply pass wildcards in the name field instead of using the like parameter. + For example, "Get-HPDeviceDetails -name '\*EliteBook\*'" and "Get-HPDeviceDetails -like -name 'EliteBook'" are identical. + +.PARAMETER OSList + If specified, this command returns the list of supported operating systems for the specified platform. + +.PARAMETER Url + Specifies an alternate location for the HP Image Assistant (HPIA) platform list XML. This URL must be https. If not specified, https://hpia.hpcloud.hp.com/ref is used by default. + +.EXAMPLE + Get-HPDeviceDetails -Platform 8100 + +.EXAMPLE + Get-HPDeviceDetails -Name 'HP ProOne 400 G3 20-inch Touch All-in-One PC' + +.EXAMPLE + Get-HPDeviceDetails -Like -Name '840 G5' + +#> +function Get-HPDeviceDetails { + [CmdletBinding( + DefaultParameterSetName = "FromID", + HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPDeviceDetails") + ] + param( + [ValidatePattern("^[a-fA-F0-9]{4}$")] + [Parameter(Mandatory = $false,Position = 0,ParameterSetName = "FromID")] + [string]$Platform, + + [Parameter(Mandatory = $true,Position = 1,ParameterSetName = "FromName")] + [string]$Name, + + [Parameter(Mandatory = $false,Position = 2,ParameterSetName = "FromName")] + [Alias('Match')] + [switch]$Like, + + [Parameter(Mandatory = $false,ParameterSetName = "FromName")] + [Parameter(Mandatory = $false,ParameterSetName = "FromID")] + [switch]$OSList, + + [Parameter(Mandatory = $false,Position = 3,ParameterSetName = "FromName")] + [Parameter(Mandatory = $false,Position = 1,ParameterSetName = "FromID")] + [string]$Url = "https://hpia.hpcloud.hp.com/ref" + ) + + if (Test-WinPE -Verbose:$VerbosePreference) { throw "Getting HP Device details is not supported in WinPE" } + + # only allow https or file paths with or without file:// URL prefix + if ($Url -and -not ($Url.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($Url) -or $Url.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + $filename = "platformList.cab" + $Url = "$Url/$filename" + $try_on_ftp = $false + + try { + $file = Get-HPPrivateOfflineCacheFiles -url $Url -FileName $filename -Expand -Verbose:$VerbosePreference + } + catch { + # platformList is not reachable on AWS, try to get it from FTP + $try_on_ftp = $true + } + + if ($try_on_ftp) + { + try { + $url = "https://ftp.hp.com/pub/caps-softpaq/cmit/imagepal/ref/platformList.cab" + $file = Get-HPPrivateOfflineCacheFiles -url $url -FileName $filename -Expand -Verbose:$VerbosePreference + } + catch { + Write-Host -ForegroundColor Magenta "platformList is not available on AWS or FTP." + throw [System.Net.WebException]"Could not find platformList." + } + } + + if (-not $platform -and -not $Name) { + try { $platform = Get-HPDeviceProductID -Verbose:$VerbosePreference } + catch { Write-Verbose "No platform found." } + } + if ($platform) { + $platform = $platform.ToLower() + } + if ($PSCmdlet.ParameterSetName -eq "FromID") { + $data = Select-Xml -Path "$file" -XPath "/ImagePal/Platform/SystemID[normalize-space(.)=`"$platform`"]/parent::*" + } + else { + $data = Select-Xml -Path "$file" -XPath "/ImagePal/Platform/ProductName[translate(substring(`"$($name.ToLower())`",0), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')]/parent::*" + } + + if (-not $data) { return } + + $searchName = $Name + if ($Like.IsPresent) + { + if (-not ($searchName).StartsWith('*')) { $searchName = ("*$searchName") } + if (-not ($searchName).EndsWith('*')) { $searchName = ("$searchName*") } + } + + $data.Node | ForEach-Object { + $__ = $_ + $pn = $_.ProductName. "#text" + + if ($oslist.IsPresent) { + [array]$r = ($__.OS | ForEach-Object { + if (($PSCmdlet.ParameterSetName -eq "FromID") -or ($pn -like $searchName)) { + $rid = $Null + if ("OSReleaseId" -in $_.PSObject.Properties.Name) { $rid = $_.OSReleaseId } + + [string]$osv = $_.OSVersion + if ("OSReleaseIdDisplay" -in $_.PSObject.Properties.Name -and $_.OSReleaseIdDisplay -ne '20H2') { + $rid = $_.OSReleaseIdDisplay + } + + $obj = New-Object -TypeName PSCustomObject -Property @{ + SystemID = $__.SystemID.ToUpper() + OperatingSystem = $_.OSDescription + OperatingSystemVersion = $osv + Architecture = $_.OSArchitecture + } + if ($rid) { + $obj | Add-Member -NotePropertyName OperatingSystemRelease -NotePropertyValue $rid + } + if ("OSBuildId" -in $_.PSObject.Properties.Name) { + $obj | Add-Member -NotePropertyName BuildNumber -NotePropertyValue $_.OSBuildId + } + $obj + } + }) + } + else { + + [array]$r = ($__.ProductName | ForEach-Object { + if (($PSCmdlet.ParameterSetName -eq "FromID") -or ($_. "#text" -like $searchName)) { + New-Object -TypeName PSCustomObject -Property @{ + SystemID = $__.SystemID.ToUpper() + Name = $_. "#text" + DriverPackSupport = [System.Convert]::ToBoolean($_.DPBCompliant) + UWPDriverPackSupport = [System.Convert]::ToBoolean($_.UDPCompliant) + } + } + }) + } + return $r + } +} + + + +function getFormattedBiosSettingValue { + [CmdletBinding()] + param($obj) + switch ($obj.CimClass.CimClassName) { + { $_ -eq 'HPBIOS_BIOSString' } { + $result = $obj.Value + + } + { $_ -eq 'HPBIOS_BIOSInteger' } { + $result = $obj.Value + } + { $_ -eq 'HPBIOS_BIOSEnumeration' } { + $result = $obj.CurrentValue + } + { $_ -eq 'HPBIOS_BIOSPassword' } { + throw [System.InvalidOperationException]"Password values cannot be retrieved, it will always result in an empty string" + } + { $_ -eq 'HPBIOS_BIOSOrderedList' } { + $result = $obj.Value + } + } + return $result +} + +function getWmiField ($obj,$fn) { $obj.$fn } + + +# format a setting using BCU (custom) format +function convertSettingToBCU ($setting) { + #if ($setting.DisplayInUI -eq 0) { return } + switch ($setting.CimClass.CimClassName) { + { $_ -eq 'HPBIOS_BIOSString' } { + Write-Output $setting.Name + + if ($setting.Value.contains("`n")) { + $setting.Value.Split("`n") | ForEach-Object { + $c = $_.trim() + Write-Output "`t$c" } + } + else { + Write-Output "`t$($setting.Value)" + } + + } + { $_ -eq 'HPBIOS_BIOSInteger' } { + Write-Output $setting.Name + Write-Output "`t$($setting.Value)" + } + { $_ -eq 'HPBIOS_BIOSPassword' } { + Write-Output $setting.Name + Write-Output "" + } + { $_ -eq 'HPBIOS_BIOSEnumeration' } { + Write-Output $setting.Name + $fields = $setting.Value.Split(",") + foreach ($f in $fields) { + Write-Output "`t$f" + } + } + { $_ -eq 'HPBIOS_BIOSOrderedList' } { + Write-Output $setting.Name + if ($null -ne $setting.Value) { + $fields = $setting.Value.Split(",") + foreach ($f in $fields) { + Write-Output "`t$f" + } + } + else { + Write-Output "`t$($setting.Value)" + } + } + } +} + +function formatBiosVersionsOutputList ($doc) { + switch ($format) { + "json" { return $doc | ConvertTo-Json } + "xml" { + Write-Output "" + if ($all) + { + $doc | ForEach-Object { Write-Output "$($_.Ver)$($_.bin)$($_.date)$($_.RollbackAllowed)$($_.Importance)" } + } + else { + $doc | ForEach-Object { Write-Output "$($_.Ver)$($_.bin)$($_.date)" } + } + Write-Output "" + return + } + "csv" { + return $doc | ConvertTo-Csv -NoTypeInformation + } + "list" { $doc | ForEach-Object { Write-Output "$($_.Bin) version $($_.Ver.TrimStart("0")), released $($_.Date)" } } + default { return $doc } + } +} + + +# format a setting using HPIA (xml) format +function convertSettingToXML ($setting) { + #if ($setting.DIsplayInUI -eq 0) { return } + Write-Output " " + Write-Output " $([System.Web.HttpUtility]::HtmlEncode($setting.Name))" + Write-Output " $($setting.CimClass.CimClassName)" + Write-Output " $($setting.DisplayInUI)" + Write-Output " $($setting.IsReadOnly)" + Write-Output " $($setting.RequiresPhysicalPresence)" + Write-Output " $($setting.Sequence)" + + switch ($setting.CimClass.CimClassName) { + { $_ -eq 'HPBIOS_BIOSPassword' } { + Write-Output " " + Write-Output " $($setting.MinLength)" + Write-Output " $($setting.MaxLength)" + + Write-Output " " + foreach ($e in $setting.SupportedEncoding) { + Write-Output " $e" + } + Write-Output " " + } + + { $_ -eq 'HPBIOS_BIOSString' } { + Write-Output " $([System.Web.HttpUtility]::HtmlEncode($setting.Value))" + Write-Output " $($setting.MinLength)" + Write-Output " $($setting.MaxLength)" + } + + { $_ -eq 'HPBIOS_BIOSInteger' } { + Write-Output " $($setting.Value)" + #Write-Output " $($setting.DisplayInUI)" + Write-Output " $($setting.LowerBound)" + Write-Output " $($setting.UpperBound)" + } + + { $_ -eq 'HPBIOS_BIOSEnumeration' } { + Write-Output " $([System.Web.HttpUtility]::HtmlEncode($setting.CurrentValue))" + Write-Output " " + foreach ($e in $setting.PossibleValues) { + Write-Output " $([System.Web.HttpUtility]::HtmlEncode($e))" + } + Write-Output " " + } + + { $_ -eq 'HPBIOS_BIOSOrderedList' } { + Write-Output " $([System.Web.HttpUtility]::HtmlEncode($setting.Value))" + Write-Output " " + foreach ($e in $setting.Elements) { + Write-Output " $([System.Web.HttpUtility]::HtmlEncode($e))" + } + Write-Output " " + } + } + Write-Output " " +} + +function convertSettingToJSON ($original_setting) { + + $setting = $original_setting | Select-Object * + + if ($setting.CimClass.CimClassName -eq "HPBIOS_BIOSInteger") { + $min = $setting.LowerBound + $max = $setting.UpperBound + Add-Member -InputObject $setting -Name "Min" -Value $min -MemberType NoteProperty + Add-Member -InputObject $setting -Name "Max" -Value $max -MemberType NoteProperty + + $d = $setting | Select-Object -Property Class,DisplayInUI,InstanceName,IsReadOnly,Min,Max,Name,Path,Prerequisites,PrerequisiteSize,RequiresPhysicalPresence,SecurityLevel,Sequence,Value + } + + if (($setting.CimClass.CimClassName -eq "HPBIOS_BIOSString") -or ($setting.CimClass.CimClassName -eq "HPBIOS_BIOSPassword")) { + $min = $setting.MinLength + $max = $setting.MaxLength + Add-Member -InputObject $setting -Name "Min" -Value $min -MemberType NoteProperty -Force + Add-Member -InputObject $setting -Name "Max" -Value $max -MemberType NoteProperty -Force + $d = $setting | Select-Object -Property Class,DisplayInUI,InstanceName,IsReadOnly,Min,Max,Name,Path,Prerequisites,PrerequisiteSize,RequiresPhysicalPresence,SecurityLevel,Sequence,Value + } + + if ($setting.CimClass.CimClassName -eq "HPBIOS_BIOSEnumeration") { + $min = $setting.Size + $max = $setting.Size + #Add-Member -InputObject $setting -Name "Min" -Value $min -MemberType NoteProperty + #Add-Member -InputObject $setting -Name "Max" -Value $max -MemberType NoteProperty + $setting.Value = $setting.CurrentValue + $d = $setting | Select-Object -Property Class,DisplayInUI,InstanceName,IsReadOnly,Min,Max,Name,Path,Prerequisites,PrerequisiteSize,RequiresPhysicalPresence,SecurityLevel,Sequence,Value,PossibleValues + } + + if ($setting.CimClass.CimClassName -eq "HPBIOS_BIOSOrderedList") { + #if Elements is null, initialize it as an empty array else select the first object + $Elements = $setting.Elements,@() | Select-Object -First 1 + $min = $Elements.Count + $max = $Elements.Count + Add-Member -InputObject $setting -Name "Min" -Value $min -MemberType NoteProperty + Add-Member -InputObject $setting -Name "Max" -Value $max -MemberType NoteProperty + Add-Member -InputObject $setting -Name "PossibleValues" -Value $Elements -MemberType NoteProperty + $d = $setting | Select-Object -Property Class,DisplayInUI,InstanceName,IsReadOnly,Min,Max,Name,Path,Prerequisites,PrerequisiteSize,RequiresPhysicalPresence,SecurityLevel,Sequence,Value,Elements + } + + + + $d | ConvertTo-Json -Depth 5 | Write-Output +} + +# format a setting as a CSV entry +function convertSettingToCSV ($setting) { + switch ($setting.CimClass.CimClassName) { + { $_ -eq 'HPBIOS_BIOSEnumeration' } { + Write-Output "`"$($setting.Name)`",`"$($setting.value)`",$($setting.IsReadOnly),`"picklist`",$($setting.RequiresPhysicalPresence),$($setting.Size),$($setting.Size)" + } + { $_ -eq 'HPBIOS_BIOSString' } { + Write-Output "`"$($setting.Name)`",`"$($setting.value)`",$($setting.IsReadOnly),`"string`",$($setting.RequiresPhysicalPresence),$($setting.MinLength),$($setting.MaxLength)" + } + { $_ -eq 'HPBIOS_BIOSPassword' } { + Write-Output "`"$($setting.Name)`",`"`",$($setting.IsReadOnly),`"password`",$($setting.RequiresPhysicalPresence),$($setting.MinLength),$($setting.MaxLength)" + } + { $_ -eq 'HPBIOS_BIOSInteger' } { + Write-Output "`"$($setting.Name)`",`"$($setting.value)`",$($setting.IsReadOnly),`"integer`",$($setting.RequiresPhysicalPresence),$($setting.LowerBound),$($setting.UpperBound)" + } + { $_ -eq 'HPBIOS_BIOSOrderedList' } { + Write-Output "`"$($setting.Name)`",`"$($setting.value)`",$($setting.IsReadOnly),`"orderedlist`",$($setting.RequiresPhysicalPresence),$($setting.Size),$($setting.Size)" + } + } +} + +function extractBIOSVersion { + [CmdletBinding()] + param + ( + [Parameter(Position = 0,Mandatory = $true)] + [ValidateNotNullOrEmpty()] + [string]$BIOSVersion + + ) + [string]$ver = $null + + # Does the BIOS version string contains x.xx[.xx]? + [bool]$found = $BIOSVersion -match '(\d+(\.\d+){1,2})' + if ($found) { + $ver = $matches[1] + Write-Verbose "BIOS version extracted=[$ver]" + } + + $ver +} + + + + +# SIG # Begin signature block +# MIIoHgYJKoZIhvcNAQcCoIIoDzCCKAsCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCdMpvKLXjeimuV +# 8ODk4ILVWpGwdYGnOCCSosNsHqBpwqCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6jCCGeYCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIDNXjr1g +# vZ5UUTnIk0tcb6Wv+UIJht68+A776LLunTXTMA0GCSqGSIb3DQEBAQUABIIBgIgN +# Jc6gNG4vHS9eC3RurCzeBeIrUqlxp4DL2n+0pcgdEekCQjETnF/jrNJwraQCxG0P +# 2YQ6K8Y+DhTiFm3f/Gjis4Z3rMnNjIdYsMEvVMnC6q5Jk9Mo4NjjJkV25UFqxFet +# ObL6Ty5aIJoF0hKtz7DCjdlKiexAfKRba3dWtixZkxF2XRs3KuA+GQuozV13TrLb +# yELasJRdBq+4EfLn0xUXQzde6XzG4wvNIJbemtpCABfahOUbcZvfpjPgyvYt2Z9z +# bHaJQW61SgMTD13G4OpKRGYml4snMb+QxPRomnsRyVlTnrt7YHMF4JoX7+psPEK3 +# Iu4T4UN9WJbHVupoikebviH5NV+gwkuLNRCE0jwWQx5M1uavLI5MuXiM+GBpeusC +# ppNYEhTm9JbqDs+8fN3tsqW1c2536QrJwjnODrQedt4SK3ab8W8jA3816d+JeC6Z +# psObQGGX+IQdtHdL6QBqdXIXxnd79BRYaet6AD0/nLMUbsfcnHFPdbr9KzrVy6GC +# F0Awghc8BgorBgEEAYI3AwMBMYIXLDCCFygGCSqGSIb3DQEHAqCCFxkwghcVAgED +# MQ8wDQYJYIZIAWUDBAIBBQAweAYLKoZIhvcNAQkQAQSgaQRnMGUCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCBxO5LAqrVeksjdwB+qpA1NeVnRqlLCJ8be +# +4ILbWmqiwIRAOQPBCPyAwXxU5GJs9544XUYDzIwMjQwODI3MTY1NTUwWqCCEwkw +# ggbCMIIEqqADAgECAhAFRK/zlJ0IOaa/2z9f5WEWMA0GCSqGSIb3DQEBCwUAMGMx +# CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMy +# RGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcg +# Q0EwHhcNMjMwNzE0MDAwMDAwWhcNMzQxMDEzMjM1OTU5WjBIMQswCQYDVQQGEwJV +# UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xIDAeBgNVBAMTF0RpZ2lDZXJ0IFRp +# bWVzdGFtcCAyMDIzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo1NF +# hx2DjlusPlSzI+DPn9fl0uddoQ4J3C9Io5d6OyqcZ9xiFVjBqZMRp82qsmrdECmK +# HmJjadNYnDVxvzqX65RQjxwg6seaOy+WZuNp52n+W8PWKyAcwZeUtKVQgfLPywem +# MGjKg0La/H8JJJSkghraarrYO8pd3hkYhftF6g1hbJ3+cV7EBpo88MUueQ8bZlLj +# yNY+X9pD04T10Mf2SC1eRXWWdf7dEKEbg8G45lKVtUfXeCk5a+B4WZfjRCtK1ZXO +# 7wgX6oJkTf8j48qG7rSkIWRw69XloNpjsy7pBe6q9iT1HbybHLK3X9/w7nZ9MZll +# R1WdSiQvrCuXvp/k/XtzPjLuUjT71Lvr1KAsNJvj3m5kGQc3AZEPHLVRzapMZoOI +# aGK7vEEbeBlt5NkP4FhB+9ixLOFRr7StFQYU6mIIE9NpHnxkTZ0P387RXoyqq1AV +# ybPKvNfEO2hEo6U7Qv1zfe7dCv95NBB+plwKWEwAPoVpdceDZNZ1zY8SdlalJPrX +# xGshuugfNJgvOuprAbD3+yqG7HtSOKmYCaFxsmxxrz64b5bV4RAT/mFHCoz+8LbH +# 1cfebCTwv0KCyqBxPZySkwS0aXAnDU+3tTbRyV8IpHCj7ArxES5k4MsiK8rxKBMh +# SVF+BmbTO77665E42FEHypS34lCh8zrTioPLQHsCAwEAAaOCAYswggGHMA4GA1Ud +# DwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATAfBgNVHSMEGDAWgBS6 +# FtltTYUvcyl2mi91jGogj57IbzAdBgNVHQ4EFgQUpbbvE+fvzdBkodVWqWUxo97V +# 40kwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp +# Z2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNybDCB +# kAYIKwYBBQUHAQEEgYMwgYAwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj +# ZXJ0LmNvbTBYBggrBgEFBQcwAoZMaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t +# L0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNy +# dDANBgkqhkiG9w0BAQsFAAOCAgEAgRrW3qCptZgXvHCNT4o8aJzYJf/LLOTN6l0i +# kuyMIgKpuM+AqNnn48XtJoKKcS8Y3U623mzX4WCcK+3tPUiOuGu6fF29wmE3aEl3 +# o+uQqhLXJ4Xzjh6S2sJAOJ9dyKAuJXglnSoFeoQpmLZXeY/bJlYrsPOnvTcM2Jh2 +# T1a5UsK2nTipgedtQVyMadG5K8TGe8+c+njikxp2oml101DkRBK+IA2eqUTQ+OVJ +# dwhaIcW0z5iVGlS6ubzBaRm6zxbygzc0brBBJt3eWpdPM43UjXd9dUWhpVgmagNF +# 3tlQtVCMr1a9TMXhRsUo063nQwBw3syYnhmJA+rUkTfvTVLzyWAhxFZH7doRS4wy +# w4jmWOK22z75X7BC1o/jF5HRqsBV44a/rCcsQdCaM0qoNtS5cpZ+l3k4SF/Kwtw9 +# Mt911jZnWon49qfH5U81PAC9vpwqbHkB3NpE5jreODsHXjlY9HxzMVWggBHLFAx+ +# rrz+pOt5Zapo1iLKO+uagjVXKBbLafIymrLS2Dq4sUaGa7oX/cR3bBVsrquvczro +# SUa31X/MtjjA2Owc9bahuEMs305MfR5ocMB3CtQC4Fxguyj/OOVSWtasFyIjTvTs +# 0xf7UGv/B3cfcZdEQcm4RtNsMnxYL2dHZeUbc7aZ+WssBkbvQR7w8F/g29mtkIBE +# r4AQQYowggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqGSIb3DQEB +# CwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNV +# BAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQg +# Um9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMxCzAJBgNV +# BAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNl +# cnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggIi +# MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXHJQPE8pE3 +# qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMfUBMLJnOW +# bfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w1lbU5ygt +# 69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRktFLydkf3 +# YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYbqMFkdECn +# wHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUmcJgmf6Aa +# RyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP65x9abJTy +# UpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzKQtwYSH8U +# NM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo80VgvCON +# WPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjBJgj5FBAS +# A31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXcheMBK9Rp61 +# 03a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAd +# BgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF +# BwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln +# aWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJo +# dHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy +# bDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQEL +# BQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd4ksp+3CK +# Daopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiCqBa9qVbP +# FXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl/Yy8ZCaH +# bJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeCRK6ZJxur +# JB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYTgAnEtp/N +# h4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/a6fxZsNB +# zU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37xJV77Qpf +# MzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmLNriT1Oby +# F5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0YgkPCr2B +# 2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJRyvmfxqk +# hQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIFjTCCBHWg +# AwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +# EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +# cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcN +# MjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEVMBMG +# A1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +# HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqGSIb3DQEB +# AQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +# pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+ +# n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYykt +# zuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw +# 2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6Qu +# BX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC +# 5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK +# 3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3 +# IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEP +# lAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98 +# THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t9dmpsh3l +# GwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8w +# DgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0 +# cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0 +# cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MEUGA1Ud +# HwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz +# c3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAowCDAGBgRVHSAAMA0GCSqGSIb3DQEB +# DAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9mqyhhyzshV6pGrsi+IcaaVQi +# 7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxSA8hO0Cre+i1Wz/n096wwepqL +# sl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE1Od/6Fmo8L8vC6bp8jQ87PcDx4eo +# 0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSMb++hUD38dglohJ9vytsgjTVg +# HAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbObyMt9H5xaiNrIv8SuFQtJ37YOtnw +# toeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMYIDdjCCA3ICAQEwdzBjMQswCQYDVQQG +# EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0 +# IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAFRK/z +# lJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUAoIHRMBoGCSqGSIb3DQEJAzENBgsq +# hkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwODI3MTY1NTUwWjArBgsqhkiG +# 9w0BCRACDDEcMBowGDAWBBRm8CsywsLJD4JdzqqKycZPGZzPQDAvBgkqhkiG9w0B +# CQQxIgQgGXCkwbNLPjuy79TFZfIUQ50b4QFi/bWmHBLxfyMgTmMwNwYLKoZIhvcN +# AQkQAi8xKDAmMCQwIgQg0vbkbe10IszR1EBXaEE2b4KK2lWarjMWr00amtQMeCgw +# DQYJKoZIhvcNAQEBBQAEggIAV/1p4ALYLj2QOjJjSA5NzHnngs5hq4+pn6L5zY1d +# H+9EQZnHql+jI76PF2byiLpE0YacCKk9QPZqXbG4L4KpAQcB4tRggAGJVRVT1hyq +# rrlHrFRCVD0190eUxbfMiOifvRHN8PDPUsHYkAfZ/Y1/0JnT4kQdZbEDbKBWoByx +# LOm5eHePO4bWwWHEYnoMitxfDtrEC62loDd7VFauZnlGcJow0dWir2Zkn688td1b +# ciAf1P2ZqHK/hXf2GBmSJNsCls28s3ZwewvPkuQsh5iBYqO2AOeycyMjIdq+dEt4 +# sJYPtEjM+lw2SNald3Uwav/bCZ4LxdjJEkb0Nl8JjAyygpxJILIN2O9pptmcyads +# CuffqKMzoiEOcxjbXsQqLf8pqauUmLrXAWFjViSHKu6yfUAqc8flcmB+UA7sHS9P +# P5CKigVVzeK/UVo3jq4mjuAb6krKPwlNhgYU62TwJl/HIge9219aJM+0/AFbVtH/ +# uWQIY7dD8Kq8oKnAM/2XrGKgF3Wd96obaCVUkB1JXOr1iMFSB8YXhwPE1reyhGh5 +# wQDVlqtZ/gLSTTaXkACvl7ux8D9Baf+mx1Kt0sePO+U5fJXwaSgISqo7wVEm/lyd +# B2rv5Za8M8LXSPXNn3uk+BV7U5xlCOR4ATjF3tzDZPaigX8JMUfTMDTRxmSCY/6l +# Wmc= +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.ClientManagement/HP.UEFI.psm1 b/Bios-Update-HP-v2.0/module/HP.ClientManagement/HP.UEFI.psm1 new file mode 100644 index 0000000..aff1c00 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.ClientManagement/HP.UEFI.psm1 @@ -0,0 +1,580 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. +# +using namespace HP.CMSLHelper + +Set-StrictMode -Version 3.0 + +# CMSL is normally installed in C:\Program Files\WindowsPowerShell\Modules +# but if installed via PSGallery and via PS7, it is installed in a different location +if (Test-Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll") { + Add-Type -Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll" +} +else{ + Add-Type -Path "$PSScriptRoot\..\..\HP.Private\1.7.2\HP.CMSLHelper.dll" +} + +[Flags()] enum UEFIVariableAttributes{ + VARIABLE_ATTRIBUTE_NON_VOLATILE = 0x00000001 + VARIABLE_ATTRIBUTE_BOOTSERVICE_ACCESS = 0x00000002 + VARIABLE_ATTRIBUTE_RUNTIME_ACCESS = 0x00000004 + VARIABLE_ATTRIBUTE_HARDWARE_ERROR_RECORD = 0x00000008 + VARIABLE_ATTRIBUTE_AUTHENTICATED_WRITE_ACCESS = 0x00000010 + VARIABLE_ATTRIBUTE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS = 0x00000020 + VARIABLE_ATTRIBUTE_APPEND_WRITE = 0x00000040 +} + + +<# + .SYNOPSIS + Retrieves a UEFI variable value + + .DESCRIPTION + This command retrieves the value of a UEFI variable. + + .PARAMETER Name + Specifies the name of the UEFI variable to read + + .PARAMETER Namespace + Specifies a custom namespace. The namespace must be in the format of a UUID, surrounded by curly brackets. + + .PARAMETER AsString + If specified, this command will return the value as a string rather than a byte array. Note that the commands in this library support UTF-8 compatible strings. Other applications may store strings that are not compatible with this translation, in which + case the caller should retrieve the value as an array (default) and post-process it as needed. + + .EXAMPLE + PS> Get-HPUEFIVariable -GlobalNamespace -Name MyVariable + + .EXAMPLE + PS> Get-HPUEFIVariable -Namespace "{21969aa8-681f-46be-90f0-6019ce9b0ee7}" -Name MyVariable + + .NOTES + - The process calling these commands must be able to acquire 'SeSystemEnvironmentPrivilege' privileges for the operation to succeed. For more information, refer to "Modify firmware environment values" in the linked documentation below. + - This command is not supported on legacy mode, only on UEFI mode. + - This command requires elevated privileges. + + .OUTPUTS + This command returns a custom object that contains the variable value and its attributes. + + .LINK + [UEFI Specification 2.3.1 Section 7.2](https://www.uefi.org/specifications) + + .LINK + [Modify firmware environment values](https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/modify-firmware-environment-values) +#> +function Get-HPUEFIVariable +{ + [CmdletBinding(DefaultParameterSetName = 'NsCustom',HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPUEFIVariable")] + [Alias("Get-UEFIVariable")] + param( + [Parameter(Position = 0,Mandatory = $true,ParameterSetName = "NsCustom")] + [string]$Name, + + [Parameter(Position = 1,Mandatory = $true,ParameterSetName = "NsCustom")] + [string]$Namespace, + + [Parameter(Position = 2,Mandatory = $false,ParameterSetName = "NsCustom")] + [switch]$AsString + ) + + if (-not (Test-IsElevatedAdmin)) { + throw [System.Security.AccessControl.PrivilegeNotHeldException]"elevated administrator" + } + + $PreviousState = [PrivilegeState]::Enabled; + Set-HPPrivateEnablePrivilege -ProcessId $PID -PreviousState ([ref]$PreviousState) -State ([PrivilegeState]::Enabled) + + $size = 1024 # fixed max size + $result = New-Object Byte[] (1024) + [uint32]$attr = 0 + + Write-Verbose "Querying UEFI variable $Namespace/$Name" + Get-HPPrivateFirmwareEnvironmentVariableExW -Name $Name -Namespace $Namespace -Result $result -Size $size -Attributes ([ref]$attr) + + $r = [pscustomobject]@{ + Value = '' + Attributes = [UEFIVariableAttributes]$attr + } + if ($asString.IsPresent) { + $enc = [System.Text.Encoding]::UTF8 + $r.Value = $enc.GetString($result) + } + else { + $r.Value = [array]$result + } + + if ($PreviousState -eq [PrivilegeState]::Disabled) { + Set-HPPrivateEnablePrivilege -ProcessId $PID -PreviousState ([ref]$PreviousState) -State ([PrivilegeState]::Disabled) + } + $r +} + +<# + .SYNOPSIS + Sets a UEFI variable value + + .DESCRIPTION + This command sets the value of a UEFI variable. If the variable does not exist, this command will create the variable. + + .PARAMETER Name + Specifies the name of the UEFI variable to update or create + + .PARAMETER Namespace + Specifies a custom namespace. The namespace must be in the format of a UUID, surrounded by curly brackets. + + .PARAMETER Value + Specifies the new value for the UEFI variable. Note that a NULL value will delete the variable. + + The value may be a byte array (type byte[], recommended), or a string which will be converted to UTF8 and stored as a byte array. + + .PARAMETER Attributes + Specifies the attributes for the UEFI variable. For more information, see the UEFI specification linked below. + + Attributes may be: + + - VARIABLE_ATTRIBUTE_NON_VOLATILE: The firmware environment variable is stored in non-volatile memory (e.g. NVRAM). + - VARIABLE_ATTRIBUTE_BOOTSERVICE_ACCESS: The firmware environment variable can be accessed during boot service. + - VARIABLE_ATTRIBUTE_RUNTIME_ACCESS: The firmware environment variable can be accessed at runtime. Note Variables with this attribute set, must also have VARIABLE_ATTRIBUTE_BOOTSERVICE_ACCESS set. + - VARIABLE_ATTRIBUTE_HARDWARE_ERROR_RECORD: Indicates hardware related errors encountered at runtime. + - VARIABLE_ATTRIBUTE_AUTHENTICATED_WRITE_ACCESS: Indicates an authentication requirement that must be met before writing to this firmware environment variable. + - VARIABLE_ATTRIBUTE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS: Indicates authentication and time stamp requirements that must be met before writing to this firmware environment variable. When this attribute is set, the buffer, represented by pValue, will begin with an instance of a complete (and serialized) EFI_VARIABLE_AUTHENTICATION_2 descriptor. + - VARIABLE_ATTRIBUTE_APPEND_WRITE: Append an existing environment variable with the value of pValue. If the firmware does not support the operation, then SetFirmwareEnvironmentVariableEx will return ERROR_INVALID_FUNCTION. + + .EXAMPLE + PS> Set-HPUEFIVariable -Namespace "{21969aa8-681f-46be-90f0-6019ce9b0ee7}" -Name MyVariable -Value 1,2,3 + + .EXAMPLE + PS> Set-HPUEFIVariable -Namespace "{21969aa8-681f-46be-90f0-6019ce9b0ee7}" -Name MyVariable -Value "ABC" + + .NOTES + - It is not recommended that the attributes of an existing variable are updated. If new attributes are required, the value should be deleted and re-created. + - The process calling these commands must be able to acquire 'SeSystemEnvironmentPrivilege' privileges for the operation to succeed. For more information, refer to "Modify firmware environment values" in the linked documentation below. + - This command is not supported on legacy BIOS mode, only on UEFI mode. + - This command requires elevated privileges. + + .LINK + [UEFI Specification 2.3.1 Section 7.2](https://www.uefi.org/specifications) + + .LINK + [Modify firmware environment values](https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/modify-firmware-environment-values) +#> + +function Set-HPUEFIVariable +{ + [CmdletBinding(DefaultParameterSetName = 'NsCustom',HelpUri = "https://developers.hp.com/hp-client-management/doc/Set-HPUEFIVariable")] + [Alias("Set-UEFIVariable")] + param( + [Parameter(Position = 0,Mandatory = $true,ParameterSetName = "NsCustom")] + [string]$Name, + + [Parameter(Position = 1,Mandatory = $true,ParameterSetName = "NsCustom")] + $Value, + + [Parameter(Position = 2,Mandatory = $true,ParameterSetName = "NsCustom")] + [string]$Namespace, + + [Parameter(Position = 3,Mandatory = $false,ParameterSetName = "NsCustom")] + [UEFIVariableAttributes]$Attributes = 7 + ) + + if (-not (Test-IsElevatedAdmin)) { + throw [System.Security.AccessControl.PrivilegeNotHeldException]"elevated administrator" + } + + $err = "The Value must be derived from base types 'String' or 'Byte[]' or Byte" + + [byte[]]$rawvalue = switch ($Value.GetType().Name) { + "String" { + $enc = [System.Text.Encoding]::UTF8 + $v = @($enc.GetBytes($Value)) + Write-Verbose "String value representation is $v" + [byte[]]$v + } + "Int32" { + $v = [byte[]]$Value + Write-Verbose "Byte value representation is $v" + [byte[]]$v + } + "Object[]" { + try { + $v = [byte[]]$Value + Write-Verbose "Byte array value representation is $v" + [byte[]]$v + } + catch { + throw $err + } + } + default { + throw "Value type $($Value.GetType().Name): $err" + } + } + + + $PreviousState = [PrivilegeState]::Enabled + Set-HPPrivateEnablePrivilege -ProcessId $PID -PreviousState ([ref]$PreviousState) -State ([PrivilegeState]::Enabled) + + $len = 0 + if ($rawvalue) { $len = $rawvalue.Length } + + if (-not $len -and -not ($Attributes -band [UEFIVariableAttributes]::VARIABLE_ATTRIBUTE_AUTHENTICATED_WRITE_ACCESS -or + $Attributes -band [UEFIVariableAttributes]::VARIABLE_ATTRIBUTE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS -or + $Attributes -band [UEFIVariableAttributes]::VARIABLE_ATTRIBUTE_APPEND_WRITE)) { + # Any attribute different from 0x40, 0x10 and 0x20 combined with a value size of zero removes the UEFI variable. + # Note that zero is not a valid attribute, see [UEFIVariableAttributes] enum + Write-Verbose "Deleting UEFI variable $Namespace/$Name" + } + else { + Write-Verbose "Setting UEFI variable $Namespace/$Name to value $rawvalue (length = $len), Attributes $([UEFIVariableAttributes]$Attributes)" + } + + Set-HPPrivateFirmwareEnvironmentVariableExW -Name $Name -Namespace $Namespace -RawValue $rawvalue -Len $len -Attributes $Attributes + + if ($PreviousState -eq [PrivilegeState]::Disabled) { + Set-HPPrivateEnablePrivilege -ProcessId $PID -PreviousState ([ref]$PreviousState) -State ([PrivilegeState]::Disabled) + } +} + +function Set-HPPrivateEnablePrivilege +{ + [CmdletBinding()] + param( + $ProcessId, + [ref]$PreviousState, + $State + ) + + try { + $enablePrivilege = [Native]::EnablePrivilege($PID,"SeSystemEnvironmentPrivilege",$PreviousState,$State) + } + catch { + $enablePrivilege = -1 # non-zero means error + Write-Verbose "SeSystemEnvironmentPrivilege failed: $($_.Exception.Message)" + } + + if ($enablePrivilege -ne 0) { + $err = [System.ComponentModel.Win32Exception][Runtime.InteropServices.Marshal]::GetLastWin32Error() + throw [UnauthorizedAccessException]"Current user cannot acquire UEFI variable access permissions: $err ($enablePrivilege)" + } + else { + $newStateStr = if ($State -eq [PrivilegeState]::Enabled) { "Enabling" } else { "Disabling" } + $prevStateStr = if ($PreviousState.Value -eq [PrivilegeState]::Enabled) { "enabled" } else { "disabled" } + Write-Verbose "$newStateStr application privilege; it was $prevStateStr before" + } +} + +function Set-HPPrivateFirmwareEnvironmentVariableExW +{ + [CmdletBinding()] + param( + $Name, + $Namespace, + $RawValue, + $Len, + $Attributes + ) + + try { + $setVariable = [Native]::SetFirmwareEnvironmentVariableExW($Name,$Namespace,$RawValue,$Len,$Attributes) + } + catch { + $setVariable = 0 # zero means error + Write-Verbose "SetFirmwareEnvironmentVariableExW failed: $($_.Exception.Message)" + } + + if ($setVariable -eq 0) { + $err = [System.ComponentModel.Win32Exception][Runtime.InteropServices.Marshal]::GetLastWin32Error(); + throw "Could not write UEFI variable: $err. This function is not supported on legacy BIOS mode, only on UEFI mode."; + } +} + +function Get-HPPrivateFirmwareEnvironmentVariableExW +{ + [CmdletBinding()] + param( + $Name, + $Namespace, + $Result, + $Size, + [ref]$Attributes + ) + + try { + $getVariable = [Native]::GetFirmwareEnvironmentVariableExW($Name,$Namespace,$Result,$Size,$Attributes) + } + catch { + $getVariable = 0 # zero means error + Write-Verbose "GetFirmwareEnvironmentVariableExW failed: $($_.Exception.Message)" + } + + if ($getVariable -eq 0) + { + $err = [System.ComponentModel.Win32Exception][Runtime.InteropServices.Marshal]::GetLastWin32Error(); + throw "Could not read UEFI variable: $err. This function is not supported on legacy BIOS mode, only on UEFI mode."; + } +} + +<# + .SYNOPSIS + Removes a UEFI variable + + .DESCRIPTION + This command removes a UEFI variable from a well-known or user-supplied namespace. + + .PARAMETER Name + Specifies the name of the UEFI variable to remove + + .PARAMETER Namespace + Specifies a custom namespace. The namespace must be in the format of a UUID, surrounded by curly brackets. + + .EXAMPLE + PS> Remove-HPUEFIVariable -Namespace "{21969aa8-681f-46be-90f0-6019ce9b0ee7}" -Name MyVariable + + .NOTES + - The process calling these commands must be able to acquire 'SeSystemEnvironmentPrivilege' privileges for the operation to succeed. For more information, refer to "Modify firmware environment values" in the linked documentation below. + - This command is not supported on legacy mode, only on UEFI mode. + - This command requires elevated privileges. + + .LINK + [Modify firmware environment values](https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/modify-firmware-environment-values) + +#> +function Remove-HPUEFIVariable +{ + [CmdletBinding(DefaultParameterSetName = 'NsCustom',HelpUri = "https://developers.hp.com/hp-client-management/doc/Remove-HPUEFIVariable")] + [Alias("Remove-UEFIVariable")] + param( + [Parameter(Position = 0,Mandatory = $true,ParameterSetName = "NsCustom")] + [string]$Name, + + [Parameter(Position = 1,Mandatory = $true,ParameterSetName = "NsCustom")] + [string]$Namespace + ) + Set-HPUEFIVariable @PSBoundParameters -Value "" -Attributes 7 +} + +# SIG # Begin signature block +# MIIoHQYJKoZIhvcNAQcCoIIoDjCCKAoCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDzSY1W2TdXSelF +# E1RazxfGjMmBZmh1+v7B7QmOt0oTXKCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6TCCGeUCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIF380mQn +# 7HmRCEkEMmAPw1rjbMsR++2WZz6rKdN4P8k5MA0GCSqGSIb3DQEBAQUABIIBgG4H +# +3wj9Dgfoxsw741i7bE5Qmoo7ffX/xXHrn1W4AgAAxbXMCneOCqQPZQmwPo1qzsC +# NLtYO6WozK0daUj8ZWrqo7V8ACtMpUpPl2EqZvKTaqipYPTt6nSwrbhEZUkzJ10m +# AQ2TkFFcLq5iUbOCRZQgkSSA8Kkss3eofz+kEmcZIrD3VyNes7qeoX1fwoubLLXD +# ebwR+WZYNKt/4scBE4Doz4cw2k+72eKc5Wyf5UigfEVfNBPWlShikkmz+ksNngtR +# YTW0zYo7LJc8UKT3dP1s1U+I+3r8NBaX5e/Vz+mcH0zXQ7ATvZAw2mQkCDKT0aV6 +# fAYwCINslVlo1Hq7uTFBrDDdO+QSSOvigJVjXclX5Gmf+e0GgoTtSiH5WFgiduQy +# 02TN9JzzilyfIqmepJ+nrcIeal/cDcp2n2pcqqiF45xy5Uk9GQgLG20bPvb0wJCW +# tLPZSE5hDf7OMv2ImzsLH4asebTYixN/OcVlKtYgj/zxl3SQCFF3VO9Rg588BqGC +# Fz8wghc7BgorBgEEAYI3AwMBMYIXKzCCFycGCSqGSIb3DQEHAqCCFxgwghcUAgED +# MQ8wDQYJYIZIAWUDBAIBBQAwdwYLKoZIhvcNAQkQAQSgaARmMGQCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCDDVv/b4/DlXHBdi8HDz9vRSpBYkDIW/8zA +# XzjZDH/HHgIQHi6DJZenqUxaQEksNvnfLxgPMjAyNDA4MjcxNjU1NTBaoIITCTCC +# BsIwggSqoAMCAQICEAVEr/OUnQg5pr/bP1/lYRYwDQYJKoZIhvcNAQELBQAwYzEL +# MAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJE +# aWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBD +# QTAeFw0yMzA3MTQwMDAwMDBaFw0zNDEwMTMyMzU5NTlaMEgxCzAJBgNVBAYTAlVT +# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEgMB4GA1UEAxMXRGlnaUNlcnQgVGlt +# ZXN0YW1wIDIwMjMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjU0WH +# HYOOW6w+VLMj4M+f1+XS512hDgncL0ijl3o7Kpxn3GIVWMGpkxGnzaqyat0QKYoe +# YmNp01icNXG/OpfrlFCPHCDqx5o7L5Zm42nnaf5bw9YrIBzBl5S0pVCB8s/LB6Yw +# aMqDQtr8fwkklKSCGtpqutg7yl3eGRiF+0XqDWFsnf5xXsQGmjzwxS55DxtmUuPI +# 1j5f2kPThPXQx/ZILV5FdZZ1/t0QoRuDwbjmUpW1R9d4KTlr4HhZl+NEK0rVlc7v +# CBfqgmRN/yPjyobutKQhZHDr1eWg2mOzLukF7qr2JPUdvJscsrdf3/Dudn0xmWVH +# VZ1KJC+sK5e+n+T9e3M+Mu5SNPvUu+vUoCw0m+PebmQZBzcBkQ8ctVHNqkxmg4ho +# Yru8QRt4GW3k2Q/gWEH72LEs4VGvtK0VBhTqYggT02kefGRNnQ/fztFejKqrUBXJ +# s8q818Q7aESjpTtC/XN97t0K/3k0EH6mXApYTAA+hWl1x4Nk1nXNjxJ2VqUk+tfE +# ayG66B80mC866msBsPf7Kobse1I4qZgJoXGybHGvPrhvltXhEBP+YUcKjP7wtsfV +# x95sJPC/QoLKoHE9nJKTBLRpcCcNT7e1NtHJXwikcKPsCvERLmTgyyIryvEoEyFJ +# UX4GZtM7vvrrkTjYUQfKlLfiUKHzOtOKg8tAewIDAQABo4IBizCCAYcwDgYDVR0P +# AQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# IAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQYMBaAFLoW +# 2W1NhS9zKXaaL3WMaiCPnshvMB0GA1UdDgQWBBSltu8T5+/N0GSh1VapZTGj3tXj +# STBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln +# aUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3JsMIGQ +# BggrBgEFBQcBAQSBgzCBgDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl +# cnQuY29tMFgGCCsGAQUFBzAChkxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v +# RGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3J0 +# MA0GCSqGSIb3DQEBCwUAA4ICAQCBGtbeoKm1mBe8cI1PijxonNgl/8ss5M3qXSKS +# 7IwiAqm4z4Co2efjxe0mgopxLxjdTrbebNfhYJwr7e09SI64a7p8Xb3CYTdoSXej +# 65CqEtcnhfOOHpLawkA4n13IoC4leCWdKgV6hCmYtld5j9smViuw86e9NwzYmHZP +# VrlSwradOKmB521BXIxp0bkrxMZ7z5z6eOKTGnaiaXXTUOREEr4gDZ6pRND45Ul3 +# CFohxbTPmJUaVLq5vMFpGbrPFvKDNzRusEEm3d5al08zjdSNd311RaGlWCZqA0Xe +# 2VC1UIyvVr1MxeFGxSjTredDAHDezJieGYkD6tSRN+9NUvPJYCHEVkft2hFLjDLD +# iOZY4rbbPvlfsELWj+MXkdGqwFXjhr+sJyxB0JozSqg21Llyln6XeThIX8rC3D0y +# 33XWNmdaifj2p8flTzU8AL2+nCpseQHc2kTmOt44OwdeOVj0fHMxVaCAEcsUDH6u +# vP6k63llqmjWIso765qCNVcoFstp8jKastLYOrixRoZruhf9xHdsFWyuq69zOuhJ +# RrfVf8y2OMDY7Bz1tqG4QyzfTkx9HmhwwHcK1ALgXGC7KP845VJa1qwXIiNO9OzT +# F/tQa/8Hdx9xl0RBybhG02wyfFgvZ0dl5Rtztpn5aywGRu9BHvDwX+Db2a2QgESv +# gBBBijCCBq4wggSWoAMCAQICEAc2N7ckVHzYR6z9KGYqXlswDQYJKoZIhvcNAQEL +# BQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UE +# CxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBS +# b290IEc0MB4XDTIyMDMyMzAwMDAwMFoXDTM3MDMyMjIzNTk1OVowYzELMAkGA1UE +# BhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2Vy +# dCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMaGNQZJs8E9cklRVcclA8TykTep +# l1Gh1tKD0Z5Mom2gsMyD+Vr2EaFEFUJfpIjzaPp985yJC3+dH54PMx9QEwsmc5Zt +# +FeoAn39Q7SE2hHxc7Gz7iuAhIoiGN/r2j3EF3+rGSs+QtxnjupRPfDWVtTnKC3r +# 07G1decfBmWNlCnT2exp39mQh0YAe9tEQYncfGpXevA3eZ9drMvohGS0UvJ2R/dh +# gxndX7RUCyFobjchu0CsX7LeSn3O9TkSZ+8OpWNs5KbFHc02DVzV5huowWR0QKfA +# csW6Th+xtVhNef7Xj3OTrCw54qVI1vCwMROpVymWJy71h6aPTnYVVSZwmCZ/oBpH +# IEPjQ2OAe3VuJyWQmDo4EbP29p7mO1vsgd4iFNmCKseSv6De4z6ic/rnH1pslPJS +# lRErWHRAKKtzQ87fSqEcazjFKfPKqpZzQmiftkaznTqj1QPgv/CiPMpC3BhIfxQ0 +# z9JMq++bPf4OuGQq+nUoJEHtQr8FnGZJUlD0UfM2SU2LINIsVzV5K6jzRWC8I41Y +# 99xh3pP+OcD5sjClTNfpmEpYPtMDiP6zj9NeS3YSUZPJjAw7W4oiqMEmCPkUEBID +# fV8ju2TjY+Cm4T72wnSyPx4JduyrXUZ14mCjWAkBKAAOhFTuzuldyF4wEr1GnrXT +# drnSDmuZDNIztM2xAgMBAAGjggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBS6FtltTYUvcyl2mi91jGogj57IbzAfBgNVHSMEGDAWgBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUH +# AwgwdwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp +# Y2VydC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv +# bS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0 +# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3Js +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsF +# AAOCAgEAfVmOwJO2b5ipRCIBfmbW2CFC4bAYLhBNE88wU86/GPvHUF3iSyn7cIoN +# qilp/GnBzx0H6T5gyNgL5Vxb122H+oQgJTQxZ822EpZvxFBMYh0MCIKoFr2pVs8V +# c40BIiXOlWk/R3f7cnQU1/+rT4osequFzUNf7WC2qk+RZp4snuCKrOX9jLxkJods +# kr2dfNBwCnzvqLx1T7pa96kQsl3p/yhUifDVinF2ZdrM8HKjI/rAJ4JErpknG6sk +# HibBt94q6/aesXmZgaNWhqsKRcnfxI2g55j7+6adcq/Ex8HBanHZxhOACcS2n82H +# hyS7T6NJuXdmkfFynOlLAlKnN36TU6w7HQhJD5TNOXrd/yVjmScsPT9rp/Fmw0HN +# T7ZAmyEhQNC3EyTN3B14OuSereU0cZLXJmvkOHOrpgFPvT87eK1MrfvElXvtCl8z +# OYdBeHo46Zzh3SP9HSjTx/no8Zhf+yvYfvJGnXUsHicsJttvFXseGYs2uJPU5vIX +# mVnKcPA3v5gA3yAWTyf7YGcWoWa63VXAOimGsJigK+2VQbc61RWYMbRiCQ8KvYHZ +# E/6/pNHzV9m8BPqC3jLfBInwAM1dwvnQI38AC+R2AibZ8GV2QqYphwlHK+Z/GqSF +# D/yYlvZVVCsfgPrA8g4r5db7qS9EFUrnEw4d2zc4GqEr9u3WfPwwggWNMIIEdaAD +# AgECAhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYT +# AlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2Vy +# dC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0y +# MjA4MDEwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYD +# VQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAf +# BgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEB +# BQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4Smn +# PVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6f +# qVcWWVVyr2iTcMKyunWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O +# 7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZ +# Vu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4F +# fYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLm +# qaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMre +# Sx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/ch +# srIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+U +# DCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xM +# dT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUb +# AgMBAAGjggE6MIIBNjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAO +# BgNVHQ8BAf8EBAMCAYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRw +# Oi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRz +# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0f +# BD4wPDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNz +# dXJlZElEUm9vdENBLmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEM +# BQADggEBAHCgv0NcVec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLt +# pIh3bb0aFPQTSnovLbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouy +# XtTP0UNEm0Mh65ZyoUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jS +# TEAZNUZqaVSwuKFWjuyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAc +# AgPLILCsWKAOQGPFmCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2 +# h5b9W9FcrBjDTZ9ztwGpn1eqXijiuZQxggN2MIIDcgIBATB3MGMxCzAJBgNVBAYT +# AlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQg +# VHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OU +# nQg5pr/bP1/lYRYwDQYJYIZIAWUDBAIBBQCggdEwGgYJKoZIhvcNAQkDMQ0GCyqG +# SIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNDA4MjcxNjU1NTBaMCsGCyqGSIb3 +# DQEJEAIMMRwwGjAYMBYEFGbwKzLCwskPgl3OqorJxk8ZnM9AMC8GCSqGSIb3DQEJ +# BDEiBCBX+6gNSGt3oKmrcz3KfhudFp27D0PZoI9G+4muN5uKvjA3BgsqhkiG9w0B +# CRACLzEoMCYwJDAiBCDS9uRt7XQizNHUQFdoQTZvgoraVZquMxavTRqa1Ax4KDAN +# BgkqhkiG9w0BAQEFAASCAgBMnWjwOIYgaWjnBy/p1npT+cBEHIeudxoVZSPblFGM +# o5lxa790X5udndZBhhjbGXX19mPC/NT3kFgVeJloKqy5j9HB/p9ewlRsx0i+bAA3 +# ABTpOMYm42+qLUTvaDdm4rveqGhkFtiLaAfjxJ3mAaYkYNfRbB6nmVsMICTO1OAB +# VtZus4depzu57GCqpYZ9RdBrj86ucVuvt2oWPI/TH5Hc2CExQtolgoyF+ySN+VAB +# uw3LmVoj3RJj/wYND9gc77EbC1qndNdR1+1KYRa/+wT3B14WVnO8QplaY0V75W/e +# 5IglE4A8pydQaUYYzF3iQU/cIk1qVSxkhklcXyDOAg49gG4d9+YN0AdMacOnyrcl +# EgSDtO/Tny5SIarwF9A28Fuq8zK1C3yJFjPrEpi2p/IBQ8BpGlFH4Xx5wC0/S8tF +# Og2LUsEwOYrhWQBjVQ17mAWTqJdRrJvCr1x6cJ+295thhn8vc3MVt6uXyNuY44Fl +# 8n8yxfx8eeAWMH/3eSUpb8BLHjfh0VP5fab3pqU0dioQiEueNJDz5iYHOk8sHfPy +# WYC5IYbkchErQhcRNRrbfdi9VzbzjDaxAvh24XBRQn4fDmUviNvbU8fs93VC3XUf +# y9yD4jdYQW/MH8xxgDq2mgOaGXwI7I5RJimukwHfoFOoaG1L4RZy4wQsRgW/E29u +# Kg== +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.ClientManagement/license.txt b/Bios-Update-HP-v2.0/module/HP.ClientManagement/license.txt new file mode 100644 index 0000000..b93ca37 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.ClientManagement/license.txt @@ -0,0 +1,248 @@ +End-User License Agreement + +READ CAREFULLY BEFORE USING THIS SOFTWARE + +This End-User license Agreement ("EULA") is a legal agreement +between (a) you (either an individual or a single entity) and (b) HP Inc. +("HP") that governs your use of any Software Product, installed on or +made available by HP for use with your HP product ("HP Product"), that +is not otherwise subject to a separate license agreement between you +and HP or its suppliers. Other software may contain a EULA in its online +documentation. The term "Software Product" means computer software +and may include associated media, printed materials and "online" or +electronic documentation. + +An amendment or addendum to this EULA may accompany the HP +Product. + +RIGHTS IN THE SOFTWARE PRODUCT ARE OFFERED ONLY ON THE +CONDITION THAT YOU AGREE TO ALL TERMS AND CONDITIONS OF +THIS EULA. BY INSTALLING, COPYING, DOWNLOADING, OR +OTHERWISE USING THE SOFTWARE PRODUCT, YOU AGREE TO BE +BOUND BY THE TERMS OF THIS EULA. IF YOU DO NOT ACCEPT THESE +LICENSE TERMS, YOUR SOLE REMEDY IS TO RETURN THE ENTIRE +UNUSED PRODUCT (HARDWARE AND SOFTWARE) WITHIN 14 DAYS +FOR A REFUND SUBJECT TO THE REFUND POLICY OF YOUR PLACE OF +PURCHASE. + +1. GRANT OF LICENSE. HP grants you the following rights provided +you comply with all terms and conditions of this EULA: + +a. Use. You may use the Software Product on a single computer ("Your +Computer"). If the Software Product is provided to you via the internet +and was originally licensed for use on more than one computer, you +may install and use the Software Product only on those computers. You +may not separate component parts of the Software Product for use on +more than one computer. You do not have the right to distribute the +Software Product. You may load the Software Product into Your +Computer's temporary memory (RAM) for purposes of using the +Software Product. + +b. Storage. You may copy the Software Product into the local memory +or storage device of the HP Product. + +c. Copying. You may make archival or back-up copies of the Software +Product, provided the copy contains all of the original Software +Product's proprietary notices and that it is used only for back-up +purposes. + +d. Reservation of Rights. HP and its suppliers reserve all rights not +expressly granted to you in this EULA. + +e. Freeware. Notwithstanding the terms and conditions of this EULA, all +or any portion of the Software Product which constitutes non- +proprietary HP software or software provided under public license by +third parties ("Freeware"), is licensed to you subject to the terms and +conditions of the software license agreement accompanying such +Freeware whether in the form of a discrete agreement, shrink wrap +license or electronic license terms accepted at time of download. Use of +the Freeware by you shall be governed entirely by the terms and +conditions of such license. + +f. Recovery Solution. Any software recovery solution provided with/for +your HP Product, whether in the form of a hard disk drive-based +solution, an external media-based recovery solution (e.g. floppy disk, +CD or DVD) or an equivalent solution delivered in any other form, may +only be used for restoring the hard disk of the HP Product with/for +which the recovery solution was originally purchased. The use of any +Microsoft operating system software contained in such recovery +solution shall be governed by the Microsoft License Agreement. + +2. UPGRADES. To use a Software Product identified as an upgrade, +you must first be licensed for the original Software Product identified +by HP as eligible for the upgrade. After upgrading, you may no longer +use the original Software Product that formed the basis for your +upgrade eligibility. By using the Software Product, you also agree that +HP may automatically access your HP Product when connected to the +internet to check the version or status of certain Software Products and +may automatically download and install upgrades or updates to such +Software Products on to your HP Product to provide new versions or +updates required to maintain the functionality, performance, or security +of the HP Software and your HP Product and facilitate the provision of +support or other services provided to you. In certain cases, and +depending on the type of upgrade or update, notifications will be +provided to you (via pop-up or other means), which may require you to +initiate the upgrade or update. + +3. ADDITIONAL SOFTWARE. This EULA applies to updates or +supplements to the original Software Product provided by HP unless +HP provides other terms along with the update or supplement. In case +of a conflict between such terms, the other terms will prevail. + +4. TRANSFER. + +a. Third Party. The initial user of the Software Product may make a +one-time transfer of the Software Product to another end user. Any +transfer must include all component parts, media, printed materials, +this EULA, and if applicable, the Certificate of Authenticity. The transfer +may not be an indirect transfer, such as a consignment. Prior to the +transfer, the end user receiving the transferred product must agree to +all the EULA terms. Upon transfer of the Software Product, your license +is automatically terminated. + +b. Restrictions. You may not rent, lease or lend the Software Product or +use the Software Product for commercial timesharing or bureau use. +You may not sublicense, assign or transfer the license or Software +Product except as expressly provided in this EULA. + +5. PROPRIETARY RIGHTS. All intellectual property rights in the +Software Product and user documentation are owned by HP or its +suppliers and are protected by law, including but not limited to United +States copyright, trade secret, and trademark law, as well as other +applicable laws and international treaty provisions. You shall not +remove any product identification, copyright notices or proprietary +restrictions from the Software Product. + +6. LIMITATION ON REVERSE ENGINEERING. You may not reverse +engineer, decompile, or disassemble the Software Product, except and +only to the extent that the right to do so is mandated under applicable +law notwithstanding this limitation or it is expressly provided for in this +EULA. + +7. TERM. This EULA is effective unless terminated or rejected. This +EULA will also terminate upon conditions set forth elsewhere in this +EULA or if you fail to comply with any term or condition of this EULA. + +8. CONSENT TO COLLECTION/USE OF DATA. + +a. HP will use cookies and other web technology tools to collect +anonymous technical information related to HP Software and your HP +Product. This data will be used to provide the upgrades and related +support or other services described in Section 2. HP will also collect +personal information including your Internet Protocol address or other +unique identifier information associated with your HP Product and data +provided by you on registration of your HP Product. As well as +providing the upgrades and related support or other services, this data +will be used for sending marketing communications to you (in each +case with your express consent where required by applicable law). +To the extent permitted by applicable law, by accepting these terms +and conditions you consent to the collection and use of anonymous +and personal data by HP, its subsidiaries, and affiliates as described in +this EULA and as further described in HP�s privacy policy +www.hp.com/go/privacy + +b. Collection/Use by Third Parties. Certain software programs included +in your HP Product are provided and separately licensed to you by third +party providers (�Third Party Software�). Third Party Software may be +installed and operational on your HP Product even if you choose not to +activate/purchase such software. Third Party Software may collect and +transmit technical information about your system (i.e., IP address, +unique device identifier, software version installed, etc.) and other +system data. This information is used by the third party to identify +technical system attributes and ensure that the most current version of +the software has been installed on your system. If you do not want the +Third Party Software to collect this technical information or +automatically send you version updates, you should uninstall the +software prior to connecting to the Internet. + +9. DISCLAIMER OF WARRANTIES. TO THE MAXIMUM EXTENT +PERMITTED BY APPLICABLE LAW, HP AND ITS SUPPLIERS PROVIDE THE +SOFTWARE PRODUCT �AS IS� AND WITH ALL FAULTS, AND HEREBY +DISCLAIM ALL OTHER WARRANTIES, GUARANTEES, AND CONDITIONS, +EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT +LIMITED TO, WARRANTIES OF TITLE AND NON-INFRINGEMENT, ANY +IMPLIED WARRANTIES, DUTIES, GUARANTEES, OR CONDITIONS OF +MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A +PARTICULAR PURPOSE, AND OF LACK OF VIRUSES ALL WITH REGARD +TO THE SOFTWARE PRODUCT. Some states/jurisdictions do not allow +exclusion of implied warranties or limitations on the duration of implied +warranties, so the above disclaimer may not apply to you in its entirety. +IN AUSTRALIA AND NEW ZEALAND, THE SOFTWARE COMES WITH +GUARANTEES THAT CANNOT BE EXCLUDED UNDER AUSTRALIAN AND +NEW ZEALAND CONSUMER LAWS. AUSTRALIAN CONSUMERS ARE +ENTITLED TO A REPLACEMENT OR A REFUND FOR A MAJOR FAILURE +AND COMPENSATION FOR OTHER REASONABLY FORESEEABLE LOSS +OR DAMAGE. AUSTRALIAN CONSUMERS ARE ALSO ENTITLED TO +HAVE THE SOFTWARE REPAIRED OR REPLACED IF IT FAILS TO BE OF +ACCEPTABLE QUALITY AND THE FAILURE DOES NOT AMOUNT TO A +MAJOR FAILURE. NEW ZEALAND CONSUMERS WHO ARE PURCHASING +GOODS FOR PERSONAL, DOMESTIC OR HOUSEHOLD USE OR +CONSUMPTION AND NOT FOR THE PURPOSE OF A BUSINESS (�NEW +ZEALAND CONSUMERS�) ARE ENTITLED TO REPAIR, REPLACEMENT OR +REFUND FOR A FAILURE AND COMPENSATION FOR OTHER +REASONABLY FORESEEABLE LOSS OR DAMAGE. + +10. LIMITATION OF LIABILITY. Subject to local law, notwithstanding +any damages that you might incur, the entire liability of HP and any of +its suppliers under any provision of this EULA and your exclusive +remedy for all of the foregoing shall be limited to the greater of the +amount actually paid by you separately for the Software Product or U.S. +$5.00. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN +NO EVENT SHALL HP OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, +INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES +WHATSOEVER, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR +LOSS OF PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR +BUSINESS INTERRUPTION, FOR PERSONAL INJURY, FOR LOSS OF +PRIVACY ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF +OR INABILITY TO USE THE SOFTWARE PRODUCT, OR OTHERWISE IN +CONNECTION WITH ANY PROVISION OF THIS EULA, EVEN IF HP OR +ANY SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES AND EVEN IF THE REMEDY FAILS OF ITS ESSENTIAL +PURPOSE. Some states/jurisdictions do not allow the exclusion or +limitation of incidental or consequential damages, so the above +limitation or exclusion may not apply to you. + +11. U.S. GOVERNMENT CUSTOMERS. Consistent with FAR 12.211 +and 12.212, Commercial Computer Software, Computer Software +Documentation, and Technical Data for Commercial Items are licensed +to the U.S. Government under HP's standard commercial license. + +12. COMPLIANCE WITH EXPORT LAWS. You shall comply with all +laws and regulations of the United States and other countries ("Export +Laws") to assure that the Software Product is not (1) exported, directly +or indirectly, in violation of Export Laws, or (2) used for any purpose +prohibited by Export Laws, including, without limitation, nuclear, +chemical, or biological weapons proliferation. + +13. CAPACITY AND AUTHORITY TO CONTRACT. You represent that +you are of the legal age of majority in your state of residence and, if +applicable, you are duly authorized by your employer to enter into this +contract. + +14. APPLICABLE LAW. This EULA is governed by the laws of the +country in which the equipment was purchased. + +15. ENTIRE AGREEMENT. This EULA (including any addendum or +amendment to this EULA which is included with the HP Product) is the +entire agreement between you and HP relating to the Software Product +and it supersedes all prior or contemporaneous oral or written +communications, proposals and representations with respect to the +Software Product or any other subject matter covered by this EULA. To +the extent the terms of any HP policies or programs for support +services conflict with the terms of this EULA, the terms of this EULA +shall control. + +�Copyright 2018-2024 HP Development Company, L.P.. + +The information contained herein is subject to change without notice. +All other product names mentioned herein may be trademarks of their +respective companies. To the extent permitted by applicable law, the +only warranties for HP products and services are set forth in the express +warranty statements accompanying such products and services. +Nothing herein should be construed as constituting an additional +warranty. To the extent permitted by applicable law, HP shall not be +liable for technical or editorial errors or omissions contained herein. + +First Edition: August 2015 +817678-001 + diff --git a/Bios-Update-HP-v2.0/module/HP.Consent/HP.Consent.psd1 b/Bios-Update-HP-v2.0/module/HP.Consent/HP.Consent.psd1 new file mode 100644 index 0000000..4bd72aa --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Consent/HP.Consent.psd1 @@ -0,0 +1,257 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Inc. +# +# The intellectual and technical concepts contained herein are proprietary to HP Inc +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Inc. + + +@{ + RootModule = 'HP.Consent.psm1' + #FullModuleVersion = '1.7.2.774' + ModuleVersion = '1.7.2' + GUID = '1d8ea5a1-45c4-4509-9b16-4019676d1ca8' + Author = 'HP Development Company, L.P.' + CompanyName = 'HP Inc' + Copyright = '(C) Copyright 2018-2024 HP Development Company, L.P.' + Description = 'Module to manage consent for HP Analytics' + PowerShellVersion = '5.1' + + FunctionsToExport = + 'Get-HPAnalyticsConsentConfiguration', + 'Set-HPAnalyticsConsentAllowedPurposes', + 'Set-HPAnalyticsConsentTenantID', + 'Set-HPAnalyticsConsentDeviceOwnership' + + PrivateData = @{ + PSData = @{ + LicenseUri = 'https://developers.hp.com/node/11493' + RequireLicenseAcceptance = $true + } # End of PSData hashtable + } # End of PrivateData hashtable + + +} + + +# SIG # Begin signature block +# MIIoHQYJKoZIhvcNAQcCoIIoDjCCKAoCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDupIOaDYftBxCP +# zTDLGDDL8XaQTc2V5XssG4xowwxhVqCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6TCCGeUCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIC0MnMqj +# DYdY2783UqkzUX4OGMtrCi0kIa2gi++U15ZGMA0GCSqGSIb3DQEBAQUABIIBgKNk +# lMOClVqA6CHa8fx+3K5L9KoAiAJTg77IGya5e+QRWw77YkYxV/ZTwgO3+rmKBmTM +# Vip8ef99CgJX3irjP7XFo8qs6Rg5WSSn/44Dk+O2gRtD9kus9PgfP8eojOBnXI6O +# 2F3G5HTXBbb0pw2/Xc3c6Pc6pMwmJSmsasyZ175HqFwsEr6AV9ZsOjVvoHKuBZpe +# PQMEjdPlkcwg50Ey1BGi0MwneNPhoB4EQUvmotoC81vfcT6Ua4cN/INwaP6oKCZt +# 5ZACYtFGRuPAKMSMp27wt2qGKvU3ksrNsHHg+nODkh+Nq/WVAB7Z9d/iLMDDBmuN +# kxDRpi4xa2R/aPO7DcsiESnFM0X1H3IPXV8qA0YLsU5gJlzL6ilQSk043A4Ld3Ox +# cCRudXWbNksSS6+viyUTy14xCRU6PL+BodpTsQNO9PstUwwHkVIxMNcNsIlYELtx +# pB15KE3r0RY7qgErCtdv80WXDmQgL3CJ3xPEq44ObrPQr4KuAokXTVH6pTx76qGC +# Fz8wghc7BgorBgEEAYI3AwMBMYIXKzCCFycGCSqGSIb3DQEHAqCCFxgwghcUAgED +# MQ8wDQYJYIZIAWUDBAIBBQAwdwYLKoZIhvcNAQkQAQSgaARmMGQCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCBZlpY+yWKaHJNC5vPvMNk/c9n4ZKSA7fkJ +# nSVk13RJEgIQSqpSGilT7QpeAgzEpZXM1BgPMjAyNDA4MjcxNjU1NTBaoIITCTCC +# BsIwggSqoAMCAQICEAVEr/OUnQg5pr/bP1/lYRYwDQYJKoZIhvcNAQELBQAwYzEL +# MAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJE +# aWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBD +# QTAeFw0yMzA3MTQwMDAwMDBaFw0zNDEwMTMyMzU5NTlaMEgxCzAJBgNVBAYTAlVT +# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEgMB4GA1UEAxMXRGlnaUNlcnQgVGlt +# ZXN0YW1wIDIwMjMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjU0WH +# HYOOW6w+VLMj4M+f1+XS512hDgncL0ijl3o7Kpxn3GIVWMGpkxGnzaqyat0QKYoe +# YmNp01icNXG/OpfrlFCPHCDqx5o7L5Zm42nnaf5bw9YrIBzBl5S0pVCB8s/LB6Yw +# aMqDQtr8fwkklKSCGtpqutg7yl3eGRiF+0XqDWFsnf5xXsQGmjzwxS55DxtmUuPI +# 1j5f2kPThPXQx/ZILV5FdZZ1/t0QoRuDwbjmUpW1R9d4KTlr4HhZl+NEK0rVlc7v +# CBfqgmRN/yPjyobutKQhZHDr1eWg2mOzLukF7qr2JPUdvJscsrdf3/Dudn0xmWVH +# VZ1KJC+sK5e+n+T9e3M+Mu5SNPvUu+vUoCw0m+PebmQZBzcBkQ8ctVHNqkxmg4ho +# Yru8QRt4GW3k2Q/gWEH72LEs4VGvtK0VBhTqYggT02kefGRNnQ/fztFejKqrUBXJ +# s8q818Q7aESjpTtC/XN97t0K/3k0EH6mXApYTAA+hWl1x4Nk1nXNjxJ2VqUk+tfE +# ayG66B80mC866msBsPf7Kobse1I4qZgJoXGybHGvPrhvltXhEBP+YUcKjP7wtsfV +# x95sJPC/QoLKoHE9nJKTBLRpcCcNT7e1NtHJXwikcKPsCvERLmTgyyIryvEoEyFJ +# UX4GZtM7vvrrkTjYUQfKlLfiUKHzOtOKg8tAewIDAQABo4IBizCCAYcwDgYDVR0P +# AQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# IAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQYMBaAFLoW +# 2W1NhS9zKXaaL3WMaiCPnshvMB0GA1UdDgQWBBSltu8T5+/N0GSh1VapZTGj3tXj +# STBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln +# aUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3JsMIGQ +# BggrBgEFBQcBAQSBgzCBgDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl +# cnQuY29tMFgGCCsGAQUFBzAChkxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v +# RGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3J0 +# MA0GCSqGSIb3DQEBCwUAA4ICAQCBGtbeoKm1mBe8cI1PijxonNgl/8ss5M3qXSKS +# 7IwiAqm4z4Co2efjxe0mgopxLxjdTrbebNfhYJwr7e09SI64a7p8Xb3CYTdoSXej +# 65CqEtcnhfOOHpLawkA4n13IoC4leCWdKgV6hCmYtld5j9smViuw86e9NwzYmHZP +# VrlSwradOKmB521BXIxp0bkrxMZ7z5z6eOKTGnaiaXXTUOREEr4gDZ6pRND45Ul3 +# CFohxbTPmJUaVLq5vMFpGbrPFvKDNzRusEEm3d5al08zjdSNd311RaGlWCZqA0Xe +# 2VC1UIyvVr1MxeFGxSjTredDAHDezJieGYkD6tSRN+9NUvPJYCHEVkft2hFLjDLD +# iOZY4rbbPvlfsELWj+MXkdGqwFXjhr+sJyxB0JozSqg21Llyln6XeThIX8rC3D0y +# 33XWNmdaifj2p8flTzU8AL2+nCpseQHc2kTmOt44OwdeOVj0fHMxVaCAEcsUDH6u +# vP6k63llqmjWIso765qCNVcoFstp8jKastLYOrixRoZruhf9xHdsFWyuq69zOuhJ +# RrfVf8y2OMDY7Bz1tqG4QyzfTkx9HmhwwHcK1ALgXGC7KP845VJa1qwXIiNO9OzT +# F/tQa/8Hdx9xl0RBybhG02wyfFgvZ0dl5Rtztpn5aywGRu9BHvDwX+Db2a2QgESv +# gBBBijCCBq4wggSWoAMCAQICEAc2N7ckVHzYR6z9KGYqXlswDQYJKoZIhvcNAQEL +# BQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UE +# CxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBS +# b290IEc0MB4XDTIyMDMyMzAwMDAwMFoXDTM3MDMyMjIzNTk1OVowYzELMAkGA1UE +# BhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2Vy +# dCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMaGNQZJs8E9cklRVcclA8TykTep +# l1Gh1tKD0Z5Mom2gsMyD+Vr2EaFEFUJfpIjzaPp985yJC3+dH54PMx9QEwsmc5Zt +# +FeoAn39Q7SE2hHxc7Gz7iuAhIoiGN/r2j3EF3+rGSs+QtxnjupRPfDWVtTnKC3r +# 07G1decfBmWNlCnT2exp39mQh0YAe9tEQYncfGpXevA3eZ9drMvohGS0UvJ2R/dh +# gxndX7RUCyFobjchu0CsX7LeSn3O9TkSZ+8OpWNs5KbFHc02DVzV5huowWR0QKfA +# csW6Th+xtVhNef7Xj3OTrCw54qVI1vCwMROpVymWJy71h6aPTnYVVSZwmCZ/oBpH +# IEPjQ2OAe3VuJyWQmDo4EbP29p7mO1vsgd4iFNmCKseSv6De4z6ic/rnH1pslPJS +# lRErWHRAKKtzQ87fSqEcazjFKfPKqpZzQmiftkaznTqj1QPgv/CiPMpC3BhIfxQ0 +# z9JMq++bPf4OuGQq+nUoJEHtQr8FnGZJUlD0UfM2SU2LINIsVzV5K6jzRWC8I41Y +# 99xh3pP+OcD5sjClTNfpmEpYPtMDiP6zj9NeS3YSUZPJjAw7W4oiqMEmCPkUEBID +# fV8ju2TjY+Cm4T72wnSyPx4JduyrXUZ14mCjWAkBKAAOhFTuzuldyF4wEr1GnrXT +# drnSDmuZDNIztM2xAgMBAAGjggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBS6FtltTYUvcyl2mi91jGogj57IbzAfBgNVHSMEGDAWgBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUH +# AwgwdwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp +# Y2VydC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv +# bS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0 +# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3Js +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsF +# AAOCAgEAfVmOwJO2b5ipRCIBfmbW2CFC4bAYLhBNE88wU86/GPvHUF3iSyn7cIoN +# qilp/GnBzx0H6T5gyNgL5Vxb122H+oQgJTQxZ822EpZvxFBMYh0MCIKoFr2pVs8V +# c40BIiXOlWk/R3f7cnQU1/+rT4osequFzUNf7WC2qk+RZp4snuCKrOX9jLxkJods +# kr2dfNBwCnzvqLx1T7pa96kQsl3p/yhUifDVinF2ZdrM8HKjI/rAJ4JErpknG6sk +# HibBt94q6/aesXmZgaNWhqsKRcnfxI2g55j7+6adcq/Ex8HBanHZxhOACcS2n82H +# hyS7T6NJuXdmkfFynOlLAlKnN36TU6w7HQhJD5TNOXrd/yVjmScsPT9rp/Fmw0HN +# T7ZAmyEhQNC3EyTN3B14OuSereU0cZLXJmvkOHOrpgFPvT87eK1MrfvElXvtCl8z +# OYdBeHo46Zzh3SP9HSjTx/no8Zhf+yvYfvJGnXUsHicsJttvFXseGYs2uJPU5vIX +# mVnKcPA3v5gA3yAWTyf7YGcWoWa63VXAOimGsJigK+2VQbc61RWYMbRiCQ8KvYHZ +# E/6/pNHzV9m8BPqC3jLfBInwAM1dwvnQI38AC+R2AibZ8GV2QqYphwlHK+Z/GqSF +# D/yYlvZVVCsfgPrA8g4r5db7qS9EFUrnEw4d2zc4GqEr9u3WfPwwggWNMIIEdaAD +# AgECAhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYT +# AlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2Vy +# dC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0y +# MjA4MDEwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYD +# VQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAf +# BgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEB +# BQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4Smn +# PVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6f +# qVcWWVVyr2iTcMKyunWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O +# 7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZ +# Vu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4F +# fYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLm +# qaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMre +# Sx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/ch +# srIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+U +# DCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xM +# dT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUb +# AgMBAAGjggE6MIIBNjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAO +# BgNVHQ8BAf8EBAMCAYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRw +# Oi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRz +# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0f +# BD4wPDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNz +# dXJlZElEUm9vdENBLmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEM +# BQADggEBAHCgv0NcVec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLt +# pIh3bb0aFPQTSnovLbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouy +# XtTP0UNEm0Mh65ZyoUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jS +# TEAZNUZqaVSwuKFWjuyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAc +# AgPLILCsWKAOQGPFmCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2 +# h5b9W9FcrBjDTZ9ztwGpn1eqXijiuZQxggN2MIIDcgIBATB3MGMxCzAJBgNVBAYT +# AlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQg +# VHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OU +# nQg5pr/bP1/lYRYwDQYJYIZIAWUDBAIBBQCggdEwGgYJKoZIhvcNAQkDMQ0GCyqG +# SIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNDA4MjcxNjU1NTBaMCsGCyqGSIb3 +# DQEJEAIMMRwwGjAYMBYEFGbwKzLCwskPgl3OqorJxk8ZnM9AMC8GCSqGSIb3DQEJ +# BDEiBCDy3zH8k4/qVmEQyWipEYtWNbo98XTz11SwxLJyxj3/fTA3BgsqhkiG9w0B +# CRACLzEoMCYwJDAiBCDS9uRt7XQizNHUQFdoQTZvgoraVZquMxavTRqa1Ax4KDAN +# BgkqhkiG9w0BAQEFAASCAgBWdOM7cIMfuz9qQorQjgpG0Huuxrmb5EXJKpLrlwDk +# Z+S9tvHxjRpTdbWI+RATs6vVpQS82iS+Ysbwgtam5SPZraJp3OI+VMFB5UUUcubL +# Y8L4CVO3oYSv7GUfYoBPt3nf2t0BbInDGPWlmxfPxJ639kKqnlEjBQhLsOjZW8qZ +# tOBXGTVtlBOznj4/cUmLmDGr62equuGgLLyKe6ivvuHp4H0oOubZF14e/6Q/JBHH +# pCHwHeNQqLAxs1jqlIgjUikBp+L6T+bAVRjT+1KpHbgYUpZY3RrMUQXv+L41bksd +# CHwVCeqDDLPejO5Xa33eGK0iABdNWMKf3m54qsEyX0glsDLAriDCWn87nw/Z5YhM +# srroWKbY7bulBBEOV6cit4NWxO7wH64G9XQEQ2pZFPsp3kvrtE3/Jvfz7VfO3a36 +# pVPGvmtKnwtjzmG9ipOo+wrL2J7rX85swlKfo76jhPBxenN47kEW/fDI6MghIKrh +# ExkdNjX/KTFVCbwRr+djGS2QtQCVpzBOqcmzdp7e6u91nJ/rKjmEAnkBhkIxW3gh +# +PC/NNl5SB7IG3WNefp++1SGSheBFC7QxgO5onyekXcHvCXzcgZ9mzeuglfFzS9f +# iLhKU+cfMx72qFjO4TSPKiOFH0r67cr+LNkFmFZnL8awsFLl+lbpfZDIKz5/VJx5 +# 7A== +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Consent/HP.Consent.psm1 b/Bios-Update-HP-v2.0/module/HP.Consent/HP.Consent.psm1 new file mode 100644 index 0000000..b95d98a --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Consent/HP.Consent.psm1 @@ -0,0 +1,564 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + + +enum TelemetryManagedBy +{ + User = 0 + Organization = 1 +} + +enum TelemetryPurpose +{ + Marketing = 1 + Support = 2 + ProductEnhancement = 3 + +} + + +$ConsentPath = 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Policies\HP\Consent' + + +<# +.SYNOPSIS + Retrieves the current configured HP Analytics reporting configuration + +.DESCRIPTION + This command retrieves the configuration of the HP Analytics client. The returned object contains the following fields: + + - ManagedBy: 'User' (self-managed) or 'Organization' (IT managed) + - AllowedCollectionPurposes: A collection of allowed purposes, one or more of: + - Marketing: Analytics are allowed for Marketing purposes + - Support: Analytics are allowed for Support purposes + - ProductEnhancement: Analytics are allowed for Product Enhancement purposes + - TenantID: An organization-configured tenant ID. This is an optional GUID defined by the IT Administrator. If not defined, the TenantID will default to 'Individual'. + +.EXAMPLE + PS C:\> Get-HPAnalyticsConsentConfiguration + + Name Value + ---- ----- + ManagedBy User + AllowedCollectionPurposes {Marketing} + TenantID Individual + + +.LINK + [Set-HPAnalyticsConsentTenantID](https://developers.hp.com/hp-client-management/doc/Set-HPAnalyticsConsentTenantID) + +.LINK + [Set-HPAnalyticsConsentAllowedPurposes](https://developers.hp.com/hp-client-management/doc/Set-HPAnalyticsConsentAllowedPurposes) + +.LINK + [Set-HPAnalyticsConsentDeviceOwnership](https://developers.hp.com/hp-client-management/doc/Set-HPAnalyticsConsentDeviceOwnership) + +.LINK + For a discussion of these settings, see [https://ftp.hp.com/pub/caps-softpaq/cmit/whitepapers/ManagingConsentforHPAnalytics.pdf](https://ftp.hp.com/pub/caps-softpaq/cmit/whitepapers/ManagingConsentforHPAnalytics.pdf) + +#> +function Get-HPAnalyticsConsentConfiguration +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPAnalyticsConsentConfiguration")] + param() + + $obj = [ordered]@{ + ManagedBy = [TelemetryManagedBy]"User" + AllowedCollectionPurposes = [TelemetryPurpose[]]@() + TenantID = "Individual" + } + + if (Test-Path $ConsentPath) + { + $key = Get-ItemProperty $ConsentPath + if ($key) { + if ($key.Managed -eq "True") { $obj.ManagedBy = "Organization" } + + [TelemetryPurpose[]]$purpose = @() + if ($key.AllowMarketing -eq "Accepted") { $purpose += "Marketing" } + if ($key.AllowSupport -eq "Accepted") { $purpose += "Support" } + if ($key.AllowProductEnhancement -eq "Accepted") { $purpose += "ProductEnhancement" } + + ([TelemetryPurpose[]]$obj.AllowedCollectionPurposes) = $purpose + if ($key.TenantID) { + $obj.TenantID = $key.TenantID + } + + } + + + } + else { + Write-Verbose 'Consent registry key does not exist.' + } + $obj +} + +<# +.SYNOPSIS + Sets the ManagedBy (ownership) of a device for the purpose of HP Analytics reporting + +.DESCRIPTION + This command configures HP Analytics ownership value to either 'User' or 'Organization'. + + - User: This device is managed by the end user + - Organization: This device is managed by an organization's IT administrator + +.PARAMETER Owner + Specifies User or Organization as the owner of the device + +.EXAMPLE + # Sets the device to be owned by a User + PS C:\> Set-HPAnalyticsConsentDeviceOwnership -Owner User + +.EXAMPLE + # Sets the device to be owned by an Organization + PS C:\> Set-HPAnalyticsConsentDeviceOwnership -Owner Organization + + +.LINK + [Get-HPAnalyticsConsentConfiguration](https://developers.hp.com/hp-client-management/doc/Get-HPAnalyticsConsentConfiguration) + +.LINK + [Set-HPAnalyticsConsentTenantID](https://developers.hp.com/hp-client-management/doc/Set-HPAnalyticsConsentTenantID) + +.LINK + [Set-HPAnalyticsConsentAllowedPurposes](https://developers.hp.com/hp-client-management/doc/Set-HPAnalyticsConsentAllowedPurposes) + + +.LINK + For a discussion of these settings, see [https://ftp.hp.com/pub/caps-softpaq/cmit/whitepapers/ManagingConsentforHPAnalytics.pdf](https://ftp.hp.com/pub/caps-softpaq/cmit/whitepapers/ManagingConsentforHPAnalytics.pdf) + +.NOTES + This command requires elevated privileges. + +#> +function Set-HPAnalyticsConsentDeviceOwnership +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Set-HPAnalyticsConsentDeviceOwnership")] + param( + [Parameter(Mandatory = $true,Position = 0)] + [TelemetryManagedBy]$Owner + ) + + $Managed = ($Owner -eq "Organization") + New-ItemProperty -Path $ConsentPath -Name "Managed" -Value $Managed -Force | Out-Null + +} + + +<# +.SYNOPSIS + Sets the Tenant ID of a device for the purpose of HP Analytics reporting + +.DESCRIPTION + This command configures HP Analytics Tenant ID. The Tenant ID is optional and defined by the organization. + + If the Tenant ID is not set, the default value is 'Individual'. + +.PARAMETER UUID + Sets the UUID to the specified GUID. If the TenantID is already configured, the operation will fail unless the -Force parameter is also specified. + +.PARAMETER NewUUID + Sets the UUID to an auto-generated UUID. If the TenantID is already configured, the operation will fail unless the -Force parameter is also specified. + +.PARAMETER None + If specified, this command will remove the TenantID if TenantID is set. TenantID will be set to 'Individual'. + +.PARAMETER Force + If specified, this command will force the Tenant ID to be set even if the Tenant ID is already set. + +.EXAMPLE + # Sets the tenant ID to a specific UUID + PS C:\> Set-HPAnalyticsConsentTenantID -UUID 'd34da70b-9d64-47e3-8b3f-9c561df32b98' + +.EXAMPLE + # Sets the tenant ID to an auto-generated UUID + PS C:\> Set-HPAnalyticsConsentTenantID -NewUUID + +.EXAMPLE + # Removes a configured UUID + PS C:\> Set-HPAnalyticsConsentTenantID -None + +.EXAMPLE + # Sets (and overwrites) an existing UUID with a new one + PS C:\> Set-HPAnalyticsConsentTenantID -NewUUID -Force + +.LINK + [Get-HPAnalyticsConsentConfiguration](https://developers.hp.com/hp-client-management/doc/Get-HPAnalyticsConsentConfiguration) + +.LINK + [Set-HPAnalyticsConsentAllowedPurposes](https://developers.hp.com/hp-client-management/doc/Set-HPAnalyticsConsentAllowedPurposes) + +.LINK + [Set-HPAnalyticsConsentDeviceOwnership](https://developers.hp.com/hp-client-management/doc/Set-HPAnalyticsConsentDeviceOwnership) + +.LINK + For a discussion of these settings, see [https://ftp.hp.com/pub/caps-softpaq/cmit/whitepapers/ManagingConsentforHPAnalytics.pdf](https://ftp.hp.com/pub/caps-softpaq/cmit/whitepapers/ManagingConsentforHPAnalytics.pdf) + +.NOTES + This command requires elevated privileges. + +#> +function Set-HPAnalyticsConsentTenantID +{ + [CmdletBinding(DefaultParameterSetName = "SpecificUUID",HelpUri = "https://developers.hp.com/hp-client-management/doc/Set-HPAnalyticsConsentTenantID")] + param( + [Parameter(ParameterSetName = 'SpecificUUID',Mandatory = $true,Position = 0)] + [guid]$UUID, + [Parameter(ParameterSetName = 'NewUUID',Mandatory = $true,Position = 0)] + [switch]$NewUUID, + [Parameter(ParameterSetName = 'None',Mandatory = $true,Position = 0)] + [switch]$None, + [Parameter(ParameterSetName = 'SpecificUUID',Mandatory = $false,Position = 1)] + [Parameter(ParameterSetName = 'NewUUID',Mandatory = $false,Position = 1)] + [switch]$Force + ) + + if ($NewUUID.IsPresent) + { + $uid = [guid]::NewGuid() + } + elseif ($None.IsPresent) { + $uid = "Individual" + } + else { + $uid = $UUID + } + + if ((-not $Force.IsPresent) -and (-not $None.IsPresent)) + { + + $config = Get-HPAnalyticsConsentConfiguration -Verbose:$VerbosePreference + if ($config.TenantID -and $config.TenantID -ne "Individual" -and $config.TenantID -ne $uid) + { + + Write-Verbose "Tenant ID $($config.TenantID) is already configured" + throw [ArgumentException]"A Tenant ID is already configured for this device. Use -Force to overwrite it." + } + } + New-ItemProperty -Path $ConsentPath -Name "TenantID" -Value $uid -Force | Out-Null +} + + + +<# +.SYNOPSIS + Sets the allowed reporting purposes for HP Analytics + +.DESCRIPTION + This command configures how HP may use the data reported. The allowed purposes are: + + - Marketing: The data may be used for marketing purposes. + - Support: The data may be used for support purposes. + - ProductEnhancement: The data may be used for product enhancement purposes. + + Note that you may supply any combination of the above purpose in a single command. Any of the purposes not included + in the list will be explicitly rejected. + + +.PARAMETER AllowedPurposes + Specifies a list of allowed purposes for the reported data. The value must be one (or more) of the following values: + - Marketing + - Support + - ProductEnhancement + + The purposes included in this list will be explicitly accepted. The purposes not included in this list will be explicitly rejected. + +.PARAMETER None + If specified, this command rejects all purposes. + + +.EXAMPLE + # Accepts all purposes + PS C:\> Set-HPAnalyticsConsentAllowedPurposes -AllowedPurposes Marketing,Support,ProductEnhancement + +.EXAMPLE + # Sets ProductEnhancement, rejects everything else + PS C:\> Set-HPAnalyticsConsentAllowedPurposes -AllowedPurposes ProductEnhancement + +.EXAMPLE + # Rejects all purposes + PS C:\> Set-HPAnalyticsConsentAllowedPurposes -None + + +.LINK + [Get-HPAnalyticsConsentConfiguration](https://developers.hp.com/hp-client-management/doc/Get-HPAnalyticsConsentConfiguration) + +.LINK + [Set-HPAnalyticsConsentTenantID](https://developers.hp.com/hp-client-management/doc/Set-HPAnalyticsConsentTenantID) + +.LINK + [Set-HPAnalyticsConsentDeviceOwnership](https://developers.hp.com/hp-client-management/doc/Set-HPAnalyticsConsentDeviceOwnership) + +.LINK + For a discussion of these settings, see [https://ftp.hp.com/pub/caps-softpaq/cmit/whitepapers/ManagingConsentforHPAnalytics.pdf](https://ftp.hp.com/pub/caps-softpaq/cmit/whitepapers/ManagingConsentforHPAnalytics.pdf) + +.NOTES + This command requires elevated privileges. + +#> +function Set-HPAnalyticsConsentAllowedPurposes +{ + [CmdletBinding(DefaultParameterSetName = "SpecificPurposes",HelpUri = "https://developers.hp.com/hp-client-management/doc/Set-HPAnalyticsConsentAllowedPurposes")] + param( + [Parameter(ParameterSetName = 'SpecificPurposes',Mandatory = $true,Position = 0)] + [TelemetryPurpose[]]$AllowedPurposes, + [Parameter(ParameterSetName = 'NoPurpose',Mandatory = $true,Position = 0)] + [switch]$None + ) + + if ($None.IsPresent) + { + Write-Verbose "Clearing all opt-in telemetry purposes" + New-ItemProperty -Path $ConsentPath -Name "AllowMarketing" -Value "Rejected" -Force | Out-Null + New-ItemProperty -Path $ConsentPath -Name "AllowSupport" -Value "Rejected" -Force | Out-Null + New-ItemProperty -Path $ConsentPath -Name "AllowProductEnhancement" -Value "Rejected" -Force | Out-Null + + } + else { + $allowed = $AllowedPurposes | ForEach-Object { + New-ItemProperty -Path $ConsentPath -Name "Allow$_" -Value 'Accepted' -Force | Out-Null + $_ + } + + if ($allowed -notcontains 'Marketing') { + New-ItemProperty -Path $ConsentPath -Name "AllowMarketing" -Value "Rejected" -Force | Out-Null + } + if ($allowed -notcontains 'Support') { + New-ItemProperty -Path $ConsentPath -Name "AllowSupport" -Value "Rejected" -Force | Out-Null + } + if ($allowed -notcontains 'ProductEnhancement') { + New-ItemProperty -Path $ConsentPath -Name "AllowProductEnhancement" -Value "Rejected" -Force | Out-Null + } + + } + +} + + +# SIG # Begin signature block +# MIIoHgYJKoZIhvcNAQcCoIIoDzCCKAsCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCATeVoRiH3RLu0v +# 97OVZbAaz5G7tOMw4IxwUQP1qS6fjKCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6jCCGeYCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIFiCldSk +# UzCm5njIqst4NcCcbLXnpa5wZhXOK8ui21EKMA0GCSqGSIb3DQEBAQUABIIBgBAS +# v780/RVgrlIQps7WS5WQqrZkJ3nWGmcnOeu+0FXI2GnUaytg3OUEvDLu93TzycoC +# +xsR2g0P4MIagTlEKI3lUi2JISN0ZuPENmEBgsLdQIs6qOF7U2m8EmhcPksTcNZg +# thXJxgJDCzLRSwOT19k0lM/5uO4aSbORakeERjd+KsDhHlvidmvPO+QCe4Ut56Ns +# PNDwGHaJpquKOtRPd01qcBuqaxQf/pUw6YGzzmqxSToV9QgP6VYSSZFHi8B9vAcL +# xK8ry+5PJfNKTaBRVG2SqpH8VpZq+fkRbciMXUio8tgTe9Vys7JDMWRFdyxS4ZBI +# ktwSramWYP7/FNSRWLJPcYbP7aMX3T8lCgK47GDb+hpQMCe7D4M84nvvYTy9Q7oX +# rPpsSiMLno58fnpGUljfQZqTEWPq6IxvZ/jDMmaCgBifkai64U7lk4/vInrgGzlr +# Srw00PYxUK7cku99MeidlsyAicF4FhW4L3j85+ssy27w5mapE0yLmx26gVyxr6GC +# F0Awghc8BgorBgEEAYI3AwMBMYIXLDCCFygGCSqGSIb3DQEHAqCCFxkwghcVAgED +# MQ8wDQYJYIZIAWUDBAIBBQAweAYLKoZIhvcNAQkQAQSgaQRnMGUCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCCdUR4r8anLuJtKDvfCJlHmzNj77NilHAtK +# 1Di7ImHjuQIRAN/Spz4HRNIq4L5dGwPYBe8YDzIwMjQwODI3MTY1NTUwWqCCEwkw +# ggbCMIIEqqADAgECAhAFRK/zlJ0IOaa/2z9f5WEWMA0GCSqGSIb3DQEBCwUAMGMx +# CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMy +# RGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcg +# Q0EwHhcNMjMwNzE0MDAwMDAwWhcNMzQxMDEzMjM1OTU5WjBIMQswCQYDVQQGEwJV +# UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xIDAeBgNVBAMTF0RpZ2lDZXJ0IFRp +# bWVzdGFtcCAyMDIzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo1NF +# hx2DjlusPlSzI+DPn9fl0uddoQ4J3C9Io5d6OyqcZ9xiFVjBqZMRp82qsmrdECmK +# HmJjadNYnDVxvzqX65RQjxwg6seaOy+WZuNp52n+W8PWKyAcwZeUtKVQgfLPywem +# MGjKg0La/H8JJJSkghraarrYO8pd3hkYhftF6g1hbJ3+cV7EBpo88MUueQ8bZlLj +# yNY+X9pD04T10Mf2SC1eRXWWdf7dEKEbg8G45lKVtUfXeCk5a+B4WZfjRCtK1ZXO +# 7wgX6oJkTf8j48qG7rSkIWRw69XloNpjsy7pBe6q9iT1HbybHLK3X9/w7nZ9MZll +# R1WdSiQvrCuXvp/k/XtzPjLuUjT71Lvr1KAsNJvj3m5kGQc3AZEPHLVRzapMZoOI +# aGK7vEEbeBlt5NkP4FhB+9ixLOFRr7StFQYU6mIIE9NpHnxkTZ0P387RXoyqq1AV +# ybPKvNfEO2hEo6U7Qv1zfe7dCv95NBB+plwKWEwAPoVpdceDZNZ1zY8SdlalJPrX +# xGshuugfNJgvOuprAbD3+yqG7HtSOKmYCaFxsmxxrz64b5bV4RAT/mFHCoz+8LbH +# 1cfebCTwv0KCyqBxPZySkwS0aXAnDU+3tTbRyV8IpHCj7ArxES5k4MsiK8rxKBMh +# SVF+BmbTO77665E42FEHypS34lCh8zrTioPLQHsCAwEAAaOCAYswggGHMA4GA1Ud +# DwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATAfBgNVHSMEGDAWgBS6 +# FtltTYUvcyl2mi91jGogj57IbzAdBgNVHQ4EFgQUpbbvE+fvzdBkodVWqWUxo97V +# 40kwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp +# Z2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNybDCB +# kAYIKwYBBQUHAQEEgYMwgYAwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj +# ZXJ0LmNvbTBYBggrBgEFBQcwAoZMaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t +# L0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNy +# dDANBgkqhkiG9w0BAQsFAAOCAgEAgRrW3qCptZgXvHCNT4o8aJzYJf/LLOTN6l0i +# kuyMIgKpuM+AqNnn48XtJoKKcS8Y3U623mzX4WCcK+3tPUiOuGu6fF29wmE3aEl3 +# o+uQqhLXJ4Xzjh6S2sJAOJ9dyKAuJXglnSoFeoQpmLZXeY/bJlYrsPOnvTcM2Jh2 +# T1a5UsK2nTipgedtQVyMadG5K8TGe8+c+njikxp2oml101DkRBK+IA2eqUTQ+OVJ +# dwhaIcW0z5iVGlS6ubzBaRm6zxbygzc0brBBJt3eWpdPM43UjXd9dUWhpVgmagNF +# 3tlQtVCMr1a9TMXhRsUo063nQwBw3syYnhmJA+rUkTfvTVLzyWAhxFZH7doRS4wy +# w4jmWOK22z75X7BC1o/jF5HRqsBV44a/rCcsQdCaM0qoNtS5cpZ+l3k4SF/Kwtw9 +# Mt911jZnWon49qfH5U81PAC9vpwqbHkB3NpE5jreODsHXjlY9HxzMVWggBHLFAx+ +# rrz+pOt5Zapo1iLKO+uagjVXKBbLafIymrLS2Dq4sUaGa7oX/cR3bBVsrquvczro +# SUa31X/MtjjA2Owc9bahuEMs305MfR5ocMB3CtQC4Fxguyj/OOVSWtasFyIjTvTs +# 0xf7UGv/B3cfcZdEQcm4RtNsMnxYL2dHZeUbc7aZ+WssBkbvQR7w8F/g29mtkIBE +# r4AQQYowggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqGSIb3DQEB +# CwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNV +# BAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQg +# Um9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMxCzAJBgNV +# BAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNl +# cnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggIi +# MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXHJQPE8pE3 +# qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMfUBMLJnOW +# bfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w1lbU5ygt +# 69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRktFLydkf3 +# YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYbqMFkdECn +# wHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUmcJgmf6Aa +# RyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP65x9abJTy +# UpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzKQtwYSH8U +# NM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo80VgvCON +# WPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjBJgj5FBAS +# A31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXcheMBK9Rp61 +# 03a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAd +# BgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF +# BwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln +# aWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJo +# dHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy +# bDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQEL +# BQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd4ksp+3CK +# Daopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiCqBa9qVbP +# FXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl/Yy8ZCaH +# bJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeCRK6ZJxur +# JB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYTgAnEtp/N +# h4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/a6fxZsNB +# zU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37xJV77Qpf +# MzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmLNriT1Oby +# F5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0YgkPCr2B +# 2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJRyvmfxqk +# hQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIFjTCCBHWg +# AwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +# EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +# cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcN +# MjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEVMBMG +# A1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +# HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqGSIb3DQEB +# AQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +# pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+ +# n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYykt +# zuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw +# 2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6Qu +# BX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC +# 5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK +# 3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3 +# IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEP +# lAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98 +# THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t9dmpsh3l +# GwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8w +# DgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0 +# cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0 +# cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MEUGA1Ud +# HwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz +# c3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAowCDAGBgRVHSAAMA0GCSqGSIb3DQEB +# DAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9mqyhhyzshV6pGrsi+IcaaVQi +# 7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxSA8hO0Cre+i1Wz/n096wwepqL +# sl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE1Od/6Fmo8L8vC6bp8jQ87PcDx4eo +# 0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSMb++hUD38dglohJ9vytsgjTVg +# HAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbObyMt9H5xaiNrIv8SuFQtJ37YOtnw +# toeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMYIDdjCCA3ICAQEwdzBjMQswCQYDVQQG +# EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0 +# IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAFRK/z +# lJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUAoIHRMBoGCSqGSIb3DQEJAzENBgsq +# hkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwODI3MTY1NTUwWjArBgsqhkiG +# 9w0BCRACDDEcMBowGDAWBBRm8CsywsLJD4JdzqqKycZPGZzPQDAvBgkqhkiG9w0B +# CQQxIgQgPUd1+yk88irJPvcAm4+ftQq+3ymhm+Ar0HhDQ+mo8tQwNwYLKoZIhvcN +# AQkQAi8xKDAmMCQwIgQg0vbkbe10IszR1EBXaEE2b4KK2lWarjMWr00amtQMeCgw +# DQYJKoZIhvcNAQEBBQAEggIAbu2OOdlNPOxNbPnMHJzDppsYbS3HekzAAC/kFkVO +# joh2XCPViKtF+5MAp3V8KZ0lsKYT/qZUibjM+aMFo93aJCosvjr/pEB93gVM0/bZ +# th+RW6oDqXX3Ea4FYKcrSZYHtO/xBysZI8oQF84pG9tAMfX1gXZiUR8BT4fHPPad +# 0+ZfCJNhUiL4Pa6RBGwaZfHPP4tUryPeazaKJGu67D3ZpJWiXw0ooBwX0rH99Z4b +# OjipRcrUHwkueO5GNcINU+1y8Vj5e137fG4I7ec+JHye+6GFufYoq32eWHssnmkE +# DjxM4+2+i0QG89mG4UVt14I5CQXoEC0ZIw80kBNxoycbkCDkbqczrPCte422gAhF +# LiFquQIqriU4oG91wG3DeTu+FnX0PYJV8FyIa7zNqye2QGEQtsIM6kT7GhrfPPQZ +# VpROrqR9iMM6sqoeOdaimUJtBELPKSItXmDYAKJtQAxSXN27DilXuWu0r10YzDYF +# 6yAq2jC9i2Oujbmmi4srQsypof4g7EMeHIlqdc/FbmczgzIxMjDNMJZbNgc7d3VM +# V+N0bqnjG6Rlnn0sDDaF/dQhp5PQNDMD2pt9hCbDK1+iR2cff+MQM29aQse77laP +# kjLfrSiyNA7szznRKUvzCGFS3rd8ZWVqhnzsEbhlVxzf33n6tAAIwr+nIwMgQbYU +# uCk= +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Consent/license.txt b/Bios-Update-HP-v2.0/module/HP.Consent/license.txt new file mode 100644 index 0000000..cec0d5c --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Consent/license.txt @@ -0,0 +1,248 @@ +End-User License Agreement + +READ CAREFULLY BEFORE USING THIS SOFTWARE + +This End-User license Agreement ("EULA") is a legal agreement +between (a) you (either an individual or a single entity) and (b) HP Inc. +("HP") that governs your use of any Software Product, installed on or +made available by HP for use with your HP product ("HP Product"), that +is not otherwise subject to a separate license agreement between you +and HP or its suppliers. Other software may contain a EULA in its online +documentation. The term "Software Product" means computer software +and may include associated media, printed materials and "online" or +electronic documentation. + +An amendment or addendum to this EULA may accompany the HP +Product. + +RIGHTS IN THE SOFTWARE PRODUCT ARE OFFERED ONLY ON THE +CONDITION THAT YOU AGREE TO ALL TERMS AND CONDITIONS OF +THIS EULA. BY INSTALLING, COPYING, DOWNLOADING, OR +OTHERWISE USING THE SOFTWARE PRODUCT, YOU AGREE TO BE +BOUND BY THE TERMS OF THIS EULA. IF YOU DO NOT ACCEPT THESE +LICENSE TERMS, YOUR SOLE REMEDY IS TO RETURN THE ENTIRE +UNUSED PRODUCT (HARDWARE AND SOFTWARE) WITHIN 14 DAYS +FOR A REFUND SUBJECT TO THE REFUND POLICY OF YOUR PLACE OF +PURCHASE. + +1. GRANT OF LICENSE. HP grants you the following rights provided +you comply with all terms and conditions of this EULA: + +a. Use. You may use the Software Product on a single computer ("Your +Computer"). If the Software Product is provided to you via the internet +and was originally licensed for use on more than one computer, you +may install and use the Software Product only on those computers. You +may not separate component parts of the Software Product for use on +more than one computer. You do not have the right to distribute the +Software Product. You may load the Software Product into Your +Computer's temporary memory (RAM) for purposes of using the +Software Product. + +b. Storage. You may copy the Software Product into the local memory +or storage device of the HP Product. + +c. Copying. You may make archival or back-up copies of the Software +Product, provided the copy contains all of the original Software +Product's proprietary notices and that it is used only for back-up +purposes. + +d. Reservation of Rights. HP and its suppliers reserve all rights not +expressly granted to you in this EULA. + +e. Freeware. Notwithstanding the terms and conditions of this EULA, all +or any portion of the Software Product which constitutes non- +proprietary HP software or software provided under public license by +third parties ("Freeware"), is licensed to you subject to the terms and +conditions of the software license agreement accompanying such +Freeware whether in the form of a discrete agreement, shrink wrap +license or electronic license terms accepted at time of download. Use of +the Freeware by you shall be governed entirely by the terms and +conditions of such license. + +f. Recovery Solution. Any software recovery solution provided with/for +your HP Product, whether in the form of a hard disk drive-based +solution, an external media-based recovery solution (e.g. floppy disk, +CD or DVD) or an equivalent solution delivered in any other form, may +only be used for restoring the hard disk of the HP Product with/for +which the recovery solution was originally purchased. The use of any +Microsoft operating system software contained in such recovery +solution shall be governed by the Microsoft License Agreement. + +2. UPGRADES. To use a Software Product identified as an upgrade, +you must first be licensed for the original Software Product identified +by HP as eligible for the upgrade. After upgrading, you may no longer +use the original Software Product that formed the basis for your +upgrade eligibility. By using the Software Product, you also agree that +HP may automatically access your HP Product when connected to the +internet to check the version or status of certain Software Products and +may automatically download and install upgrades or updates to such +Software Products on to your HP Product to provide new versions or +updates required to maintain the functionality, performance, or security +of the HP Software and your HP Product and facilitate the provision of +support or other services provided to you. In certain cases, and +depending on the type of upgrade or update, notifications will be +provided to you (via pop-up or other means), which may require you to +initiate the upgrade or update. + +3. ADDITIONAL SOFTWARE. This EULA applies to updates or +supplements to the original Software Product provided by HP unless +HP provides other terms along with the update or supplement. In case +of a conflict between such terms, the other terms will prevail. + +4. TRANSFER. + +a. Third Party. The initial user of the Software Product may make a +one-time transfer of the Software Product to another end user. Any +transfer must include all component parts, media, printed materials, +this EULA, and if applicable, the Certificate of Authenticity. The transfer +may not be an indirect transfer, such as a consignment. Prior to the +transfer, the end user receiving the transferred product must agree to +all the EULA terms. Upon transfer of the Software Product, your license +is automatically terminated. + +b. Restrictions. You may not rent, lease or lend the Software Product or +use the Software Product for commercial timesharing or bureau use. +You may not sublicense, assign or transfer the license or Software +Product except as expressly provided in this EULA. + +5. PROPRIETARY RIGHTS. All intellectual property rights in the +Software Product and user documentation are owned by HP or its +suppliers and are protected by law, including but not limited to United +States copyright, trade secret, and trademark law, as well as other +applicable laws and international treaty provisions. You shall not +remove any product identification, copyright notices or proprietary +restrictions from the Software Product. + +6. LIMITATION ON REVERSE ENGINEERING. You may not reverse +engineer, decompile, or disassemble the Software Product, except and +only to the extent that the right to do so is mandated under applicable +law notwithstanding this limitation or it is expressly provided for in this +EULA. + +7. TERM. This EULA is effective unless terminated or rejected. This +EULA will also terminate upon conditions set forth elsewhere in this +EULA or if you fail to comply with any term or condition of this EULA. + +8. CONSENT TO COLLECTION/USE OF DATA. + +a. HP will use cookies and other web technology tools to collect +anonymous technical information related to HP Software and your HP +Product. This data will be used to provide the upgrades and related +support or other services described in Section 2. HP will also collect +personal information including your Internet Protocol address or other +unique identifier information associated with your HP Product and data +provided by you on registration of your HP Product. As well as +providing the upgrades and related support or other services, this data +will be used for sending marketing communications to you (in each +case with your express consent where required by applicable law). +To the extent permitted by applicable law, by accepting these terms +and conditions you consent to the collection and use of anonymous +and personal data by HP, its subsidiaries, and affiliates as described in +this EULA and as further described in HP�s privacy policy +www.hp.com/go/privacy + +b. Collection/Use by Third Parties. Certain software programs included +in your HP Product are provided and separately licensed to you by third +party providers (�Third Party Software�). Third Party Software may be +installed and operational on your HP Product even if you choose not to +activate/purchase such software. Third Party Software may collect and +transmit technical information about your system (i.e., IP address, +unique device identifier, software version installed, etc.) and other +system data. This information is used by the third party to identify +technical system attributes and ensure that the most current version of +the software has been installed on your system. If you do not want the +Third Party Software to collect this technical information or +automatically send you version updates, you should uninstall the +software prior to connecting to the Internet. + +9. DISCLAIMER OF WARRANTIES. TO THE MAXIMUM EXTENT +PERMITTED BY APPLICABLE LAW, HP AND ITS SUPPLIERS PROVIDE THE +SOFTWARE PRODUCT �AS IS� AND WITH ALL FAULTS, AND HEREBY +DISCLAIM ALL OTHER WARRANTIES, GUARANTEES, AND CONDITIONS, +EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT +LIMITED TO, WARRANTIES OF TITLE AND NON-INFRINGEMENT, ANY +IMPLIED WARRANTIES, DUTIES, GUARANTEES, OR CONDITIONS OF +MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A +PARTICULAR PURPOSE, AND OF LACK OF VIRUSES ALL WITH REGARD +TO THE SOFTWARE PRODUCT. Some states/jurisdictions do not allow +exclusion of implied warranties or limitations on the duration of implied +warranties, so the above disclaimer may not apply to you in its entirety. +IN AUSTRALIA AND NEW ZEALAND, THE SOFTWARE COMES WITH +GUARANTEES THAT CANNOT BE EXCLUDED UNDER AUSTRALIAN AND +NEW ZEALAND CONSUMER LAWS. AUSTRALIAN CONSUMERS ARE +ENTITLED TO A REPLACEMENT OR A REFUND FOR A MAJOR FAILURE +AND COMPENSATION FOR OTHER REASONABLY FORESEEABLE LOSS +OR DAMAGE. AUSTRALIAN CONSUMERS ARE ALSO ENTITLED TO +HAVE THE SOFTWARE REPAIRED OR REPLACED IF IT FAILS TO BE OF +ACCEPTABLE QUALITY AND THE FAILURE DOES NOT AMOUNT TO A +MAJOR FAILURE. NEW ZEALAND CONSUMERS WHO ARE PURCHASING +GOODS FOR PERSONAL, DOMESTIC OR HOUSEHOLD USE OR +CONSUMPTION AND NOT FOR THE PURPOSE OF A BUSINESS (�NEW +ZEALAND CONSUMERS�) ARE ENTITLED TO REPAIR, REPLACEMENT OR +REFUND FOR A FAILURE AND COMPENSATION FOR OTHER +REASONABLY FORESEEABLE LOSS OR DAMAGE. + +10. LIMITATION OF LIABILITY. Subject to local law, notwithstanding +any damages that you might incur, the entire liability of HP and any of +its suppliers under any provision of this EULA and your exclusive +remedy for all of the foregoing shall be limited to the greater of the +amount actually paid by you separately for the Software Product or U.S. +$5.00. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN +NO EVENT SHALL HP OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, +INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES +WHATSOEVER, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR +LOSS OF PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR +BUSINESS INTERRUPTION, FOR PERSONAL INJURY, FOR LOSS OF +PRIVACY ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF +OR INABILITY TO USE THE SOFTWARE PRODUCT, OR OTHERWISE IN +CONNECTION WITH ANY PROVISION OF THIS EULA, EVEN IF HP OR +ANY SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES AND EVEN IF THE REMEDY FAILS OF ITS ESSENTIAL +PURPOSE. Some states/jurisdictions do not allow the exclusion or +limitation of incidental or consequential damages, so the above +limitation or exclusion may not apply to you. + +11. U.S. GOVERNMENT CUSTOMERS. Consistent with FAR 12.211 +and 12.212, Commercial Computer Software, Computer Software +Documentation, and Technical Data for Commercial Items are licensed +to the U.S. Government under HP's standard commercial license. + +12. COMPLIANCE WITH EXPORT LAWS. You shall comply with all +laws and regulations of the United States and other countries ("Export +Laws") to assure that the Software Product is not (1) exported, directly +or indirectly, in violation of Export Laws, or (2) used for any purpose +prohibited by Export Laws, including, without limitation, nuclear, +chemical, or biological weapons proliferation. + +13. CAPACITY AND AUTHORITY TO CONTRACT. You represent that +you are of the legal age of majority in your state of residence and, if +applicable, you are duly authorized by your employer to enter into this +contract. + +14. APPLICABLE LAW. This EULA is governed by the laws of the +country in which the equipment was purchased. + +15. ENTIRE AGREEMENT. This EULA (including any addendum or +amendment to this EULA which is included with the HP Product) is the +entire agreement between you and HP relating to the Software Product +and it supersedes all prior or contemporaneous oral or written +communications, proposals and representations with respect to the +Software Product or any other subject matter covered by this EULA. To +the extent the terms of any HP policies or programs for support +services conflict with the terms of this EULA, the terms of this EULA +shall control. + +� Copyright 2018-2024 HP Development Company, L.P. + +The information contained herein is subject to change without notice. +All other product names mentioned herein may be trademarks of their +respective companies. To the extent permitted by applicable law, the +only warranties for HP products and services are set forth in the express +warranty statements accompanying such products and services. +Nothing herein should be construed as constituting an additional +warranty. To the extent permitted by applicable law, HP shall not be +liable for technical or editorial errors or omissions contained herein. + +First Edition: August 2015 +817678-001 + diff --git a/Bios-Update-HP-v2.0/module/HP.Firmware/HP.Firmware.SecurePlatform.psm1 b/Bios-Update-HP-v2.0/module/HP.Firmware/HP.Firmware.SecurePlatform.psm1 new file mode 100644 index 0000000..7953fc2 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Firmware/HP.Firmware.SecurePlatform.psm1 @@ -0,0 +1,908 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Inc. +# +# The intellectual and technical concepts contained herein are proprietary to HP Inc +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Inc. + +using namespace HP.CMSLHelper + +Set-StrictMode -Version 3.0 +$ErrorActionPreference = "Stop" +#requires -Modules "HP.Private" + +# CMSL is normally installed in C:\Program Files\WindowsPowerShell\Modules +# but if installed via PSGallery and via PS7, it is installed in a different location +if (Test-Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll") { + Add-Type -Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll" +} +else{ + Add-Type -Path "$PSScriptRoot\..\..\HP.Private\1.7.2\HP.CMSLHelper.dll" +} + +<# +.SYNOPSIS + Retrieves the HP Secure Platform Management state + +.DESCRIPTION + This command retrieves the state of the HP Secure Platform Management. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.NOTES + - Requires HP BIOS with Secure Platform Management support. + - This command requires elevated privileges. + +.EXAMPLE + Get-HPSecurePlatformState +#> +function Get-HPSecurePlatformState { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPSecurePlatformState")] + param() + $mi_result = 0 + $data = New-Object -TypeName provisioning_data_t + $c = '[DfmNativeSecurePlatform]::get_secureplatform_provisioning' + (Test-OSBitness) + '([ref]$data,[ref]$mi_result);' + $result = Invoke-Expression -Command $c + Test-HPPrivateCustomResult -result $result -mi_result $mi_result -Category 0x04 + + $kek_mod = $data.kek_mod + [array]::Reverse($kek_mod) + + $sk_mod = $data.sk_mod + [array]::Reverse($sk_mod) + + # calculating EndorsementKeyID + $kek_encoded = [System.Convert]::ToBase64String($kek_mod) + # $kek_decoded = [Convert]::FromBase64String($kek_encoded) + # $kek_hash = Get-HPPrivateHash -Data $kek_decoded + # $kek_Id = [System.Convert]::ToBase64String($kek_hash) + + # calculating SigningKeyID + $sk_encoded = [System.Convert]::ToBase64String($sk_mod) + # $sk_decoded = [Convert]::FromBase64String($sk_encoded) + # $sk_hash = Get-HPPrivateHash -Data $sk_decoded + # $sk_Id = [System.Convert]::ToBase64String($sk_hash) + + # get Sure Admin Mode and Local Access values + $sure_admin_mode = "" + $local_access = "" + if ((Get-HPPrivateIsSureAdminSupported) -eq $true) { + $sure_admin_state = Get-HPSureAdminState + $sure_admin_mode = $sure_admin_state.SureAdminMode + $local_access = $sure_admin_state.LocalAccess + } + + # calculate FeaturesInUse + $featuresInUse = "" + if ($data.features_in_use -eq "SureAdmin") { + $featuresInUse = "SureAdmin ($sure_admin_mode, Local Access - $local_access)" + } + else { + $featuresInUse = $data.features_in_use + } + + $obj = [ordered]@{ + State = $data.State + Version = "$($data.subsystem_version[0]).$($data.subsystem_version[1])" + Nonce = $($data.arp_counter) + FeaturesInUse = $featuresInUse + EndorsementKeyMod = $kek_mod + SigningKeyMod = $sk_mod + EndorsementKeyID = $kek_encoded + SigningKeyID = $sk_encoded + } + return New-Object -TypeName PSCustomObject -Property $obj +} + + +<# +.SYNOPSIS + Creates an HP Secure Platform Management payload to provision a _Key Endorsement_ key + +.DESCRIPTION + This command creates an HP Secure Platform Management payload to provision a _Key Endorsement_ key. The purpose of the endorsement key is to protect the signing key against unauthorized changes. + Only holders of the key endorsement private key may change the signing key. + + There are three endorsement options to choose from: + - Endorsement Key File (and Password) using -EndorsementKeyFile and -EndorsementKeyPassword parameters + - Endorsement Key Certificate using -EndorsementKeyCertificate parameter + - Remote Endorsement using -RemoteEndorsementKeyID and -RemoteSigningServiceURL parameters + + Please note that using a Key File with Password in PFX format is recommended over using an X509 Certificate object because a private key in a certificate is not password protected. + + This command writes the created payload to the pipeline or to the file specified in the OutputFile parameter. + This payload can then be passed to the Set-HPSecurePlatformPayload command. + + Security note: Payloads should only be created on secure servers. Once created, the payload may be transferred to a client and applied via the Set-HPSecurePlatformPayload command. Creating the payload and passing it to the Set-HPSecurePlatformPayload command via the pipeline is not a recommended production pattern. + +.PARAMETER EndorsementKeyFile + Specifies the _Key Endorsement_ key certificate as a PFX (PKCS #12) file + +.PARAMETER EndorsementKeyPassword + Specifies the password for the _Endorsement Key_ PFX file. If no password was used when the PFX was created (not recommended), this parameter may be omitted. + +.PARAMETER EndorsementKeyCertificate + Specifies the endorsement key certificate as an X509Certificate object + +.PARAMETER BIOSPassword + Specifies the BIOS setup password, if any. Note that the password will be in the clear in the generated payload. + +.PARAMETER OutputFile + Specifies the file to write output to instead of writing the output to the pipeline + +.PARAMETER RemoteEndorsementKeyID + Specifies the Endorsement Key ID to be used + +.PARAMETER RemoteSigningServiceURL + Specifies the Key Management Services (KMS) server URL (I.e.: https://.azurewebsites.net/). This URL must be https. + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.NOTES + The Key Endorsement private key must never leave a secure server. The payload must be created on a secure server, then may be transferred to a client. + + - Requires HP BIOS with Secure Platform Management support. + +.EXAMPLE + $payload = New-HPSecurePlatformEndorsementKeyProvisioningPayload -EndorsementKeyFile "$path\endorsement_key.pfx" + ... + $payload | Set-HPSecurePlatformPayload + +#> +function New-HPSecurePlatformEndorsementKeyProvisioningPayload { + [CmdletBinding(DefaultParameterSetName = "EK_FromFile",HelpUri = "https://developers.hp.com/hp-client-management/doc/New-HPSecurePlatformEndorsementKeyProvisioningPayload")] + param( + [Parameter(ParameterSetName = "EK_FromFile",Mandatory = $true,Position = 0)] + [System.IO.FileInfo]$EndorsementKeyFile, + + [Parameter(ParameterSetName = "EK_FromFile",Mandatory = $false,Position = 1)] + [string]$EndorsementKeyPassword, + + [Parameter(ParameterSetName = "EK_FromBytes",Mandatory = $true,Position = 0)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$EndorsementKeyCertificate, + + [Parameter(ParameterSetName = "EK_FromFile",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "EK_FromBytes",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 0)] + [string]$BIOSPassword, + + [Parameter(ParameterSetName = "EK_FromFile",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "EK_FromBytes",Mandatory = $false,Position = 3)] + [System.IO.FileInfo]$OutputFile, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 1)] + [string]$RemoteEndorsementKeyID, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 2)] + [string]$RemoteSigningServiceURL, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 3)] + [switch]$CacheAccessToken + ) + + # only allow https or file paths with or without file:// URL prefix + if ($RemoteSigningServiceURL -and -not ($RemoteSigningServiceURL.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($RemoteSigningServiceURL) -or $RemoteSigningServiceURL.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if ($PSCmdlet.ParameterSetName -eq "RemoteSigning") { + if (-not $RemoteSigningServiceURL.EndsWith('/')) { + $RemoteSigningServiceURL += '/' + } + $RemoteSigningServiceURL += 'api/commands/p21ekpubliccert' + $jsonPayload = New-HPPrivateRemoteSecurePlatformProvisioningJson -EndorsementKeyID $RemoteEndorsementKeyID + $accessToken = Get-HPPrivateSureAdminKMSAccessToken -CacheAccessToken:$CacheAccessToken + $response,$responseContent = Send-HPPrivateKMSRequest -KMSUri $RemoteSigningServiceURL -JsonPayload $jsonPayload -AccessToken $accessToken -Verbose:$VerbosePreference + + if ($response -eq "OK") { + $crt = [Convert]::FromBase64String($responseContent) + } + else { + Invoke-HPPrivateKMSErrorHandle -ApiResponseContent $responseContent -Status $response + } + } + else { + $crt = (Get-HPPrivateX509CertCoalesce -File $EndorsementKeyFile -cert $EndorsementKeyCertificate -password $EndorsementKeyPassword -Verbose:$VerbosePreference).Certificate + } + + Write-Verbose "Creating EK provisioning payload" + if ($BIOSPassword) { + $passwordLength = $BIOSPassword.Length + } + else { + $passwordLength = 0 + } + + $opaque = New-Object opaque4096_t + $opaqueLength = 4096 + $mi_result = 0 + $cmd = '[DfmNativeSecurePlatform]::get_ek_provisioning_data' + (Test-OSBitness) + '($crt,$($crt.Count),$BIOSPassword, $passwordLength, [ref]$opaque, [ref]$opaqueLength, [ref]$mi_result);' + $result = Invoke-Expression -Command $cmd + Test-HPPrivateCustomResult -result $result -mi_result $mi_result -Category 0x04 + + $output = New-Object -TypeName PortableFileFormat + $output.Data = $opaque.raw[0..($opaqueLength - 1)] + $output.purpose = "hp:provision:endorsementkey" + $output.timestamp = Get-Date + + if ($OutputFile) { + Write-Verbose "Will output to file $OutputFile" + $f = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($OutputFile) + $output | ConvertTo-Json -Compress | Out-File $f -Encoding utf8 + } + else { + $output | ConvertTo-Json -Compress + } +} + + +<# +.SYNOPSIS + Creates an HP Secure Platform Management payload to provision a _Signing Key_ key + +.DESCRIPTION + This command creates an HP Secure Platform Management payload to provision a _Signing Key_ key. The purpose of the signing key is to sign commands for the Secure Platform Management. The Signing key is protected by the endorsement key. As a result, the endorsement key private key must be available when provisioning or changing the signing key. + There are three signing options to choose from: + - Signing Key File (and Password) using -SigningKeyFile and -SigningKeyPassword parameters + - Signing Key Certificate using -SigningKeyCertificate parameter + - Remote Signing using -RemoteSigningServiceKeyID and -RemoteSigningServiceURL parameters + + There are three endorsement options to choose from: + - Endorsement Key File (and Password) using -EndorsementKeyFile and -EndorsementKeyPassword parameters + - Endorsement Key Certificate using -EndorsementKeyCertificate parameter + - Remote Endorsement using -RemoteEndorsementKeyID and -RemoteSigningServiceURL parameters + + Please note that using a Key File with Password in PFX format is recommended over using an X509 Certificate object because a private key in a certificate is not password protected. + + This command writes the created payload to the pipeline or to the file specified in the -OutputFile parameter. This payload can then be passed to the Set-HPSecurePlatformPayload command. + + Security note: Payloads should only be created on secure servers. Once created, the payload may be transferred to a client and applied via the Set-HPSecurePlatformPayload command. Please note that creating the payload and passing it to the Set-HPSecurePlatformPayload command via the pipeline is not a recommended production pattern. + +.PARAMETER EndorsementKeyFile + Specifies the _Key Endorsement_ key certificate as a PFX (PKCS #12) file + +.PARAMETER EndorsementKeyPassword + Specifies the password for the _Endorsement Key_ PFX file. If no password was used when the PFX was created (which is not recommended), this parameter may be omitted. + +.PARAMETER EndorsementKeyCertificate + Specifies the endorsement key certificate as an X509Certificate object + +.PARAMETER SigningKeyFile + Specifies the path to the Secure Platform Management signing key as a PFX file. If the PFX file is protected by a password (recommended), the SigningKeyPassword parameter should also be provided. + +.PARAMETER SigningKeyCertificate + Specifies the Secure Platform Management signing key certificate as an X509Certificate object + +.PARAMETER SigningKeyPassword + Specifies the Secure Platform Management signing key file password, if required. + +.PARAMETER Nonce + Specifies a Nonce. If nonce is specified, the Secure Platform Management subsystem will only accept commands with a nonce greater or equal to the last nonce sent. This approach helps to prevent replay attacks. If not specified, the nonce is inferred from the current local time. The current local time as the nonce works in most cases. However, this approach has a resolution of seconds, so when performing parallel operations or a high volume of operations, it is possible for the same counter to be interpreted for more than one command. In these cases, the caller should use its own nonce derivation and provide it through this parameter. + +.PARAMETER OutputFile + Specifies the file to write output to instead of writing the output to the pipeline + +.PARAMETER RemoteEndorsementKeyID + Specifies the Endorsement Key ID to be used + +.PARAMETER RemoteSigningKeyID + Specifies the Signing Key ID to be provisioned + +.PARAMETER RemoteSigningServiceURL + Specifies the (Key Management Service) KMS server URL (I.e.: https://.azurewebsites.net/). This URL must be https. + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.NOTES + - Requires HP BIOS with Secure Platform Management support. + +.EXAMPLE + $payload = New-HPSecurePlatformSigningKeyProvisioningPayload -EndorsementKeyFile "$path\endorsement_key.pfx" ` + -SigningKeyFile "$path\signing_key.pfx" + ... + $payload | Set-HPSecurePlatformPayload + +#> +function New-HPSecurePlatformSigningKeyProvisioningPayload { + [CmdletBinding(DefaultParameterSetName = "EF_SF",HelpUri = "https://developers.hp.com/hp-client-management/doc/New-HPSecurePlatformSigningKeyProvisioningPayload")] + param( + [Parameter(ParameterSetName = "EF_SF",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "EF_SB",Mandatory = $true,Position = 0)] + [System.IO.FileInfo]$EndorsementKeyFile, + + [Parameter(ParameterSetName = "EF_SF",Mandatory = $false,Position = 1)] + [Parameter(ParameterSetName = "EF_SB",Mandatory = $false,Position = 1)] + [string]$EndorsementKeyPassword, + + [Parameter(ParameterSetName = "EF_SF",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "EB_SF",Mandatory = $false,Position = 2)] + [System.IO.FileInfo]$SigningKeyFile, + + [Parameter(ParameterSetName = "EF_SF",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "EB_SF",Mandatory = $false,Position = 3)] + [string]$SigningKeyPassword, + + [Parameter(ParameterSetName = "EB_SF",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "EB_SB",Mandatory = $true,Position = 0)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$EndorsementKeyCertificate, + + [Parameter(ValueFromPipeline = $true,ParameterSetName = "EB_SB",Mandatory = $false,Position = 2)] + [Parameter(ValueFromPipeline = $true,ParameterSetName = "EF_SB",Mandatory = $false,Position = 2)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$SigningKeyCertificate, + + [Parameter(ParameterSetName = "EF_SF",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "EB_SF",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "EF_SB",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "EB_SB",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 1)] + [uint32]$Nonce = [math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s").Replace(',','.')), + + [Parameter(ParameterSetName = "EF_SF",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "EB_SF",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "EF_SB",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "EB_SB",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 2)] + [System.IO.FileInfo]$OutputFile, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 3)] + [string]$RemoteEndorsementKeyID, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 4)] + [string]$RemoteSigningKeyID, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 5)] + [string]$RemoteSigningServiceURL, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 6)] + [switch]$CacheAccessToken + ) + + # only allow https or file paths with or without file:// URL prefix + if ($RemoteSigningServiceURL -and -not ($RemoteSigningServiceURL.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($RemoteSigningServiceURL) -or $RemoteSigningServiceURL.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if ($PSCmdlet.ParameterSetName -eq "RemoteSigning") { + if (-not $RemoteSigningServiceURL.EndsWith('/')) { + $RemoteSigningServiceURL += '/' + } + $RemoteSigningServiceURL += 'api/commands/p21skprovisioningpayload' + + $params = @{ + EndorsementKeyID = $RemoteEndorsementKeyID + Nonce = $Nonce + } + if ($RemoteSigningKeyID) { + $params.SigningKeyID = $RemoteSigningKeyID + } + + $jsonPayload = New-HPPrivateRemoteSecurePlatformProvisioningJson @params + $accessToken = Get-HPPrivateSureAdminKMSAccessToken -CacheAccessToken:$CacheAccessToken + $response,$responseContent = Send-HPPrivateKMSRequest -KMSUri $RemoteSigningServiceURL -JsonPayload $jsonPayload -AccessToken $accessToken -Verbose:$VerbosePreference + + if ($response -eq "OK") { + return $responseContent + } + else { + Invoke-HPPrivateKMSErrorHandle -ApiResponseContent $responseContent -Status $response + } + } + else { + $ek = Get-HPPrivateX509CertCoalesce -File $EndorsementKeyFile -password $EndorsementKeyPassword -cert $EndorsementKeyCertificate -Verbose:$VerbosePreference + $sk = $null + if ($SigningKeyFile -or $SigningKeyCertificate) { + $sk = Get-HPPrivateX509CertCoalesce -File $SigningKeyFile -password $SigningKeyPassword -cert $SigningKeyCertificate -Verbose:$VerbosePreference + } + + Write-Verbose "Creating SK provisioning payload" + + $payload = New-Object sk_provisioning_t + $sub = New-Object sk_provisioning_payload_t + + $sub.Counter = $nonce + if ($sk) { + $sub.mod = $Sk.Modulus + } + else { + Write-Verbose "Assuming deprovisioning due to missing signing key update" + $sub.mod = New-Object byte[] 256 + } + $payload.Data = $sub + Write-Verbose "Using counter value of $($sub.Counter)" + $out = Convert-HPPrivateObjectToBytes -obj $sub -Verbose:$VerbosePreference + $payload.sig = Invoke-HPPrivateSignData -Data $out[0] -Certificate $ek.Full -Verbose:$VerbosePreference + + + Write-Verbose "Serializing payload" + $out = Convert-HPPrivateObjectToBytes -obj $payload -Verbose:$VerbosePreference + + $output = New-Object -TypeName PortableFileFormat + $output.Data = ($out[0])[0..($out[1] - 1)]; + $output.purpose = "hp:provision:signingkey" + $output.timestamp = Get-Date + + if ($OutputFile) { + Write-Verbose "Will output to file $OutputFile" + $f = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($OutputFile) + $output | ConvertTo-Json -Compress | Out-File -FilePath $f -Encoding utf8 + } + else { + $output | ConvertTo-Json -Compress + } + } +} + +function New-HPPrivateRemoteSecurePlatformProvisioningJson { + [CmdletBinding()] + param( + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 1)] + [uint32]$Nonce, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 2)] + [string]$EndorsementKeyId, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 3)] + [string]$SigningKeyId + ) + + $payload = [ordered]@{ + EKId = $EndorsementKeyId + } + + if ($Nonce) { + $payload['Nonce'] = $Nonce + } + + if ($SigningKeyId) { + $payload['SKId'] = $SigningKeyId + } + + $payload | ConvertTo-Json -Compress +} + +<# +.SYNOPSIS + Creates a deprovisioning payload + +.DESCRIPTION + This command creates a payload to deprovision the HP Secure Platform Management. The caller must have access to the Endorsement Key private key in order to create this payload. + + There are three endorsement options to choose from: + - Endorsement Key File (and Password) using -EndorsementKeyFile and -EndorsementKeyPassword parameters + - Endorsement Key Certificate using -EndorsementKeyCertificate parameter + - Remote Endorsement using -RemoteEndorsementKeyID and -RemoteSigningServiceURL parameters + + Please note that using a Key File with Password in PFX format is recommended over using an X509 Certificate object because a private key in a certificate is not password protected. + + This command writes the created payload to the pipeline or to the file specified in the -OutputFile parameter. This payload can then be passed to the Set-HPSecurePlatformPayload command. + + Security note: Payloads should only be created on secure servers. Once created, the payload may be transferred to a client and applied via the Set-HPSecurePlatformPayload command. Creating the payload and passing it to the Set-HPSecurePlatformPayload command via the pipeline is not a recommended production pattern. + +.PARAMETER EndorsementKeyFile + Specifies the _Key Endorsement_ key certificate as a PFX (PKCS #12) file + +.PARAMETER EndorsementKeyPassword + The password for the endorsement key certificate file. If no password was used when the PFX was created (which is not recommended), this parameter may be omitted. + +.PARAMETER EndorsementKeyCertificate + Specifies the endorsement key certificate as an X509Certificate object + +.PARAMETER Nonce + Specifies a Nonce. If nonce is specified, the Secure Platform Management subsystem will only accept commands with a nonce greater or equal to the last nonce sent. This approach helps to prevent replay attacks. If not specified, the nonce is inferred from the current local time. The current local time as the nonce works in most cases. However, this approach has a resolution of seconds, so when performing parallel operations or a high volume of operations, it is possible for the same counter to be interpreted for more than one command. In these cases, the caller should use its own nonce derivation and provide it through this parameter. + +.PARAMETER RemoteEndorsementKeyID + Specifies the Endorsement Key ID to be used + +.PARAMETER RemoteSigningServiceURL + Specifies the (Key Management Service) KMS server URL (I.e.: https://.azurewebsites.net/). This URL must be https. + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.PARAMETER OutputFile + Specifies the file to write output to instead of writing the output to the pipeline + +.NOTES + - Requires HP BIOS with Secure Platform Management support. + +.EXAMPLE + New-HPSecurePlatformDeprovisioningPayload -EndorsementKeyFile kek.pfx | Set-HPSecurePlatformPayload + +.EXAMPLE + New-HPSecurePlatformDeprovisioningPayload -EndorsementKeyFile kek.pfx -OutputFile deprovisioning_payload.dat +#> +function New-HPSecurePlatformDeprovisioningPayload { + [CmdletBinding(DefaultParameterSetName = "EF",HelpUri = "https://developers.hp.com/hp-client-management/doc/New-HPSecurePlatformDeprovisioningPayload")] + param( + [Parameter(ParameterSetName = "EF",Mandatory = $true,Position = 0)] + [string]$EndorsementKeyFile, + + [Parameter(ParameterSetName = "EF",Mandatory = $false,Position = 1)] + [string]$EndorsementKeyPassword, + + [Parameter(ParameterSetName = "EF",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "EB",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 1)] + [uint32]$Nonce = [math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s").Replace(',','.')), + + [Parameter(ParameterSetName = "EB",Mandatory = $true,Position = 0)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$EndorsementKeyCertificate, + + [Parameter(ParameterSetName = "EB",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "EF",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 2)] + [System.IO.FileInfo]$OutputFile, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 3)] + [string]$RemoteEndorsementKeyID, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 4)] + [string]$RemoteSigningServiceURL, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 5)] + [switch]$CacheAccessToken + ) + + # only allow https or file paths with or without file:// URL prefix + if ($RemoteSigningServiceURL -and -not ($RemoteSigningServiceURL.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($RemoteSigningServiceURL) -or $RemoteSigningServiceURL.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + New-HPSecurePlatformSigningKeyProvisioningPayload @PSBoundParameters +} + +<# +.SYNOPSIS + Applies a payload to HP Secure Platform Management + +.DESCRIPTION + This command applies a properly encoded payload created by one of the New-HPSecurePlatform*, New-HPSureRun*, New-HPSureAdmin*, or New-HPSureRecover* commands to the BIOS. + + Payloads created by means other than the commands mentioned above are not supported. + + Security note: Payloads should only be created on secure servers. Once created, the payload may be transferred to a client and applied via the Set-HPSecurePlatformPayload command. Creating the payload and passing it to the Set-HPSecurePlatformPayload command via the pipeline is not a recommended production pattern. + +.PARAMETER Payload + Specifies the payload to apply. This parameter can also be specified via the pipeline. + +.PARAMETER PayloadFile + Specifies the payload file to apply. This file must contain a properly encoded payload. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.NOTES + - Requires HP BIOS with Secure Platform Management support. + - This command requires elevated privileges. + +.EXAMPLE + Set-HPSecurePlatformPayload -Payload $payload + +.EXAMPLE + Set-HPSecurePlatformPayload -PayloadFile .\payload.dat + +.EXAMPLE + $payload | Set-HPSecurePlatformPayload +#> +function Set-HPSecurePlatformPayload { + + [CmdletBinding(DefaultParameterSetName = "FB",HelpUri = "https://developers.hp.com/hp-client-management/doc/Set-HPSecurePlatformPayload")] + param( + [Parameter(ParameterSetName = "FB",ValueFromPipeline = $true,Position = 0,Mandatory = $True)] [string]$Payload, + [Parameter(ParameterSetName = "FF",ValueFromPipeline = $true,Position = 0,Mandatory = $True)] [System.IO.FileInfo]$PayloadFile + ) + + if ($PSCmdlet.ParameterSetName -eq "FB") { + Write-Verbose "Setting payload string" + [PortableFileFormat]$type = ConvertFrom-Json -InputObject $Payload + } + else { + Write-Verbose "Setting from file $PayloadFile" + $Payload = Get-Content -Path $PayloadFile -Encoding UTF8 + [PortableFileFormat]$type = ConvertFrom-Json -InputObject $Payload + } + + $mi_result = 0 + $pbytes = $type.Data + Write-Verbose "Setting payload from document with type $($type.purpose)" + + $cmd = $null + switch ($type.purpose) { + "hp:provision:endorsementkey" { + $cmd = '[DfmNativeSecurePlatform]::set_ek_provisioning' + (Test-OSBitness) + '($pbytes,$pbytes.length, [ref]$mi_result);' + } + "hp:provision:signingkey" { + $cmd = '[DfmNativeSecurePlatform]::set_sk_provisioning' + (Test-OSBitness) + '($pbytes,$pbytes.length, [ref]$mi_result);' + } + "hp:surerecover:provision:os_image" { + $cmd = '[DfmNativeSureRecover]::set_surerecover_osr_provisioning' + (Test-OSBitness) + '($pbytes,$pbytes.length, [ref]$mi_result);' + } + "hp:surerecover:provision:recovery_image" { + $cmd = '[DfmNativeSureRecover]::set_surerecover_re_provisioning' + (Test-OSBitness) + '($pbytes,$pbytes.length, [ref]$mi_result);' + } + "hp:surerecover:failover:os_image" { + if (-not (Get-HPSureRecoverState).ImageIsProvisioned) { + throw [System.IO.InvalidDataException]"Custom OS Recovery Image is required to configure failover" + } + $cmd = '[DfmNativeSureRecover]::set_surerecover_osr_failover' + (Test-OSBitness) + '($pbytes,$pbytes.length,[ref]$mi_result);' + } + "hp:surerecover:deprovision" { + $cmd = '[DfmNativeSureRecover]::set_surerecover_deprovision_opaque' + (Test-OSBitness) + '($pbytes,$pbytes.length, [ref]$mi_result);' + } + "hp:surerecover:scheduler" { + $cmd = '[DfmNativeSureRecover]::set_surerecover_schedule' + (Test-OSBitness) + '($pbytes,$pbytes.length, [ref]$mi_result);' + } + "hp:surerecover:configure" { + $cmd = '[DfmNativeSureRecover]::set_surerecover_configuration' + (Test-OSBitness) + '($pbytes,$pbytes.length, [ref]$mi_result);' + } + "hp:surerecover:trigger" { + $cmd = '[DfmNativeSureRecover]::set_surerecover_trigger' + (Test-OSBitness) + '($pbytes,$pbytes.length, [ref]$mi_result);' + } + "hp:surerecover:service_event" { + $cmd = '[DfmNativeSureRecover]::raise_surerecover_service_event_opaque' + (Test-OSBitness) + '($null,0, [ref]$mi_result);' + } + "hp:surerrun:manifest" { + $mbytes = $type.Meta1 + $cmd = '[DfmNativeSureRun]::set_surererun_manifest' + (Test-OSBitness) + '($pbytes,$pbytes.length, $mbytes, $mbytes.length, [ref]$mi_result);' + } + "hp:sureadmin:biossetting" { + $Payload | Set-HPPrivateBIOSSettingValuePayload -Verbose:$VerbosePreference + } + "hp:sureadmin:biossettingslist" { + $Payload | Set-HPPrivateBIOSSettingsListPayload -Verbose:$VerbosePreference + } + "hp:sureadmin:resetsettings" { + $Payload | Set-HPPrivateBIOSSettingDefaultsPayload -Verbose:$VerbosePreference + } + "hp:sureadmin:firmwareupdate" { + $Payload | Set-HPPrivateFirmwareUpdatePayload -Verbose:$VerbosePreference + } + default { + throw [System.IO.InvalidDataException]"Document type $($type.purpose) not recognized" + } + } + if ($cmd) { + $result = Invoke-Expression -Command $cmd + Test-HPPrivateCustomResult -result $result -mi_result $mi_result -Category 0x04 + } +} + +# SIG # Begin signature block +# MIIoHQYJKoZIhvcNAQcCoIIoDjCCKAoCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCPbIvJ1ezLEazw +# 2MI9WlZy4UZerqvkOdTzi6B/+NNY7qCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6TCCGeUCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIBm7d9Bf +# +H//DL9QLWKIA/nNHnXDFjhUiXvI0Y9OO/O9MA0GCSqGSIb3DQEBAQUABIIBgGHA +# aVJRhqwRb8xLw1ELPwsk6fHFadqq3jpojeN8hh+6V/XDKAgdks83ytQWFR5QLGMJ +# RjbFwjRAPkZeWsSg6Lza2YP++xJKz29JxV1BUEl9s/k5CEgQy2fjg24qb34jky3v +# nTw17hcXsoK7xUE+KdKn3bg1qq3iUAFkyc0Di1ueB5R5YuHrxK/UA039ydZGmguL +# zt8BQSYwJXsdoahKvuttndKEMwlTygasN+/T5QG8Y42bHIWWYsoOkzs1mNv10xVh +# 6BeC0vPisLrjeo0krXVDe5DXare7usnUJDEPCAFNrjEQdTz5ucBZmp0eWBAHhT0+ +# Dsp5ZMmDDKohSUNYy+MA7352EzBibsOXmDuFin09GMSjghhluvkatfHFCDy2lM5e +# 6iqhG/cNp1bBIjHoEKMlVsqzZltqhJe0ExqgrmneaABctC1wmTH77Iw2W+yaWwHr +# XNG5oCFKadOloPtZYYx5xqWVf6WVCL+ES3bPrgkdinRSuxoadmM2l64+WGt5zqGC +# Fz8wghc7BgorBgEEAYI3AwMBMYIXKzCCFycGCSqGSIb3DQEHAqCCFxgwghcUAgED +# MQ8wDQYJYIZIAWUDBAIBBQAwdwYLKoZIhvcNAQkQAQSgaARmMGQCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCAWQhhKqn1tm48MIetsdzrt9P9o14vnNI3/ +# KdXBvJYGFwIQaJ4xMeRLdtZGxWS5M1CIPhgPMjAyNDA4MjcxNjU1NTBaoIITCTCC +# BsIwggSqoAMCAQICEAVEr/OUnQg5pr/bP1/lYRYwDQYJKoZIhvcNAQELBQAwYzEL +# MAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJE +# aWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBD +# QTAeFw0yMzA3MTQwMDAwMDBaFw0zNDEwMTMyMzU5NTlaMEgxCzAJBgNVBAYTAlVT +# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEgMB4GA1UEAxMXRGlnaUNlcnQgVGlt +# ZXN0YW1wIDIwMjMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjU0WH +# HYOOW6w+VLMj4M+f1+XS512hDgncL0ijl3o7Kpxn3GIVWMGpkxGnzaqyat0QKYoe +# YmNp01icNXG/OpfrlFCPHCDqx5o7L5Zm42nnaf5bw9YrIBzBl5S0pVCB8s/LB6Yw +# aMqDQtr8fwkklKSCGtpqutg7yl3eGRiF+0XqDWFsnf5xXsQGmjzwxS55DxtmUuPI +# 1j5f2kPThPXQx/ZILV5FdZZ1/t0QoRuDwbjmUpW1R9d4KTlr4HhZl+NEK0rVlc7v +# CBfqgmRN/yPjyobutKQhZHDr1eWg2mOzLukF7qr2JPUdvJscsrdf3/Dudn0xmWVH +# VZ1KJC+sK5e+n+T9e3M+Mu5SNPvUu+vUoCw0m+PebmQZBzcBkQ8ctVHNqkxmg4ho +# Yru8QRt4GW3k2Q/gWEH72LEs4VGvtK0VBhTqYggT02kefGRNnQ/fztFejKqrUBXJ +# s8q818Q7aESjpTtC/XN97t0K/3k0EH6mXApYTAA+hWl1x4Nk1nXNjxJ2VqUk+tfE +# ayG66B80mC866msBsPf7Kobse1I4qZgJoXGybHGvPrhvltXhEBP+YUcKjP7wtsfV +# x95sJPC/QoLKoHE9nJKTBLRpcCcNT7e1NtHJXwikcKPsCvERLmTgyyIryvEoEyFJ +# UX4GZtM7vvrrkTjYUQfKlLfiUKHzOtOKg8tAewIDAQABo4IBizCCAYcwDgYDVR0P +# AQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# IAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQYMBaAFLoW +# 2W1NhS9zKXaaL3WMaiCPnshvMB0GA1UdDgQWBBSltu8T5+/N0GSh1VapZTGj3tXj +# STBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln +# aUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3JsMIGQ +# BggrBgEFBQcBAQSBgzCBgDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl +# cnQuY29tMFgGCCsGAQUFBzAChkxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v +# RGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3J0 +# MA0GCSqGSIb3DQEBCwUAA4ICAQCBGtbeoKm1mBe8cI1PijxonNgl/8ss5M3qXSKS +# 7IwiAqm4z4Co2efjxe0mgopxLxjdTrbebNfhYJwr7e09SI64a7p8Xb3CYTdoSXej +# 65CqEtcnhfOOHpLawkA4n13IoC4leCWdKgV6hCmYtld5j9smViuw86e9NwzYmHZP +# VrlSwradOKmB521BXIxp0bkrxMZ7z5z6eOKTGnaiaXXTUOREEr4gDZ6pRND45Ul3 +# CFohxbTPmJUaVLq5vMFpGbrPFvKDNzRusEEm3d5al08zjdSNd311RaGlWCZqA0Xe +# 2VC1UIyvVr1MxeFGxSjTredDAHDezJieGYkD6tSRN+9NUvPJYCHEVkft2hFLjDLD +# iOZY4rbbPvlfsELWj+MXkdGqwFXjhr+sJyxB0JozSqg21Llyln6XeThIX8rC3D0y +# 33XWNmdaifj2p8flTzU8AL2+nCpseQHc2kTmOt44OwdeOVj0fHMxVaCAEcsUDH6u +# vP6k63llqmjWIso765qCNVcoFstp8jKastLYOrixRoZruhf9xHdsFWyuq69zOuhJ +# RrfVf8y2OMDY7Bz1tqG4QyzfTkx9HmhwwHcK1ALgXGC7KP845VJa1qwXIiNO9OzT +# F/tQa/8Hdx9xl0RBybhG02wyfFgvZ0dl5Rtztpn5aywGRu9BHvDwX+Db2a2QgESv +# gBBBijCCBq4wggSWoAMCAQICEAc2N7ckVHzYR6z9KGYqXlswDQYJKoZIhvcNAQEL +# BQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UE +# CxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBS +# b290IEc0MB4XDTIyMDMyMzAwMDAwMFoXDTM3MDMyMjIzNTk1OVowYzELMAkGA1UE +# BhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2Vy +# dCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMaGNQZJs8E9cklRVcclA8TykTep +# l1Gh1tKD0Z5Mom2gsMyD+Vr2EaFEFUJfpIjzaPp985yJC3+dH54PMx9QEwsmc5Zt +# +FeoAn39Q7SE2hHxc7Gz7iuAhIoiGN/r2j3EF3+rGSs+QtxnjupRPfDWVtTnKC3r +# 07G1decfBmWNlCnT2exp39mQh0YAe9tEQYncfGpXevA3eZ9drMvohGS0UvJ2R/dh +# gxndX7RUCyFobjchu0CsX7LeSn3O9TkSZ+8OpWNs5KbFHc02DVzV5huowWR0QKfA +# csW6Th+xtVhNef7Xj3OTrCw54qVI1vCwMROpVymWJy71h6aPTnYVVSZwmCZ/oBpH +# IEPjQ2OAe3VuJyWQmDo4EbP29p7mO1vsgd4iFNmCKseSv6De4z6ic/rnH1pslPJS +# lRErWHRAKKtzQ87fSqEcazjFKfPKqpZzQmiftkaznTqj1QPgv/CiPMpC3BhIfxQ0 +# z9JMq++bPf4OuGQq+nUoJEHtQr8FnGZJUlD0UfM2SU2LINIsVzV5K6jzRWC8I41Y +# 99xh3pP+OcD5sjClTNfpmEpYPtMDiP6zj9NeS3YSUZPJjAw7W4oiqMEmCPkUEBID +# fV8ju2TjY+Cm4T72wnSyPx4JduyrXUZ14mCjWAkBKAAOhFTuzuldyF4wEr1GnrXT +# drnSDmuZDNIztM2xAgMBAAGjggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBS6FtltTYUvcyl2mi91jGogj57IbzAfBgNVHSMEGDAWgBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUH +# AwgwdwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp +# Y2VydC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv +# bS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0 +# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3Js +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsF +# AAOCAgEAfVmOwJO2b5ipRCIBfmbW2CFC4bAYLhBNE88wU86/GPvHUF3iSyn7cIoN +# qilp/GnBzx0H6T5gyNgL5Vxb122H+oQgJTQxZ822EpZvxFBMYh0MCIKoFr2pVs8V +# c40BIiXOlWk/R3f7cnQU1/+rT4osequFzUNf7WC2qk+RZp4snuCKrOX9jLxkJods +# kr2dfNBwCnzvqLx1T7pa96kQsl3p/yhUifDVinF2ZdrM8HKjI/rAJ4JErpknG6sk +# HibBt94q6/aesXmZgaNWhqsKRcnfxI2g55j7+6adcq/Ex8HBanHZxhOACcS2n82H +# hyS7T6NJuXdmkfFynOlLAlKnN36TU6w7HQhJD5TNOXrd/yVjmScsPT9rp/Fmw0HN +# T7ZAmyEhQNC3EyTN3B14OuSereU0cZLXJmvkOHOrpgFPvT87eK1MrfvElXvtCl8z +# OYdBeHo46Zzh3SP9HSjTx/no8Zhf+yvYfvJGnXUsHicsJttvFXseGYs2uJPU5vIX +# mVnKcPA3v5gA3yAWTyf7YGcWoWa63VXAOimGsJigK+2VQbc61RWYMbRiCQ8KvYHZ +# E/6/pNHzV9m8BPqC3jLfBInwAM1dwvnQI38AC+R2AibZ8GV2QqYphwlHK+Z/GqSF +# D/yYlvZVVCsfgPrA8g4r5db7qS9EFUrnEw4d2zc4GqEr9u3WfPwwggWNMIIEdaAD +# AgECAhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYT +# AlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2Vy +# dC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0y +# MjA4MDEwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYD +# VQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAf +# BgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEB +# BQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4Smn +# PVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6f +# qVcWWVVyr2iTcMKyunWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O +# 7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZ +# Vu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4F +# fYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLm +# qaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMre +# Sx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/ch +# srIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+U +# DCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xM +# dT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUb +# AgMBAAGjggE6MIIBNjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAO +# BgNVHQ8BAf8EBAMCAYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRw +# Oi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRz +# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0f +# BD4wPDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNz +# dXJlZElEUm9vdENBLmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEM +# BQADggEBAHCgv0NcVec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLt +# pIh3bb0aFPQTSnovLbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouy +# XtTP0UNEm0Mh65ZyoUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jS +# TEAZNUZqaVSwuKFWjuyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAc +# AgPLILCsWKAOQGPFmCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2 +# h5b9W9FcrBjDTZ9ztwGpn1eqXijiuZQxggN2MIIDcgIBATB3MGMxCzAJBgNVBAYT +# AlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQg +# VHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OU +# nQg5pr/bP1/lYRYwDQYJYIZIAWUDBAIBBQCggdEwGgYJKoZIhvcNAQkDMQ0GCyqG +# SIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNDA4MjcxNjU1NTBaMCsGCyqGSIb3 +# DQEJEAIMMRwwGjAYMBYEFGbwKzLCwskPgl3OqorJxk8ZnM9AMC8GCSqGSIb3DQEJ +# BDEiBCCr/nTqH8mGV8bM/sng2USxomZUmjy/kw3C/6eeqEJBgzA3BgsqhkiG9w0B +# CRACLzEoMCYwJDAiBCDS9uRt7XQizNHUQFdoQTZvgoraVZquMxavTRqa1Ax4KDAN +# BgkqhkiG9w0BAQEFAASCAgCiaV+bkgE+ZNiVK4StBHYcRTR8x+kLJdtEd6nGjH0s +# NE+sdEBYxU9n2O2h+I3bdqVb/1jxNlB6ckLDKspg5QSDrhWEpM032ZxuVvNpj4Zv +# PBuu1esY8vNlMUVdHKzKoKnpyU7SD49oT6VPqXd0svIUfCIiz5+NwMyJySKmsKHx +# g5JmoHdp5NM7xnqVfpuYIsztOlnxSDJiudBpksZ931iORJXTMMkhXHwhV4eN0ipG +# 2v6v9oXK0mD3+++7CCGhN0uZe8Tjqzd0LBZP2ZE08vda9u3vXpcu4e5Tu4qdS70c +# YBt2FnGeiAgcU9UuzwWIWdtUzmQf4LNHwS8zDBC8VYTyLMqivYDIxHvcAutvsC/L +# kcrWiK5XieA/E/bP5Qn3knqrwyLJq6fGF+ZZo9hqE+mR0bd/9WTaLF7hTc7wpV62 +# jYDwlKOaK1aDMtxiC2c9+ODGKMZVXzms/nO4Lpw+CwIIQ1z54TGdrW3gP0jRtJr4 +# QGUKnb6nToNVawo8GermSuMA0c90DtS0op1UJNKZIBJa12QrAztaa6BMRfW0UjmS +# xCriQykP1lsCvk9Mx340GudzevoT9G8z9on5qma83I0B2GGY8S7rv5f+UGMKpApD +# 4GdEHuqLdhORShSNEEE2KQEMIuXRADQbXjTou0mtyHhvgIaXT//8ujkPzbfUtgxl +# nw== +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Firmware/HP.Firmware.SureAdmin.psm1 b/Bios-Update-HP-v2.0/module/HP.Firmware/HP.Firmware.SureAdmin.psm1 new file mode 100644 index 0000000..7de1ffb --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Firmware/HP.Firmware.SureAdmin.psm1 @@ -0,0 +1,4043 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. +using namespace HP.CMSLHelper + +Set-StrictMode -Version 3.0 +$ErrorActionPreference = 'Stop' +#requires -Modules "HP.Private" +#requires -Modules "HP.ClientManagement" + +# CMSL is normally installed in C:\Program Files\WindowsPowerShell\Modules +# but if installed via PSGallery and via PS7, it is installed in a different location +if (Test-Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll") { + Add-Type -Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll" +} +else{ + Add-Type -Path "$PSScriptRoot\..\..\HP.Private\1.7.2\HP.CMSLHelper.dll" +} + +<# +.SYNOPSIS + Retrieves the current state of the HP Sure Admin feature + +.DESCRIPTION + This command retrieves the current state of the HP Sure Admin feature + +.NOTES + - Requires HP P21 enabled. + - Requires HP BIOS with HP Sure Admin support. + - This command requires elevated privileges. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.EXAMPLE + Get-HPSureAdminState +#> +function Get-HPSureAdminState +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/get-hpsureadminstate")] + param() + + $mode = "Disable" + $sk = "" + $signingKeyID = "" + $ver = "" + $lak1 = "" + $sarc = 0 + $aarc = 0 + $local_access = "" + $lak1_keyID = "" + $lak1_key_enrollment_data = "" + + if ((Get-HPPrivateIsSureAdminSupported) -eq $true) { + try { $mode = Get-HPBIOSSettingValue -Name "Enhanced BIOS Authentication Mode" } catch {} + try { $sk = Get-HPBIOSSettingValue -Name "Secure Platform Management Signing Key" } catch {} + try { $ver = Get-HPBIOSSettingValue -Name "Enhanced BIOS Authentication Mode Version" } catch {} + try { $lak1 = Get-HPBIOSSettingValue -Name "Enhanced BIOS Authentication Mode Local Access Key 1" } catch {} + try { $sarc = Get-HPBIOSSettingValue -Name "Enhanced BIOS Authentication Mode Settings Anti-Replay Counter" } catch {} + try { $aarc = Get-HPBIOSSettingValue -Name "Enhanced BIOS Authentication Mode Actions Anti-Replay Counter" } catch {} + + #modify signingKeyID + if ($sk) { + #decode the base64 encoded string + $sk_decoded = [Convert]::FromBase64String($sk) + # hash the decoded string + $sk_hash = Get-HPPrivateHash -Data $sk_decoded + #encode the hashed value + $signingKeyID = [System.Convert]::ToBase64String($sk_hash) + } + + #calculate local access, lak1_keyID and lak1_key_enrollment_data values from lak1 + if ((-not $lak1) -and ((Get-HPBIOSSetupPasswordIsSet) -eq $true) -and ($mode -eq "Enable")) { + $local_access = "BIOS Password Protection only" + $lak1_keyID = "Not Configured" + } + elseif ((-not $lak1) -and ((Get-HPBIOSSetupPasswordIsSet) -eq $false) -and ($mode -eq "Enable")) { + $local_access = "Not Protected" + $lak1_keyID = "Not Configured" + } + elseif ($lak1 -and ($mode -eq "Enable")) { + $local_access = "Configured" + + try { + $lak1_length = $lak1.Length + $lak1_substring = $lak1.substring(0,344) + + #decode the base64 encoded string + $lak1_decoded = [Convert]::FromBase64String($lak1_substring) + # hash the decoded string + $lak1_hash = Get-HPPrivateHash -Data $lak1_decoded + #encode the hashed value + $lak1_keyID = [System.Convert]::ToBase64String($lak1_hash) + + if ($lak1_length -gt 344) { + $pos = $lak1.IndexOf("==") + $ked_substring = $lak1.substring($pos + 2) + if ($ked_substring) { + $lak1_key_enrollment_data = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($ked_substring)) + } + } + } + catch { + $lak1_keyID = "" + $lak1_key_enrollment_data = "" + } + } + else { + $local_access = "" + $lak1_keyID = "" + $lak1_key_enrollment_data = "" + } + + $result = [ordered]@{ + SureAdminMode = if ($mode -eq "Enable") { "On" } else { "Off" } + SigningKeyID = $signingKeyID + EnhancedAuthenticationVersion = $ver + SettingsCounter = $sarc + ActionsCounter = $aarc + LocalAccess = $local_access + LocalAccessKey1 = $lak1 + LAK1_KeyID = $lak1_keyID + LAK1_KeyEnrollmentData = $lak1_key_enrollment_data + } + + New-Object -TypeName PSObject -Property $result + } +} + +<# +.SYNOPSIS + Creates a payload for authorizing a firmware update + +.DESCRIPTION + This command uses the provided key to sign and authorize a firmware update only to the specified file. There are three signing options to choose from: + - Signing Key File (and Password) using -SigningKeyFile and -SigningKeyPassword parameters + - Signing Key Certificate using -SigningKeyCertificate parameter + - Remote Signing using -RemoteSigningServiceKeyID and -RemoteSigningServiceURL parameters + + Please note that using a Key File with Password in PFX format is recommended over using an X509 Certificate object because a private key in a certificate is not password protected. + + This command writes the created payload to the pipeline or to the file specified in the OutputFile parameter. + This payload can then be passed to the Update-HPFirmware command. + + Security note: Payloads should only be created on secure servers. Once created, the payload may be transferred to a client and applied via the Update-HPFirmware command. + +.PARAMETER File + Specifies the firmware update binary (.BIN) file + +.PARAMETER SigningKeyFile + Specifies the path to the Secure Platform Management signing key as a PFX file. If the PFX file is protected by a password (recommended), + the SigningKeyPassword parameter should also be provided. + +.PARAMETER SigningKeyPassword + Specifies the Secure Platform Management signing key file password, if required. + +.PARAMETER SigningKeyCertificate + Specifies the Secure Platform Management signing key certificate as an X509Certificate object + +.PARAMETER Nonce + Specifies a Nonce. If nonce is specified, the Secure Platform Management subsystem will only accept commands with a nonce greater or equal to the last nonce sent. This approach helps to prevent replay attacks. If not specified, the nonce is inferred from the current local time. The current local time as the nonce works in most cases. However, this approach has a resolution of seconds, so when performing parallel operations or a high volume of operations, it is possible for the same counter to be interpreted for more than one command. In these cases, the caller should use its own nonce derivation and provide it through this parameter. + +.PARAMETER TargetUUID + Specifies the computer UUID on which to perform this operation. If not specified the payload generated will work on any computer. + +.PARAMETER SingleUse + If specified, the payload cannot be replayed. This happens because the nonce must be higher than ActionsCounter and this counter is updated and incremented every time a command generated with SingleUse flag is accepted by the BIOS. + If not specified, the payload can be replayed as many times as desired until a payload generated with a nonce higher than + SettingsCounter is received. This happens because SettingsCounter is not incremented by the BIOS when accepting commands. + +.PARAMETER OutputFile + Specifies the file to write output to instead of writing the output to the pipeline + +.PARAMETER Quiet + If specified, this command will suppress non-essential messages during execution. + +.PARAMETER Bitlocker + Specifies the behavior to the BitLocker check prompt (if any). The value must be one of the following values: + - stop: (default option) stops execution if BitLocker is detected but not suspended, and prompts + - ignore: skips the BitLocker check + - suspend: suspends BitLocker if active and continues with execution + +.PARAMETER Force + If specified, this command will force the BIOS update even if the target BIOS is already installed. + +.PARAMETER RemoteSigningServiceKeyID + Specifies the Signing Key ID to be used + +.PARAMETER RemoteSigningServiceURL + Specifies the (Key Management Service) KMS server URL (I.e.: https://.azurewebsites.net/) + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Supported on Windows Power Shell v5. + - An HP BIOS with HP Sure Admin support is required for applying the payloads generated by this command. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.EXAMPLE + New-HPSureAdminFirmwareUpdatePayload -File bios.bin -SigningKeyFile "$path\signing_key.pfx" -SigningKeyPassword "s3cr3t" -OutputFile PayloadFile.dat + Update-HPFirmware -File bios.bin -PayloadFile PayloadFile.dat +#> +function New-HPSureAdminFirmwareUpdatePayload { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/new-hpsureadminfirmwareupdatepayload")] + param( + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 0)] + [System.IO.FileInfo]$File, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $true,Position = 2)] + [System.IO.FileInfo]$SigningKeyFile, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 3)] + [string]$SigningKeyPassword, + + [Parameter(ValueFromPipeline = $true,ParameterSetName = "SigningKeyCert",Mandatory = $true,Position = 2)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$SigningKeyCertificate, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 1)] + [uint32]$Nonce = [math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s").Replace(',','.')), + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 2)] + [guid]$TargetUUID = 'ffffffff-ffff-ffff-ffff-ffffffffffff', + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 3)] + [switch]$SingleUse, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 7)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 4)] + [System.IO.FileInfo]$OutputFile, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 8)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 7)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 5)] + [switch]$Quiet, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 9)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 8)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 6)] + [ValidateSet('stop','ignore','suspend')] + [string]$Bitlocker = 'stop', + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 10)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 9)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 7)] + [switch]$Force, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 8)] + [string]$RemoteSigningServiceKeyID, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 9)] + [string]$RemoteSigningServiceURL, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 10)] + [switch]$CacheAccessToken + ) + + $params = @{ + file = $File + SingleUse = $SingleUse + Nonce = $Nonce + TargetUUID = $TargetUUID + } + + if ($PSCmdlet.ParameterSetName -eq "RemoteSigning") { + $params.RemoteSigningServiceKeyID = $RemoteSigningServiceKeyID + $params.RemoteSigningServiceURL = $RemoteSigningServiceURL + $params.CacheAccessToken = $CacheAccessToken + } + else { + $params.SigningKey = (Get-HPPrivateX509CertCoalesce -File $SigningKeyFile -password $SigningKeyPassword -cert $SigningKeycertificate -Verbose:$VerbosePreference).Full + } + + [byte[]]$authorization = New-HPPrivateSureAdminFirmwareUpdateAuthorization @params + $data = @{ + Authorization = $authorization + FileName = $File.Name + Quiet = $Quiet.IsPresent + bitlocker = $Bitlocker + Force = $Force.IsPresent + } | ConvertTo-Json -Compress + New-HPPrivatePortablePayload -Data $data -Purpose "hp:sureadmin:firmwareupdate" -OutputFile $OutputFile -Verbose:$VerbosePreference +} + +function New-HPPrivateSureAdminFirmwareUpdateAuthorization +{ + [CmdletBinding()] + param( + [Parameter(ParameterSetName = "LocalSigning",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 0)] + [System.IO.FileInfo]$File, + + [Parameter(ParameterSetName = "LocalSigning",Mandatory = $true,Position = 1)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$SigningKey, + + [Parameter(ParameterSetName = "LocalSigning",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 1)] + [uint32]$Nonce = [math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s").Replace(',','.')), + + [Parameter(ParameterSetName = "LocalSigning",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 2)] + [guid]$TargetUUID = 'ffffffff-ffff-ffff-ffff-ffffffffffff', + + [Parameter(ParameterSetName = "LocalSigning",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 3)] + [switch]$SingleUse, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 4)] + [string]$RemoteSigningServiceKeyID, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 5)] + [string]$RemoteSigningServiceURL, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 6)] + [switch]$CacheAccessToken, + + [Parameter(ParameterSetName = "LocalSigning",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 7)] + [switch]$SignatureInBase64 + ) + + Write-Verbose "Creating authentication payload" + + $name = "Allowed BIOS Update Hash" + $fileHash = (Get-FileHash -Path $File -Algorithm SHA256).Hash + + # set value using raw bytes + [byte[]]$valuebytes = [byte[]] -split ($fileHash -replace '..','0x$& ') + + $setting = New-Object -TypeName SureAdminSetting + $setting.Name = $Name + $setting.Value = $fileHash + + $nameLen = [System.Text.Encoding]::Unicode.GetByteCount($Name) + $valueLen = $valuebytes.Length + + $params = @{ + NameLen = $nameLen + ValueLen = $valueLen + SingleUse = $SingleUse + Nonce = $Nonce + TargetUUID = $TargetUUID + } + [byte[]]$header = Invoke-HPPrivateConstructHeader @params -Verbose:$VerbosePreference + [byte[]]$payload = New-Object byte[] ($Header.Count + $nameLen + $valueLen) + + $namebytes = [System.Text.Encoding]::Unicode.GetBytes($Name) + [System.Array]::Copy($Header,0,$payload,0,$Header.Length) + [System.Array]::Copy($namebytes,0,$payload,$Header.Length,$namebytes.Length) + [System.Array]::Copy($valuebytes,0,$payload,$Header.Length + $namebytes.Length,$valuebytes.Length) + + if ($PSCmdlet.ParameterSetName -eq "LocalSigning") { + [byte[]]$signature = Invoke-HPPrivateSignData -Data $payload -Certificate $SigningKey -Verbose:$VerbosePreference + } + else { + [byte[]]$signature = Invoke-HPPrivateRemoteSignData -Data $payload -CertificateId $RemoteSigningServiceKeyID -KMSUri $RemoteSigningServiceURL -CacheAccessToken:$CacheAccessToken -Verbose:$VerbosePreference + } + + $tag = "" + if ($SignatureInBase64.IsPresent) { + return $tag + [Convert]::ToBase64String($signature) + } + $tagBytes = [System.Text.Encoding]::Unicode.GetBytes($tag) + [byte[]]$authorization = New-Object byte[] ($namebytes.Length + $valuebytes.Length + $tagBytes.Length + $Header.Length + $Signature.Length) + $offset = 0 + [System.Array]::Copy($namebytes,0,$authorization,$offset,$namebytes.Length) + $offset += $namebytes.Length + [System.Array]::Copy($valuebytes,0,$authorization,$offset,$valuebytes.Length) + $offset += $valuebytes.Length + [System.Array]::Copy($tagBytes,0,$authorization,$offset,$tagBytes.Length) + $offset += $tagBytes.Length + [System.Array]::Copy($Header,0,$authorization,$offset,$Header.Length) + $offset += $Header.Length + [System.Array]::Copy($Signature,0,$authorization,$offset,$Signature.Length) + + #($authorization | Format-Hex) + return $authorization +} + +<# +.SYNOPSIS + Creates a payload for authorizing multiple BIOS setting changes + +.DESCRIPTION + This command uses the provided key to sign and authorize multiple BIOS setting changes. There are three signing options to choose from: + - Signing Key File (and Password) using -SigningKeyFile and -SigningKeyPassword parameters + - Signing Key Certificate using -SigningKeyCertificate parameter + - Remote Signing using -RemoteSigningServiceKeyID and -RemoteSigningServiceURL parameters + + Please note that using a Key File with Password in PFX format is recommended over using an X509 Certificate object because a private key in a certificate is not password protected. + + This command writes the created payload to the pipeline or to the file specified in the -OutputFile parameter. + This payload can then be passed to the Set-HPSecurePlatformPayload command. + + Security note: Payloads should only be created on secure servers. Once created, the payload may be transferred to a client and applied via the Set-HPSecurePlatformPayload command. Creating the payload and passing it to the Set-HPSecurePlatformPayload command via the pipeline is not a recommended production pattern. + +.PARAMETER SigningKeyFile + Specifies the path to the Secure Platform Management signing key as a PFX file. If the PFX file is protected by a password (recommended), the SigningKeyPassword parameter should also be provided. + +.PARAMETER SigningKeyPassword + Specifies the Secure Platform Management signing key file password, if required. + +.PARAMETER SigningKeyCertificate + Specifies the Secure Platform Management signing key certificate as an X509Certificate object + +.PARAMETER Nonce + Specifies a Nonce. If nonce is specified, the Secure Platform Management subsystem will only accept commands with a nonce greater or equal to the last nonce sent. This approach helps to prevent replay attacks. If not specified, the nonce is inferred from the current local time. The current local time as the nonce works in most cases. However, this approach has a resolution of seconds, so when performing parallel operations or a high volume of operations, it is possible for the same counter to be interpreted for more than one command. In these cases, the caller should use its own nonce derivation and provide it through this parameter. + +.PARAMETER InputFile + Specifies the file (relative or absolute) path to process containing one or more BIOS settings + +.PARAMETER InputFormat + Specifies the input file format (XML, JSON, CSV, or BCU) + +.PARAMETER TargetUUID + Specifies the computer UUID on which to perform this operation. If not specified, the payload generated will work on any computer. + +.PARAMETER OutputFile + Specifies the file to write output to instead of writing the output to the pipeline + +.PARAMETER OutputFormat + Specifies the output file format (default or BCU) + +.PARAMETER RemoteSigningServiceKeyID + Specifies the Signing Key ID to be used + +.PARAMETER RemoteSigningServiceURL + Specifies the (Key Management Service) KMS server URL (I.e.: https://.azurewebsites.net/) + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Supported on Windows Power Shell v5. + - An HP BIOS with HP Sure Admin support is required for applying the payloads generated by this command. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.EXAMPLE + $payload = New-HPSureAdminBIOSSettingsListPayload -SigningKeyFile "$path\signing_key.pfx" -InputFile "settings.BCU" -Format BCU + $payload | Set-HPSecurePlatformPayload + +.EXAMPLE + New-HPSureAdminBIOSSettingsListPayload -SigningKeyFile "$path\signing_key.pfx" -SigningKeyPassword "s3cr3t" -InputFile "settings.BCU" -Format BCU -OutputFile PayloadFile.dat + Set-HPSecurePlatformPayload -PayloadFile PayloadFile.dat +#> +function New-HPSureAdminBIOSSettingsListPayload +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/new-hpsureadminbiossettingslistpayload")] + param( + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 0)] + [System.IO.FileInfo]$InputFile, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 1)] + [ValidateSet('XML','JSON','BCU','CSV')] + [Alias('Format')] + [string]$InputFormat = $null, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $true,Position = 2)] + [System.IO.FileInfo]$SigningKeyFile, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 3)] + [string]$SigningKeyPassword, + + [Parameter(ValueFromPipeline = $true,ParameterSetName = "SigningKeyCert",Mandatory = $true,Position = 3)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$SigningKeyCertificate, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 2)] + [uint32]$Nonce = [math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s").Replace(',','.')), + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 3)] + [guid]$TargetUUID = 'ffffffff-ffff-ffff-ffff-ffffffffffff', + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 7)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 7)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 4)] + [System.IO.FileInfo]$OutputFile, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 5)] + [string]$RemoteSigningServiceKeyID, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 6)] + [string]$RemoteSigningServiceURL, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 7)] + [switch]$CacheAccessToken, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 8)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 8)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 8)] + [ValidateSet('default','BCU')] + [string]$OutputFormat = 'default' + ) + + Write-Verbose "InputFormat specified: '$InputFormat'. Reading file..." + [System.Collections.Generic.List[SureAdminSetting]]$settingsList = $null + $settingsList = Get-HPPrivateSettingsFromFile -FileName $InputFile -Format $InputFormat + + $params = @{ + SettingsList = $settingsList + Nonce = $Nonce + TargetUUID = $TargetUUID + } + + if ($PSCmdlet.ParameterSetName -eq "RemoteSigning") { + $params.RemoteSigningServiceKeyID = $RemoteSigningServiceKeyID + $params.RemoteSigningServiceURL = $RemoteSigningServiceURL + $params.CacheAccessToken = $CacheAccessToken + } + else { + $params.SigningKey = (Get-HPPrivateX509CertCoalesce -File $SigningKeyFile -password $SigningKeyPassword -cert $SigningKeycertificate -Verbose:$VerbosePreference).Full + } + + $settingsList = New-HPPrivateSureAdminBIOSSettingsObject @params + + if ($OutputFormat -eq 'default') { + $data = $settingsList | ConvertTo-Json + New-HPPrivatePortablePayload -Data $data -Purpose "hp:sureadmin:biossettingslist" -OutputFile $OutputFile + } + elseif ($OutputFormat -eq 'BCU') { + $dict = New-HPPrivateBIOSSettingsDefinition -SettingsDefinitionFile $InputFile -Format $InputFormat + New-HPPrivateSureAdminSettingsBCU -settingsList $settingsList -SettingsDefinition $dict -OutputFile $OutputFile + } +} + +function New-HPPrivateBIOSSettingsDefinition +{ + [CmdletBinding()] + param( + $SettingsDefinitionFile, + $Format + ) + + $dict = @{} + switch ($format) { + { $_ -eq 'XML' } { + Write-Verbose "Reading XML settings definition $settingsDefinitionFile" + [xml]$settingsDefinitionXml = Get-Content $SettingsDefinitionFile + $entries = ([xml]$settingsDefinitionXml).ImagePal.BIOSSettings.BIOSSetting + foreach ($entry in $entries) { + [string[]]$valueList = @() + foreach ($v in $entry.SelectNodes("ValueList/Value/text()")) + { + $valueList += $v.Value + } + if ($valueList -le 1) { + [string[]]$valueList = @() + } + $dict[$entry.Name] = [pscustomobject]@{ + Name = $entry.Name + Value = $entry.Value + ValueList = $valueList + } + } + } + + { $_ -eq 'BCU' } { + Write-Verbose "Reading BCU settings definition $settingsDefinitionFile" + + $list = [ordered]@{} + $currset = "" + + switch -regex -File $settingsDefinitionFile { + '^\S.*$' { + $currset = $matches[0].trim() + if ($currset -ne "BIOSConfig 1.0" -and -not $currset.StartsWith(";")) { + $list[$currset] = New-Object System.Collections.Generic.List[System.String] + } + } + + '^\s.*$' { + # value (indented) + $c = $matches[0].trim() + $list[$currset].Add($c) + } + } + + foreach ($s in $list.keys) { + [string[]]$valueList = @() + if ($list[$s].Count -gt 1) { + $valueList = $list[$s] + } + + $dict[$s] = [pscustomobject]@{ + Name = $s + Value = Get-HPPrivateDesiredValue -Value $list[$s] + ValueList = $valueList + } + } + } + + { $_ -eq 'CSV' } { + Write-Verbose "Reading CSV settings definition $settingsDefinitionFile" + $content = Get-HPPrivateFileContent $settingsDefinitionFile + $items = $content | ConvertFrom-Csv + + foreach ($item in $items) { + + [string[]]$valueList = @() + if ($item.CURRENT_VALUE.contains(',')) { + foreach ($v in $item.CURRENT_VALUE -split ',') + { + if ($v.StartsWith("*")) { + $valueList += $v.substring(1) + } + else { + $valueList += $v + } + } + } + + $dict[$item.Name] = [pscustomobject]@{ + Name = $item.Name + Value = (Get-HPPrivateDesiredValue $item.CURRENT_VALUE) + ValueList = $valueList + } + } + } + + { $_ -eq 'JSON' } { + Write-Verbose "Reading JSON settings definition $settingsDefinitionFile" + [string]$content = Get-HPPrivateFileContent $settingsDefinitionFile + $list = $Content | ConvertFrom-Json + + foreach ($item in $list) { + + [string[]]$valueList = @() + if ($item.PSObject.Properties.Name -match 'Elements') { + [string[]]$valueList = $item.Elements + } + elseif ($item.PSObject.Properties.Name -match 'PossibleValues') { + [string[]]$valueList = $item.PossibleValues + } + + $dict[$item.Name] = [pscustomobject]@{ + Name = $item.Name + Value = $item.Value + ValueList = $valueList + } + } + } + } + + $dict['SetSystemDefaults'] = [pscustomobject]@{ + Name = 'SetSystemDefaults' + Value = '' + ValueList = @() + } + + $dict['Allowed BIOS Update Hash'] = [pscustomobject]@{ + Name = 'Allowed BIOS Update Hash' + Value = '' + ValueList = @() + } + + return $dict +} + +function New-HPPrivateSureAdminSettingsBCU +{ + [CmdletBinding()] + param( + $SettingsList, + $SettingsDefinition, + $Platform, + [System.IO.FileInfo]$OutputFile, + [switch]$SkipSettingDefinition + ) + + Write-Verbose "Found $($SettingsList.Count) settings" + $now = Get-Date + $output += "BIOSConfig 1.0`n" + $output += ";`n" + $output += "; Created by CMSL function $((Get-PSCallStack)[1].Command)`n" + $output += "; Date=$now`n" + $output += ";`n" + $output += "; Found $($SettingsList.Count) settings`n" + $output += ";`n" + foreach ($entry in $SettingsList) { + $output += "$($entry.Name)`n" + if ($SkipSettingDefinition.IsPresent) { + $output += "`t$($entry.Value)`n" + } + else { + if (-not $SettingsDefinition -or -not $SettingsDefinition.ContainsKey($entry.Name)) { + throw "Setting definition not found: $($entry.Name)" + } + $definition = $SettingsDefinition[$entry.Name] + if ($entry.Value.contains(",") -and $definition.ValueList.Count -gt 0) { + $entry.Value.Split(",") | ForEach-Object { + $c = $_.trim() + $output += "`t$c`n" + } + } + elseif ($definition.ValueList.Count -gt 0) { + foreach ($v in $definition.ValueList) { + if ($v -eq $entry.Value) { + $output += "`t*$($v)`n" + } + else { + $output += "`t$($v)`n" + } + } + } + else { + $output += "`t$($entry.Value)`n" + } + } + $output += ";Signature=$($entry.AuthString)`n" + } + + if ($OutputFile) { + Write-Verbose "Will output to file $OutputFile" + $f = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($OutputFile) + Out-File -FilePath $f -Encoding utf8 -InputObject $output + } + else { + Write-Verbose 'Will output to console' + $output + } +} + +function New-HPPrivatePortablePayload { + param( + [string]$Data, + [string]$Purpose, + [System.IO.FileInfo]$OutputFile + ) + + $output = New-Object -TypeName PortableFileFormat + $output.timestamp = Get-Date + $output.purpose = $Purpose + $output.Data = [System.Text.Encoding]::UTF8.GetBytes($Data) + + if ($OutputFile) { + Write-Verbose "Will output to file $OutputFile" + $f = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($OutputFile) + $output | ConvertTo-Json -Compress | Out-File -FilePath $f -Encoding utf8 + } + else { + $output | ConvertTo-Json -Compress + } +} + +function New-HPPrivateSureAdminBIOSSettingsObject { + [CmdletBinding()] + param( + [Parameter(ParameterSetName = "LocalSigning",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 0)] + [System.Collections.Generic.List[SureAdminSetting]]$SettingsList, + + [Parameter(ParameterSetName = "LocalSigning",Mandatory = $false,Position = 1)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 1)] + [switch]$SingleUse, + + [Parameter(ParameterSetName = "LocalSigning",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 2)] + [uint32]$Nonce = [math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s").Replace(',','.')), + + [Parameter(ParameterSetName = "LocalSigning",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 3)] + [guid]$TargetUUID = 'ffffffff-ffff-ffff-ffff-ffffffffffff', + + [Parameter(ParameterSetName = "LocalSigning",Mandatory = $true,Position = 4)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$SigningKey, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 4)] + [string]$RemoteSigningServiceKeyID, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 5)] + [string]$RemoteSigningServiceURL, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 6)] + [switch]$CacheAccessToken + ) + + Write-Verbose "Signing settings list" + + $params = @{ + Nonce = $Nonce + TargetUUID = $TargetUUID + } + + if ($PSCmdlet.ParameterSetName -eq "LocalSigning") { + $params.SigningKey = $SigningKey + for ($i = 0; $i -lt $SettingsList.Count; $i++) { + $setting = $SettingsList[$i] + $params.Name = $setting.Name + $params.Value = $setting.Value + + if ($setting.AuthString -eq $null) { + $SettingsList[$i] = New-HPPrivateSureAdminBIOSSettingObject @params -Verbose:$VerbosePreference + } + } + } + else { + $params.CertificateId = $RemoteSigningServiceKeyID + $params.KMSUri = $RemoteSigningServiceURL + $params.CacheAccessToken = $CacheAccessToken + $params.SettingsList = $SettingsList + $SettingsList = Invoke-HPPrivateRemoteSignSureAdminSettings @params -Verbose:$VerbosePreference + } + + return $SettingsList +} + +function Invoke-HPPrivateRemoteSignSureAdminSettings { + [CmdletBinding()] + param( + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 0)] + [guid]$TargetUUID = 'ffffffff-ffff-ffff-ffff-ffffffffffff', + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 1)] + [uint32]$Nonce = [math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s").Replace(',','.')), + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 2)] + [System.Collections.Generic.List[SureAdminSetting]]$SettingsList, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 3)] + [string]$CertificateId, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 4)] + [string]$KMSUri, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 5)] + [switch]$CacheAccessToken, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 6)] + [switch]$SingleUse + ) + + # only allow https or file paths with or without file:// URL prefix + if ($KMSUri -and -not ($KMSUri.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($KMSUri) -or $KMSUri.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if (-not $KMSUri.EndsWith('/')) { + $KMSUri += '/' + } + $KMSUri += 'api/commands/sureadminauth' + + $jsonPayload = New-HPPrivateSureAdminRemoteSigningSettingsJson -settingsList $SettingsList -nonce $Nonce -TargetUUID $TargetUUID -CertificateId $CertificateId -SingleUse:$SingleUse + $accessToken = Get-HPPrivateSureAdminKMSAccessToken -CacheAccessToken:$CacheAccessToken + $response,$responseContent = Send-HPPrivateKMSRequest -KMSUri $KMSUri -JsonPayload $jsonPayload -AccessToken $accessToken + + if ($response -eq "OK") { + $responseObject = $responseContent | ConvertFrom-Json + + $settings = New-Object System.Collections.Generic.List[SureAdminSetting] + for ($i = 0; $i -lt $responseObject.settings.Count; $i++) { + $settings.Add([SureAdminSetting]@{ + Name = $responseObject.settings[$i].Name + Value = $responseObject.settings[$i].Value + AuthString = $responseObject.settings[$i].AuthString + }) | Out-Null + } + # Return a list of [SureAdminSetting] + $settings + } + else { + Invoke-HPPrivateKMSErrorHandle -ApiResponseContent $responseContent -Status $response + } +} + +function New-HPPrivateSureAdminBIOSSettingObject { + [CmdletBinding()] + param( + [Parameter(ParameterSetName = "LocalSigning",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 0)] + [string]$Name, + + [Parameter(ParameterSetName = "LocalSigning",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 1)] + [AllowEmptyString()] + [string]$Value, + + [Parameter(ParameterSetName = "LocalSigning",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 2)] + [switch]$SingleUse, + + [Parameter(ParameterSetName = "LocalSigning",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 3)] + [uint32]$Nonce, + + [Parameter(ParameterSetName = "LocalSigning",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 4)] + [guid]$TargetUUID, + + [Parameter(ParameterSetName = "LocalSigning",Mandatory = $true,Position = 5)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$SigningKey, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 5)] + [string]$RemoteSigningServiceKeyID, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 6)] + [string]$RemoteSigningServiceURL, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 7)] + [switch]$CacheAccessToken + ) + + [SureAdminSetting]$setting = New-Object -TypeName SureAdminSetting + $setting.Name = $Name + $setting.Value = $Value + + if ($PSCmdlet.ParameterSetName -eq "LocalSigning") { + if ($Name -eq "Setup Password" -or $Name -eq "Power-On Password") { + $SettingValueForSigning = "" + $Value + } + else { + $SettingValueForSigning = $Value + } + + $nameLen = [System.Text.Encoding]::Unicode.GetByteCount($setting.Name) + $valueLen = [System.Text.Encoding]::Unicode.GetByteCount($SettingValueForSigning) + + $params = @{ + NameLen = $nameLen + ValueLen = $valueLen + SingleUse = $SingleUse + Nonce = $Nonce + TargetUUID = $TargetUUID + } + [byte[]]$header = Invoke-HPPrivateConstructHeader @params -Verbose:$VerbosePreference + [byte[]]$payload = Invoke-HPPrivateConstructPayload -Header $header -Name $setting.Name -Value $SettingValueForSigning -Verbose:$VerbosePreference + [byte[]]$signature = Invoke-HPPrivateSignData -Data $payload -Certificate $SigningKey -Verbose:$VerbosePreference + $setting.AuthString = Invoke-HPPrivateConstructAuthorization -Header $header -Signature $signature -Verbose:$VerbosePreference + } + else { + $settings = New-Object System.Collections.Generic.List[SureAdminSetting] + $settings.Add($setting) + $setting = (Invoke-HPPrivateRemoteSignSureAdminSettings -TargetUUID $TargetUUID -Nonce $Nonce -CertificateId $RemoteSigningServiceKeyID -KMSUri $RemoteSigningServiceURL -CacheAccessToken:$CacheAccessToken -SingleUse:$SingleUse -SettingsList $settings)[0] + } + + return $setting +} + +function New-HPPrivateSureAdminRemoteSigningJson { + [CmdletBinding()] + param( + [string]$CertificateId, + [byte[]]$Data + ) + + $blob = [Convert]::ToBase64String($Data) + $payload = [ordered]@{ + keyId = $CertificateId + commandBlob = $blob + } + + $payload | ConvertTo-Json -Compress +} + +function New-HPPrivateSureAdminRemoteSigningSettingsJson { + [CmdletBinding()] + param( + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 0)] + [guid]$TargetUUID = 'ffffffff-ffff-ffff-ffff-ffffffffffff', + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 1)] + [uint32]$Nonce = [math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s").Replace(',','.')), + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 2)] + [System.Collections.Generic.List[SureAdminSetting]]$SettingsList, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 3)] + [string]$CertificateId, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 4)] + [switch]$SingleUse + ) + + $settings = New-Object System.Collections.ArrayList + for ($i = 0; $i -lt $SettingsList.Count; $i++) { + $settings.Add([pscustomobject]@{ + Name = $SettingsList[$i].Name + Value = $SettingsList[$i].Value + Nonce = $Nonce + TargetUUID = $TargetUUID + isSingleUse = $SingleUse.IsPresent + }) | Out-Null + } + + $payload = [ordered]@{ + keyId = $CertificateId + settings = $settings + } + + $payload | ConvertTo-Json -Compress +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Invoke-HPPrivateRemoteSignData { + [CmdletBinding()] + param( + [byte[]]$Data, + [string]$CertificateId, + [string]$KMSUri, + [switch]$CacheAccessToken + ) + + if (-not $KMSUri.EndsWith('/')) { + $KMSUri += '/' + } + $KMSUri += 'api/commands/p21signature' + + $jsonPayload = New-HPPrivateSureAdminRemoteSigningJson -CertificateId $CertificateId -Data $Data + $accessToken = Get-HPPrivateSureAdminKMSAccessToken -CacheAccessToken:$CacheAccessToken + $response,$responseContent = Send-HPPrivateKMSRequest -KMSUri $KMSUri -JsonPayload $jsonPayload -AccessToken $accessToken -Verbose:$VerbosePreference + + if ($response -eq "OK") { + $responseObject = $responseContent | ConvertFrom-Json + [System.Convert]::FromBase64String($responseObject.signature) + } + else { + Invoke-HPPrivateKMSErrorHandle -ApiResponseContent $responseContent -Status $response + } +} + +<# +.SYNOPSIS + Creates a payload for resetting BIOS settings to default values + +.DESCRIPTION + This command uses the provided key to sign and authorize resetting BIOS settings to default values. There are three signing options to choose from: + - Signing Key File (and Password) using -SigningKeyFile and -SigningKeyPassword parameters + - Signing Key Certificate using -SigningKeyCertificate parameter + - Remote Signing using -RemoteSigningServiceKeyID and -RemoteSigningServiceURL parameters + + Please note that using a Key File with Password in PFX format is recommended over using an X509 Certificate object because a private key in a certificate is not password protected. + + This command writes the created payload to the pipeline or to the file specified in the OutputFile parameter. + This payload can then be passed to the Set-HPSecurePlatformPayload command. + + Security note: Payloads should only be created on secure servers. Once created, the payload may be transferred to a client and applied via the Set-HPSecurePlatformPayload command. Creating the payload and passing it to the Set-HPSecurePlatformPayload command via the pipeline is not a recommended production pattern. + +.PARAMETER SigningKeyFile + Specifies the path to the Secure Platform Management signing key, as a PFX file. If the PFX file is protected by a password (recommended), + the SigningKeyPassword parameter should also be provided. + +.PARAMETER SigningKeyPassword + Specifies the Secure Platform Management signing key file password, if required. + +.PARAMETER SigningKeyCertificate + Specifies the Secure Platform Management signing key certificate as an X509Certificate object + +.PARAMETER Nonce + Specifies a Nonce. If nonce is specified, the Secure Platform Management subsystem will only accept commands with a nonce greater or equal to the last nonce sent. This approach helps to prevent replay attacks. If not specified, the nonce is inferred from the current local time. The current local time as the nonce works in most cases. However, this approach has a resolution of seconds, so when performing parallel operations or a high volume of operations, it is possible for the same counter to be interpreted for more than one command. In these cases, the caller should use its own nonce derivation and provide it through this parameter. + +.PARAMETER TargetUUID + Specifies the computer UUID on which to perform this operation. If not specified the payload generated will work on any computer. + +.PARAMETER OutputFile + Specifies the file to write output to instead of writing the output to the pipeline + +.PARAMETER RemoteSigningServiceKeyID + Specifies the Signing Key ID to be used + +.PARAMETER RemoteSigningServiceURL + Specifies the (Key Management Service) KMS server URL (I.e.: https://.azurewebsites.net/) + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Supported on Windows Power Shell v5. + - An HP BIOS with HP Sure Admin support is required for applying the payloads generated by this command. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.EXAMPLE + $payload = New-HPSureAdminSettingDefaultsPayload -SigningKeyFile "$path\signing_key.pfx" + $payload | Set-HPSecurePlatformPayload + +.EXAMPLE + New-HPSureAdminSettingDefaultsPayload -SigningKeyFile "$path\signing_key.pfx" -SigningKeyPassword "s3cr3t" -OutputFile PayloadFile.dat + Set-HPSecurePlatformPayload -PayloadFile PayloadFile.dat +#> +function New-HPSureAdminSettingDefaultsPayload +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/new-hpsureadminsettingdefaultspayload")] + param( + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $true,Position = 0)] + [System.IO.FileInfo]$SigningKeyFile, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 1)] + [string]$SigningKeyPassword, + + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $true,Position = 0)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$SigningKeyCertificate, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 1)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 0)] + [uint32]$Nonce = [math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s").Replace(',','.')), + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 1)] + [guid]$TargetUUID = 'ffffffff-ffff-ffff-ffff-ffffffffffff', + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 2)] + [System.IO.FileInfo]$OutputFile, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 3)] + [string]$RemoteSigningServiceKeyID, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 4)] + [string]$RemoteSigningServiceURL, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 5)] + [switch]$CacheAccessToken + ) + + $params = @{ + Name = "SetSystemDefaults" + Value = "" + Nonce = $Nonce + TargetUUID = $TargetUUID + } + + if ($PSCmdlet.ParameterSetName -eq "RemoteSigning") { + $params.RemoteSigningServiceKeyID = $RemoteSigningServiceKeyID + $params.RemoteSigningServiceURL = $RemoteSigningServiceURL + $params.CacheAccessToken = $CacheAccessToken + } + else { + $params.SigningKey = (Get-HPPrivateX509CertCoalesce -File $SigningKeyFile -password $SigningKeyPassword -cert $SigningKeycertificate -Verbose:$VerbosePreference).Full + } + + [SureAdminSetting]$setting = New-HPPrivateSureAdminBIOSSettingObject @params -Verbose:$VerbosePreference + $data = $setting | ConvertTo-Json + New-HPPrivatePortablePayload -Data $data -Purpose "hp:sureadmin:resetsettings" -OutputFile $OutputFile +} + +<# +.SYNOPSIS + Creates a payload for enabling the HP Sure Admin feature + +.DESCRIPTION + This command uses the provided key to sign and authorize the operation of enabling HP Sure Admin. There are three signing options to choose from: + - Signing Key File (and Password) using -SigningKeyFile and -SigningKeyPassword parameters + - Signing Key Certificate using -SigningKeyCertificate parameter + - Remote Signing using -RemoteSigningServiceKeyID and -RemoteSigningServiceURL parameters + + Please note that using a Key File with Password in PFX format is recommended over using an X509 Certificate object because a private key in a certificate is not password protected. + + This command writes the created payload to the pipeline or to the file specified in the OutputFile parameter. + This payload can then be passed to the Set-HPSecurePlatformPayload command. + + Security note: Payloads should only be created on secure servers. Once created, the payload may be transferred to a client and applied via the Set-HPSecurePlatformPayload command. Creating the payload and passing it to the Set-HPSecurePlatformPayload command via the pipeline is not a recommended production pattern. + +.PARAMETER SigningKeyFile + Specifies the path to the Secure Platform Management signing key, as a PFX file. If the PFX file is protected by a password (recommended), + the SigningKeyPassword parameter should also be provided. + +.PARAMETER SigningKeyPassword + Specifies the Secure Platform Management signing key file password, if required. + +.PARAMETER SigningKeyCertificate + Specifies the Secure Platform Management signing key certificate, as an X509Certificate object. + +.PARAMETER Nonce + Specifies a Nonce. If nonce is specified, the Secure Platform Management subsystem will only accept commands with a nonce greater or equal to the last nonce sent. This approach helps to prevent replay attacks. If not specified, the nonce is inferred from the current local time. The current local time as the nonce works in most cases. However, this approach has a resolution of seconds, so when performing parallel operations or a high volume of operations, it is possible for the same counter to be interpreted for more than one command. In these cases, the caller should use its own nonce derivation and provide it through this parameter. + +.PARAMETER TargetUUID + Specifies the computer UUID on which to perform this operation. If not specified the payload generated will work on any computer. + +.PARAMETER SingleUse + If specified, the payload cannot be replayed. This happens because the nonce must be higher than ActionsCounter and this counter is updated and incremented every time a command generated with SingleUse flag is accepted by the BIOS. + If not specified, the payload can be replayed as many times as desired until a payload generated with a nonce higher than + SettingsCounter is received. This happens because SettingsCounter is not incremented by the BIOS when accepting commands. + +.PARAMETER OutputFile + Specifies the file to write output to instead of writing the output to the pipeline + +.PARAMETER RemoteSigningServiceKeyID + Specifies the Signing Key ID to be used + +.PARAMETER RemoteSigningServiceURL + Specifies the (Key Management Service) KMS server URL (I.e.: https://.azurewebsites.net/) + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Supported on Windows Power Shell v5. + - An HP BIOS with HP Sure Admin support is required for applying the payloads generated by this command. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.EXAMPLE + $payload = New-HPSureAdminEnablePayload -SigningKeyFile "$path\signing_key.pfx" + $payload | Set-HPSecurePlatformPayload + +.EXAMPLE + New-HPSureAdminEnablePayload -SigningKeyFile "$path\signing_key.pfx" -SigningKeyPassword "s3cr3t" -OutputFile PayloadFile.dat + Set-HPSecurePlatformPayload -PayloadFile PayloadFile.dat +#> +function New-HPSureAdminEnablePayload +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/new-hpsureadminenablepayload")] + param( + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $true,Position = 1)] + [System.IO.FileInfo]$SigningKeyFile, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 2)] + [string]$SigningKeyPassword, + + [Parameter(ValueFromPipeline = $true,ParameterSetName = "SigningKeyCert",Mandatory = $true,Position = 1)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$SigningKeyCertificate, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 0)] + [uint32]$Nonce = [math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s").Replace(',','.')), + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 1)] + [guid]$TargetUUID = 'ffffffff-ffff-ffff-ffff-ffffffffffff', + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 2)] + [switch]$SingleUse, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 3)] + [System.IO.FileInfo]$OutputFile, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 4)] + [string]$RemoteSigningServiceKeyID, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 5)] + [string]$RemoteSigningServiceURL, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 6)] + [switch]$CacheAccessToken + ) + + $params = @{ + Name = "Enhanced BIOS Authentication Mode" + Value = "Enable" + SingleUse = $SingleUse + Nonce = $Nonce + TargetUUID = $TargetUUID + OutputFile = $OutputFile + } + + if ($PSCmdlet.ParameterSetName -eq "SigningKeyFile") { + $params.SigningKeyFile = $SigningKeyFile + $params.SigningKeyPassword = $SigningKeyPassword + } + elseif ($PSCmdlet.ParameterSetName -eq "SigningKeyCert") { + $params.SigningKeyCertificate = $SigningKeyCertificate + } + elseif ($PSCmdlet.ParameterSetName -eq "RemoteSigning") { + $params.RemoteSigningServiceKeyID = $RemoteSigningServiceKeyID + $params.RemoteSigningServiceURL = $RemoteSigningServiceURL + $params.CacheAccessToken = $CacheAccessToken + } + + New-HPSureAdminBIOSSettingValuePayload @params -Verbose:$VerbosePreference +} + +<# +.SYNOPSIS + Creates a payload for disabling the HP Sure Admin feature + +.DESCRIPTION + This command uses the provided key to sign and authorize the operation of disabling HP Sure Admin. There are three signing options to choose from: + - Signing Key File (and Password) using -SigningKeyFile and -SigningKeyPassword parameters + - Signing Key Certificate using -SigningKeyCertificate parameter + - Remote Signing using -RemoteSigningServiceKeyID and -RemoteSigningServiceURL parameters + + Please note that using a Key File with Password in PFX format is recommended over using an X509 Certificate object because a private key in a certificate is not password protected. + + + This command writes the created payload to the pipeline or to the file specified in the OutputFile parameter. This payload can then be passed to the Set-HPSecurePlatformPayload command. + + Security note: Payloads should only be created on secure servers. Once created, the payload may be transferred to a client and applied via the Set-HPSecurePlatformPayload command. Creating the payload and passing it to the Set-HPSecurePlatformPayload command via the pipeline is not a recommended production pattern. + +.PARAMETER SigningKeyFile + Specifies the path to the Secure Platform Management signing key, as a PFX file. If the PFX file is protected by a password (recommended), + the SigningKeyPassword parameter should also be provided. + +.PARAMETER SigningKeyPassword + Specifies the Secure Platform Management signing key file password, if required. + +.PARAMETER SigningKeyCertificate + Specifies the Secure Platform Management signing key certificate, as an X509Certificate object. + +.PARAMETER Nonce + Specifies a Nonce. If nonce is specified, the Secure Platform Management subsystem will only accept commands with a nonce greater or equal to the last nonce sent. This approach helps to prevent replay attacks. If not specified, the nonce is inferred from the current local time. The current local time as the nonce works in most cases. However, this approach has a resolution of seconds, so when performing parallel operations or a high volume of operations, it is possible for the same counter to be interpreted for more than one command. In these cases, the caller should use its own nonce derivation and provide it through this parameter. + +.PARAMETER TargetUUID + Specifies the computer UUID on which to perform this operation. If not specified the payload generated will work on any computer. + +.PARAMETER SingleUse + If specified, the payload cannot be replayed. This happens because the nonce must be higher than ActionsCounter and this counter is updated and incremented every time a command generated with SingleUse flag is accepted by the BIOS. + If not specified, the payload can be replayed as many times as desired until a payload generated with a nonce higher than + SettingsCounter is received. This happens because SettingsCounter is not incremented by the BIOS when accepting commands. + +.PARAMETER OutputFile + Specifies the file to write output to instead of writing the output to the pipeline + +.PARAMETER RemoteSigningServiceKeyID + Specifies the Signing Key ID to be used + +.PARAMETER RemoteSigningServiceURL + Specifies the (Key Management Service) KMS server URL (I.e.: https://.azurewebsites.net/) + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Supported on Windows Power Shell v5. + - An HP BIOS with HP Sure Admin support is required for applying the payloads generated by this command. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.EXAMPLE + $payload = New-HPSureAdminDisablePayload -SigningKeyFile "$path\signing_key.pfx" + $payload | Set-HPSecurePlatformPayload + +.EXAMPLE + New-HPSureAdminDisablePayload -SigningKeyFile "$path\signing_key.pfx" -SigningKeyPassword "s3cr3t" -OutputFile PayloadFile.dat + Set-HPSecurePlatformPayload -PayloadFile PayloadFile.dat +#> +function New-HPSureAdminDisablePayload +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/new-hpsureadmindisablepayload")] + param( + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $true,Position = 1)] + [System.IO.FileInfo]$SigningKeyFile, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 2)] + [string]$SigningKeyPassword, + + [Parameter(ValueFromPipeline = $true,ParameterSetName = "SigningKeyCert",Mandatory = $true,Position = 1)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$SigningKeyCertificate, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 0)] + [uint32]$Nonce = [math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s").Replace(',','.')), + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 1)] + [guid]$TargetUUID = 'ffffffff-ffff-ffff-ffff-ffffffffffff', + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 2)] + [switch]$SingleUse, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 3)] + [System.IO.FileInfo]$OutputFile, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 4)] + [string]$RemoteSigningServiceKeyID, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 5)] + [string]$RemoteSigningServiceURL, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 6)] + [switch]$CacheAccessToken + ) + + $params = @{ + Name = "Enhanced BIOS Authentication Mode" + Value = "Disable" + SingleUse = $SingleUse + Nonce = $Nonce + TargetUUID = $TargetUUID + OutputFile = $OutputFile + } + + if ($PSCmdlet.ParameterSetName -eq "SigningKeyFile") { + $params.SigningKeyFile = $SigningKeyFile + $params.SigningKeyPassword = $SigningKeyPassword + } + elseif ($PSCmdlet.ParameterSetName -eq "SigningKeyCert") { + $params.SigningKeyCertificate = $SigningKeyCertificate + } + elseif ($PSCmdlet.ParameterSetName -eq "RemoteSigning") { + $params.RemoteSigningServiceKeyID = $RemoteSigningServiceKeyID + $params.RemoteSigningServiceURL = $RemoteSigningServiceURL + $params.CacheAccessToken = $CacheAccessToken + } + + New-HPSureAdminBIOSSettingValuePayload @params -Verbose:$VerbosePreference +} + +<# +.SYNOPSIS + Creates a payload for provisioning a local access key + +.DESCRIPTION + This command uses the provided key to sign and authorize updating HP Sure Admin local access keys. There are three signing options to choose from: + - Signing Key File (and Password) using -SigningKeyFile and -SigningKeyPassword parameters + - Signing Key Certificate using -SigningKeyCertificate parameter + - Remote Signing using -RemoteSigningServiceKeyID and -RemoteSigningServiceURL parameters + + Please note that using a Key File with Password in PFX format is recommended over using an X509 Certificate object because a private key in a certificate is not password protected. + + Setting a local access key allows system administrators to authorize commands locally with the HP Sure Admin phone app. Reference the Convert-HPSureAdminCertToQRCode command to learn more about how to transfer a local access key to the HP Sure Admin phone app. + + This command writes the created payload to the pipeline or to the file specified in the OutputFile parameter. This payload can then be passed to the Set-HPSecurePlatformPayload command. + + Security note: Payloads should only be created on secure servers. Once created, the payload may be transferred to a client and applied via the Set-HPSecurePlatformPayload command. Creating the payload and passing it to the Set-HPSecurePlatformPayload command via the pipeline is not a recommended production pattern. + +.PARAMETER SigningKeyFile + Specifies the path to the Secure Platform Management signing key as a PFX file. If the PFX file is protected by a password (recommended), + the SigningKeyPassword parameter should also be provided. + +.PARAMETER SigningKeyPassword + Specifies the Secure Platform Management signing key file password, if required. + +.PARAMETER LocalAccessKeyFile + Specifies the path to the local access key as a PFX file. If the PFX file is protected by a password (recommended), + the LocalAccessKeyPassword parameter should also be provided. + +.PARAMETER LocalAccessKeyPassword + Specifies the local access key file password, if required + +.PARAMETER SigningKeyCertificate + Specifies the Secure Platform Management signing key certificate as an X509Certificate object + +.PARAMETER Nonce + Specifies a Nonce. If nonce is specified, the Secure Platform Management subsystem will only accept commands with a nonce greater or equal to the last nonce sent. This approach helps to prevent replay attacks. If not specified, the nonce is inferred from the current local time. The current local time as the nonce works in most cases. However, this approach has a resolution of seconds, so when performing parallel operations or a high volume of operations, it is possible for the same counter to be interpreted for more than one command. In these cases, the caller should use its own nonce derivation and provide it through this parameter. + +.PARAMETER TargetUUID + Specifies the computer UUID on which to perform this operation. If not specified, the payload generated will work on any computer. + +.PARAMETER SingleUse + If specified, the payload cannot be replayed. This happens because the nonce must be higher than ActionsCounter and this counter is updated and incremented every time a command generated with SingleUse flag is accepted by the BIOS. + If not specified, the payload can be replayed as many times as desired until a payload generated with a nonce higher than + SettingsCounter is received. This happens because SettingsCounter is not incremented by the BIOS when accepting commands. + +.PARAMETER OutputFile + Specifies the file to write output to instead of writing the output to the pipeline + +.PARAMETER Id + Specifies the Int Id from 1,2, or 3 that gets appended to the setting name + +.PARAMETER KeyEnrollmentData + Specifies the KeyEnrollmentData to use to get Sure Admin Local Access key from certificate + +.PARAMETER RemoteSigningServiceKeyID + Specifies the Signing Key ID to be used + +.PARAMETER RemoteSigningServiceURL + Specifies the (Key Management Service) KMS server URL (I.e.: https://.azurewebsites.net/) + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Supported on Windows Power Shell v5. + - An HP BIOS with HP Sure Admin support is required for applying the payloads generated by this command. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.EXAMPLE + $payload = New-HPSureAdminLocalAccessKeyProvisioningPayload -SigningKeyFile "$path\signing_key.pfx" -LocalAccessKeyFile "$path\local_access_key.pfx" + $payload | Set-HPSecurePlatformPayload + +.EXAMPLE + New-HPSureAdminLocalAccessKeyProvisioningPayload -SigningKeyFile "$path\signing_key.pfx" -SigningKeyPassword "s3cr3t" -LocalAccessKeyFile "$path\local_access_key.pfx" -LocalAccessKeyPassword "lak_s3cr3t" -OutputFile PayloadFile.dat + Set-HPSecurePlatformPayload -PayloadFile PayloadFile.dat +#> +function New-HPSureAdminLocalAccessKeyProvisioningPayload +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/new-hpsureadminlocalaccesskeyprovisioningpayload")] + param( + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $true,Position = 1)] + [System.IO.FileInfo]$SigningKeyFile, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 2)] + [string]$SigningKeyPassword, + + [Parameter(ValueFromPipeline = $true,ParameterSetName = "SigningKeyCert",Mandatory = $true,Position = 1)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$SigningKeyCertificate, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 0)] + [uint32]$Nonce = [math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s").Replace(',','.')), + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 1)] + [guid]$TargetUUID = 'ffffffff-ffff-ffff-ffff-ffffffffffff', + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 2)] + [switch]$SingleUse, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $true,Position = 6)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $true,Position = 6)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 3)] + [System.IO.FileInfo]$LocalAccessKeyFile, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 7)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 7)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 4)] + [string]$LocalAccessKeyPassword, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 8)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 8)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 5)] + [ValidateSet(1,2,3)] + [int]$Id = 1, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 9)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 9)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 6)] + [string]$KeyEnrollmentData, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 7)] + [System.IO.FileInfo]$OutputFile, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 8)] + [string]$RemoteSigningServiceKeyID, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 9)] + [string]$RemoteSigningServiceURL, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 10)] + [switch]$CacheAccessToken + ) + + $localAccessKey = (Get-HPPrivateX509CertCoalesce -File $LocalAccessKeyFile -password $LocalAccessKeyPassword -cert $null -Verbose:$VerbosePreference).Full + [string]$pubKeyBase64 = Get-HPPrivateSureAdminLocalAccessKeyFromCert -LocalAccessKey $localAccessKey -KeyEnrollmentData $KeyEnrollmentData + + $params = @{ + Name = "Enhanced BIOS Authentication Mode Local Access Key " + $Id + Value = $pubKeyBase64 + SingleUse = $SingleUse + Nonce = $Nonce + TargetUUID = $TargetUUID + OutputFile = $OutputFile + } + if ($PSCmdlet.ParameterSetName -eq "SigningKeyFile") { + $params.SigningKeyFile = $SigningKeyFile + $params.SigningKeyPassword = $SigningKeyPassword + } + elseif ($PSCmdlet.ParameterSetName -eq "SigningKeyCert") { + $params.SigningKeyCertificate = $SigningKeyCertificate + } + elseif ($PSCmdlet.ParameterSetName -eq "RemoteSigning") { + $params.RemoteSigningServiceKeyID = $RemoteSigningServiceKeyID + $params.RemoteSigningServiceURL = $RemoteSigningServiceURL + $params.CacheAccessToken = $CacheAccessToken + } + + New-HPSureAdminBIOSSettingValuePayload @params -Verbose:$VerbosePreference +} + +<# +.SYNOPSIS + Creates a payload for authorizing a single BIOS setting change + +.DESCRIPTION + This command uses the provided key to sign and authorize a single BIOS setting change. There are three signing options to choose from: + - Signing Key File (and Password) using -SigningKeyFile and -SigningKeyPassword parameters + - Signing Key Certificate using -SigningKeyCertificate parameter + - Remote Signing using -RemoteSigningServiceKeyID and -RemoteSigningServiceURL parameters + + Please note that using a Key File with Password in PFX format is recommended over using an X509 Certificate object because a private key in a certificate is not password protected. + + This command writes the created payload to the pipeline or to the file specified in the OutputFile parameter. + This payload can then be passed to the Set-HPSecurePlatformPayload command. + + Security note: Payloads should only be created on secure servers. Once created, the payload may be transferred to a client and applied via the Set-HPSecurePlatformPayload command. Creating the payload and passing it to the Set-HPSecurePlatformPayload command via the pipeline is not a recommended production pattern. + +.PARAMETER Name + Specifies the name of a setting. Note that the setting name is usually case sensitive. + +.PARAMETER Value + Specifies the new value of a setting + +.PARAMETER SigningKeyFile + Specifies the path to the Secure Platform Management signing key as a PFX file. If the PFX file is protected by a password (recommended), + the SigningKeyPassword parameter should also be provided. + +.PARAMETER SigningKeyPassword + Specifies the Secure Platform Management signing key file password, if required + +.PARAMETER SigningKeyCertificate + Specifies the Secure Platform Management signing key certificate as an X509Certificate object + +.PARAMETER Nonce + Specifies a Nonce. If nonce is specified, the Secure Platform Management subsystem will only accept commands with a nonce greater or equal to the last nonce sent. This approach helps to prevent replay attacks. If not specified, the nonce is inferred from the current local time. The current local time as the nonce works in most cases. However, this approach has a resolution of seconds, so when performing parallel operations or a high volume of operations, it is possible for the same counter to be interpreted for more than one command. In these cases, the caller should use its own nonce derivation and provide it through this parameter. + +.PARAMETER TargetUUID + Specifies the computer UUID on which to perform this operation. If not specified, the payload generated will used on any computer. + +.PARAMETER SingleUse + If specified, the payload cannot be replayed. This happens because the nonce must be higher than ActionsCounter and this counter is updated and incremented every time a command generated with SingleUse flag is accepted by the BIOS. + If not specified, the payload can be replayed as many times as desired until a payload generated with a nonce higher than + SettingsCounter is received. This happens because SettingsCounter is not incremented by the BIOS when accepting commands. + +.PARAMETER OutputFile + Specifies the file to write output to instead of writing the output to the pipeline + +.PARAMETER RemoteSigningServiceKeyID + Specifies the Signing Key ID to be used + +.PARAMETER RemoteSigningServiceURL + Specifies the (Key Managmenet Service) KMS server URL (I.e.: https://.azurewebsites.net/) + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Supported on Windows Power Shell v5. + - An HP BIOS with HP Sure Admin support is required for applying the payloads generated by this command. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.EXAMPLE + $payload = New-HPSureAdminBIOSSettingValuePayload -Name "Setting Name" -Value "New Setting Value" -SigningKeyFile "$path\signing_key.pfx" + $payload | Set-HPSecurePlatformPayload + +.EXAMPLE + New-HPSureAdminBIOSSettingValuePayload -Name "Setting Name" -Value "New Setting Value" -SigningKeyFile "$path\signing_key.pfx" -SigningKeyPassword "s3cr3t" -OutputFile PayloadFile.dat + Set-HPSecurePlatformPayload -PayloadFile PayloadFile.dat +#> +function New-HPSureAdminBIOSSettingValuePayload +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/new-hpsureadminbiossettingvaluepayload")] + param( + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 0)] + [string]$Name, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 1)] + [AllowEmptyString()] + [string]$Value, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $true,Position = 2)] + [System.IO.FileInfo]$SigningKeyFile, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 3)] + [string]$SigningKeyPassword, + + [Parameter(ValueFromPipeline = $true,ParameterSetName = "SigningKeyCert",Mandatory = $true,Position = 2)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$SigningKeyCertificate, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 2)] + [uint32]$Nonce = [math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s").Replace(',','.')), + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 3)] + [guid]$TargetUUID = 'ffffffff-ffff-ffff-ffff-ffffffffffff', + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 4)] + [switch]$SingleUse, + + [Parameter(ParameterSetName = "SigningKeyFile",Mandatory = $false,Position = 7)] + [Parameter(ParameterSetName = "SigningKeyCert",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 5)] + [System.IO.FileInfo]$OutputFile, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 6)] + [string]$RemoteSigningServiceKeyID, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 7)] + [string]$RemoteSigningServiceURL, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 8)] + [switch]$CacheAccessToken + ) + + if ($PSCmdlet.ParameterSetName -eq "RemoteSigning") { + $params = @{ + Name = $Name + Value = $Value + SingleUse = $SingleUse + Nonce = $Nonce + TargetUUID = $TargetUUID + RemoteSigningServiceKeyID = $RemoteSigningServiceKeyID + RemoteSigningServiceURL = $RemoteSigningServiceURL + CacheAccessToken = $CacheAccessToken + } + } + else { + $signingKey = (Get-HPPrivateX509CertCoalesce -File $SigningKeyFile -password $SigningKeyPassword -cert $SigningKeycertificate -Verbose:$VerbosePreference).Full + $params = @{ + Name = $Name + Value = $Value + SingleUse = $SingleUse + Nonce = $Nonce + TargetUUID = $TargetUUID + SigningKey = $signingKey + } + } + + [SureAdminSetting]$setting = New-HPPrivateSureAdminBIOSSettingObject @params -Verbose:$VerbosePreference + $data = $setting | ConvertTo-Json + New-HPPrivatePortablePayload -Data $data -Purpose "hp:sureadmin:biossetting" -OutputFile $OutputFile -Verbose:$VerbosePreference +} + +function Invoke-HPPrivateConstructHeader { + [CmdletBinding()] + param( + [uint32]$NameLen, + [uint32]$ValueLen, + [switch]$SingleUse, + [uint32]$Nonce, + [guid]$TargetUUID + ) + + $data = New-Object -TypeName SureAdminSignatureBlockHeader + + $data.Version = 1 + $data.NameLength = $NameLen + $data.ValueLength = $ValueLen + $data.OneTimeUse = [byte]($SingleUse.IsPresent) + $data.Nonce = $Nonce + $data.Reserved = 1 + $data.Target = $TargetUUID.ToByteArray() + + [byte[]]$header = (Convert-HPPrivateObjectToBytes -obj $data -Verbose:$VerbosePreference)[0] + return $header +} + +function Invoke-HPPrivateConstructPayload { + [CmdletBinding()] + param( + [byte[]]$Header, + [string]$Name, + [string]$Value + ) + + $nameLen = [System.Text.Encoding]::Unicode.GetByteCount($Name) + $valueLen = [System.Text.Encoding]::Unicode.GetByteCount($Value) + [byte[]]$payload = New-Object byte[] ($Header.Count + $nameLen + $valueLen) + + $namebytes = [System.Text.Encoding]::Unicode.GetBytes($Name) + [System.Array]::Copy($Header,0,$payload,0,$Header.Length) + [System.Array]::Copy($namebytes,0,$payload,$Header.Length,$namebytes.Length) + if ($valueLen -ne 0) { + Write-Verbose "Copying value to payload" + $valuebytes = [System.Text.Encoding]::Unicode.GetBytes($Value) + [System.Array]::Copy($valuebytes,0,$payload,$Header.Length + $namebytes.Length,$valuebytes.Length) + } + else { + Write-Verbose "No value was specified for this setting" + } + + return $payload +} + +function Invoke-HPPrivateConstructAuthorization { + [CmdletBinding()] + param( + [byte[]]$Header, + [byte[]]$Signature + ) + + [byte[]]$authorization = New-Object byte[] ($Header.Length + $Signature.Length) + [System.Array]::Copy($Header,0,$authorization,0,$Header.Length) + [System.Array]::Copy($Signature,0,$authorization,$Header.Length,$Signature.Length) + + [string]$encodedAuth = "" + [Convert]::ToBase64String($authorization) + return $encodedAuth +} + +function Get-HPPrivatePublicKeyModulus ($cert) +{ + $key = $cert.PublicKey.key + $parameters = $key.ExportParameters($false); + return $parameters.Modulus +} + +function Get-HPPrivateKeyNameFromCert ($cert) +{ + return $cert.Subject -replace "(CN=)(.*?),.*",'$2' +} + +function Get-HPPrivatePrimesFromCert ($Certificate) +{ + $rsaPrivate = [xml]$Certificate.PrivateKey.ToXmlString($true) + + $p = [System.Convert]::FromBase64String($rsaPrivate.RSAKeyValue.P) + $q = [System.Convert]::FromBase64String($rsaPrivate.RSAKeyValue.Q) + + $primes = [System.Byte[]]::new(256) + + for ($i = 0; $i -lt 128; $i++) + { + $primes[$i] = $p[$i] + } + + for ($i = 0; $i -lt 128; $i++) + { + $primes[128 + $i] = $q[$i] + } + + return $primes +} + +function Get-HPPrivateRandomByteArray ($Length) +{ + $RandomBytes = New-Object Byte[] ($Length) + + $RNG = [Security.Cryptography.RNGCryptoServiceProvider]::Create() + $RNG.GetBytes($RandomBytes) + + return $RandomBytes +} + +function Get-HPPrivateRandomIV () +{ + return Get-HPPrivateRandomByteArray 16 +} + +function Get-HPPrivateRandomSalt () +{ + return Get-HPPrivateRandomByteArray 8 +} + +function Get-HPPrivatePbkdf2Bytes ($Passphrase,$Salt,$Iterations,$Length,$Metadata = $null) +{ + $Passphrase += $Metadata + $PBKDF2 = New-Object System.Security.Cryptography.Rfc2898DeriveBytes ($Passphrase,$Salt,$Iterations) + return $PBKDF2.GetBytes($Length) +} + +function Get-HPPrivateDataEncryption ([byte[]]$AESKey,[byte[]]$Data,[byte[]]$IV) +{ + $aesManaged = New-Object System.Security.Cryptography.AesManaged + $aesManaged.Mode = [System.Security.Cryptography.CipherMode]::CBC + $aesManaged.Padding = [System.Security.Cryptography.PaddingMode]::PKCS7 + $aesManaged.KeySize = 256 + $aesManaged.IV = $IV + $aesManaged.key = $AESKey + + $encryptor = $aesManaged.CreateEncryptor() + [byte[]]$encryptedData = $encryptor.TransformFinalBlock($Data,0,$Data.Length); + $aesManaged.Dispose() + + return $encryptedData +} + +function Get-HPPrivateKeyFromCert { + [CmdletBinding()] + param( + [System.Security.Cryptography.X509Certificates.X509Certificate2]$Certificate, + [string]$Metadata, + [string]$Passphrase + ) + + $iv = Get-HPPrivateRandomIV + $salt = Get-HPPrivateRandomSalt + $iterations = 100000 + $keysize = 32 + $aesKey = Get-HPPrivatePbkdf2Bytes $Passphrase $salt $iterations $keysize $Metadata + + $primes = Get-HPPrivatePrimesFromCert $Certificate + $cipher = Get-HPPrivateDataEncryption $aesKey $primes $iv + + $encryptedPrimes = $salt + $iv + $cipher + + return [System.Convert]::ToBase64String($encryptedPrimes) +} + +function Get-HPPrivateSureAdminLocalAccessKeyFromCert { + [CmdletBinding()] + param( + [System.Security.Cryptography.X509Certificates.X509Certificate2]$LocalAccessKey, + [string]$KeyEnrollmentData + ) + $modulus = Get-HPPrivatePublicKeyModulus $LocalAccessKey + $pubKeyBase64 = [System.Convert]::ToBase64String($modulus) + + if ($KeyEnrollmentData) { + $KeyEnrollmentDataBytes = [System.Text.Encoding]::UTF8.GetBytes($KeyEnrollmentData) + $pubKeyBase64 += [System.Convert]::ToBase64String($KeyEnrollmentDataBytes) + } + + return $pubKeyBase64 +} + +<# +.SYNOPSIS + Extracts the key id from a certificate + +.DESCRIPTION + This command retrieves the key id from a certificate. The key id used by HP Sure Admin Key Management Service (KMS) for remote signing. + +.PARAMETER Certificate + Specifies the X509Certificate2 certificate + +.PARAMETER CertificateFile + Specifies the certificate in PFX file + +.PARAMETER CertificateFilePassword + Specifies the password for the PFX file + +.EXAMPLE + Get-HPSureAdminKeyId -Certificate X509Certificate2 + +.EXAMPLE + Get-HPSureAdminKeyId -CertificateFile mypfxcert.pfx +#> +function Get-HPSureAdminKeyId { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/get-hpsureadminkeyid")] + param( + [Parameter(ParameterSetName = "Cert",Mandatory = $true,Position = 0)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$Certificate, + + [Parameter(ParameterSetName = "File",Mandatory = $true,Position = 0)] + [System.IO.FileInfo]$CertificateFile, + + [Parameter(ParameterSetName = "File",Mandatory = $false,Position = 1)] + [string]$CertificateFilePassword + ) + + if ($PSCmdlet.ParameterSetName -eq "File") { + if ($CertificateFilePassword) { + [securestring]$CertificateFilePassword = ConvertTo-SecureString -AsPlainText -Force $CertificateFilePassword + $Certificate = (Get-HPPrivatePublicKeyCertificateFromPFX -FileName $CertificateFile -password $CertificateFilePassword).Full + } + else { + $Certificate = (Get-HPPrivatePublicKeyCertificateFromPFX -FileName $CertificateFile).Full + } + } + + $modulus = Get-HPPrivatePublicKeyModulus $Certificate + $hashMod = Get-HPPrivateHash -Data $modulus + return [System.Convert]::ToBase64String($hashMod) +} + +function New-HPPrivateSureAdminEnrollmentJsonType5 { + [CmdletBinding()] + param( + [System.Security.Cryptography.X509Certificates.X509Certificate2]$Certificate, + [string]$AADRevocation, + [string]$KeyName + ) + + # Get the pub key + $hashModBase64 = Get-HPSureAdminKeyId -Certificate $Certificate + + # Get full cert + $rawBytes = $Certificate.Export("Pfx","") + $pvtKeyBase64 = [System.Convert]::ToBase64String($rawBytes) + + $data = [ordered]@{ + KeyEnrollmentData = $null + Ver = "002" + Type = "005" + KeyId = $hashModBase64 + KeyAlgo = "06" + PvtKey = $pvtKeyBase64 + KeyExp = "00000000" + KeyName = $KeyName + KeyBkupEn = "0" + CanModKeyBkup = "0" + CanExport = "0" + AADRevocation = $AADRevocation + } + + $json = $data | ConvertTo-Json -Compress + return $json +} + +function New-HPPrivateSureAdminEnrollmentJsonType4 { + [CmdletBinding()] + param( + [System.Security.Cryptography.X509Certificates.X509Certificate2]$Certificate, + [string]$AADRevocation, + [string]$KeyName, + [switch]$EndorsementKey + ) + + # Get the pub key + $hashModBase64 = Get-HPSureAdminKeyId -Certificate $Certificate + + # Get full cert + $rawBytes = $Certificate.Export("Pfx","") + $pvtKeyBase64 = [System.Convert]::ToBase64String($rawBytes) + + $data = [ordered]@{ + KeyEnrollmentData = $null + Ver = "002" + Type = "004" + KeyId = $hashModBase64 + KeyAlgo = "06" + PvtKey = $pvtKeyBase64 + KeyExp = "00000000" + KeyName = $KeyName + KeyBkupEn = "0" + CanModKeyBkup = "0" + CanExport = "0" + AADRevocation = $AADRevocation + } + + $json = $data | ConvertTo-Json -Compress + return $json +} + +function New-HPPrivateSureAdminEnrollmentJson { + [CmdletBinding()] + param( + [System.Security.Cryptography.X509Certificates.X509Certificate2]$Certificate, + [string]$Model, + [string]$SerialNumber, + [string]$Passphrase, + [string]$AADRevocation, + [string]$KeyName + ) + + # Get the pub key + $modulus = Get-HPPrivatePublicKeyModulus $Certificate + $hashMod = Get-HPPrivateHash -Data $modulus + $hashModBase64 = [System.Convert]::ToBase64String($hashMod) + + if (-not $KeyName) { + # Get the private key + $KeyName = Get-HPPrivateKeyNameFromCert $Certificate + } + if (-not $KeyName) { + throw 'Certificate subject or parameter KeyName is required to identify the key in KMS server' + } + + if ("" -eq $Passphrase) { + $keyAlgo = "006" + $ver = "002" + } + else { + $keyAlgo = "007" + $ver = "002" + } + + $data = [ordered]@{ + Ver = $ver + Type = "001" + KeyId = $hashModBase64 + KeyAlgo = $keyAlgo + PvtKey = $null + KeyExp = "00000000" + KeyName = $KeyName + KeyBkupEn = "0" + CanModKeyBkup = "0" + CanExport = "0" + AADRevocation = $AADRevocation + } + + if ($Model) { + $data.Model = $Model + } + if ($SerialNumber) { + $data.SerNum = $SerialNumber + } + + $json = $data | ConvertTo-Json -Compress + $pvtKeyBase64 = Get-HPPrivateKeyFromCert -Certificate $Certificate -Metadata $json -Passphrase $Passphrase + $data.PvtKey = $pvtKeyBase64 + + $json = $data | ConvertTo-Json -Compress + return $json +} + +<# +.SYNOPSIS + Creates a QR-Code for transferring the private key from a certificate file to the HP Sure Admin phone app + +.DESCRIPTION + This command extracts a private key from the provided certificate file and presents it in a form of QR-Code, which can be scanned with the HP Sure Admin phone app. Once scanned the app can be used for authorizing commands and BIOS setting changes. + + Security note: It is recommended to delete the QR-Code file once it is scanned with the app. Keeping the QR-Code stored locally in your computer is not a recommended production pattern since it contains sensitive information that can be used to authorize commands. + +.PARAMETER LocalAccessKeyFile + Specifies the path to the local access key as a PFX file. If the PFX file is protected by a password (recommended), the LocalAccessKeyPassword parameter should also be provided. + +.PARAMETER LocalAccessKeyPassword + Specifies the local access key file password, if required. + +.PARAMETER Model + Specifies the computer model to be stored with the key in the phone app + +.PARAMETER SerialNumber + Specifies the serial number to be stored with the key in the phone app + +.PARAMETER OutputFile + Specifies the file to write output to instead of writing the output to the pipeline + +.PARAMETER Format + Specifies the format of your preference to save the QR-Code image file: Jpeg, Bmp, Png, Svg. + +.PARAMETER ViewAs + Specifies the view option. The possible values are: + - Default: creates a local file in your system and opens QR-Code image in default image viewer. + - Text: the QR-Code is displayed by using text characters in your console. + - None: the QR-Code is not presented to the user. This option is ideally used with the OutputFile parameter. + +.PARAMETER Passphrase + Specifies the password to protect QR-Code content + +.NOTES + - Supported on Windows Power Shell v5. + - An HP BIOS with HP Sure Admin support is required for applying the payloads generated by this command. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.EXAMPLE + Convert-HPSureAdminCertToQRCode -LocalAccessKeyFile "$path\signing_key.pfx" + +.EXAMPLE + Convert-HPSureAdminCertToQRCode -Model "PC-Model" -SerialNumber "SN-1234" -LocalAccessKeyFile "$path\signing_key.pfx" -LocalAccessKeyPassword "s3cr3t" + +.EXAMPLE + Convert-HPSureAdminCertToQRCode -Model "PC-Model" -SerialNumber "SN-1234" -LocalAccessKeyFile "$path\signing_key.pfx" -Passphrase "s3cr3t" -ViewAs Text + +.EXAMPLE + Convert-HPSureAdminCertToQRCode -LocalAccessKeyFile "$path\signing_key.pfx" -Passphrase "s3cr3t" -Format "Svg" +#> +function Convert-HPSureAdminCertToQRCode { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/convert-hpsureadmincerttoqrcode")] + param( + [Parameter(Mandatory = $true,Position = 0)] + [System.IO.FileInfo]$LocalAccessKeyFile, + + [Parameter(Mandatory = $false,Position = 1)] + [string]$LocalAccessKeyPassword, + + [Parameter(Mandatory = $false,Position = 2)] + [string]$Model, + + [Parameter(Mandatory = $false,Position = 3)] + [string]$SerialNumber, + + [Parameter(Mandatory = $false,Position = 4)] + [System.IO.FileInfo]$OutputFile, + + [Parameter(Mandatory = $false,Position = 5)] + [ValidateSet('Jpeg','Bmp','Png','Svg')] + [string]$Format = "Jpeg", + + [Parameter(Mandatory = $false,Position = 6)] + [ValidateSet('None','Text','Default')] + [string]$ViewAs = "Default", + + [Parameter(Mandatory = $false,Position = 7)] + [string]$Passphrase + ) + + if (-not $Model) + { + $Model = Get-HPBIOSSettingValue -Name "Product Name" + } + + if (-not $SerialNumber) + { + $SerialNumber = Get-HPBIOSSettingValue -Name "Serial Number" + } + + if ($LocalAccessKeyPassword) { + [securestring]$LocalAccessKeyPassword = ConvertTo-SecureString -AsPlainText -Force $LocalAccessKeyPassword + $cert = (Get-HPPrivatePublicKeyCertificateFromPFX -FileName $LocalAccessKeyFile -password $LocalAccessKeyPassword).Full + } + else { + $cert = (Get-HPPrivatePublicKeyCertificateFromPFX -FileName $LocalAccessKeyFile).Full + } + + $data = New-HPPrivateSureAdminEnrollmentJson -Certificate $cert -Model $Model -SerialNumber $SerialNumber -Passphrase $Passphrase + New-HPPrivateQRCode -Data $data -OutputFile $OutputFile -Format $Format -ViewAs $ViewAs +} + +<# +.SYNOPSIS + Sends a local access key in PFX format to HP Sure Admin Key Management Service (KMS) + +.DESCRIPTION + This command extracts a private key from the provided certificate file, generates a JSON for the central-managed enrollment process, and sends it to the HP Sure Admin Key Management Service (KMS). + The connection with the KMS server requires the user to authenticate with a valid Microsoft account. + +.PARAMETER LocalAccessKeyFile + Specifies the path to the local access key, as a PFX file. If the PFX file is protected by a password (recommended), + the LocalAccessKeyPassword parameter should also be provided. + +.PARAMETER LocalAccessKeyPassword + Specifies the local access key file password, if required. + +.PARAMETER KMSAppName + Specifies the application name on Azure KMS server that will be used to compose the URI for uploading the key + +.PARAMETER KMSUri + Specifies the complete URI for uploading the key (I.e.: https://.azurewebsites.net/). This URL must be https. + +.PARAMETER AADGroup + Specifies the group name in Azure Active Directory that will have access to the key + +.PARAMETER KeyName + Specifies the key name to identify the certificate. If not specified, it will use the certificate subject. + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Supported on Windows Power Shell v5. + - An HP Sure Admin KMS server is required for using this feature. + +.EXAMPLE + Send-HPSureAdminLocalAccessKeyToKMS -LocalAccessKeyFile "$path\signing_key.pfx" -KMSUri "https://MyKMSURI.azurewebsites.net/" -AADGroup "MyAADGroupName" + +.EXAMPLE + Send-HPSureAdminLocalAccessKeyToKMS -LocalAccessKeyFile "$path\signing_key.pfx" -LocalAccessKeyPassword "pass" -KMSAppName "MyAppName" -AADGroup "MyAADGroupName" +#> +function Send-HPSureAdminLocalAccessKeyToKMS { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/send-hpsureadminlocalaccesskeytokms")] + param( + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 0)] + [System.IO.FileInfo]$LocalAccessKeyFile, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $false,Position = 1)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $false,Position = 1)] + [string]$LocalAccessKeyPassword, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 2)] + [string]$KMSUri, + + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 2)] + [string]$KMSAppName, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 3)] + [string]$AADGroup, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $false,Position = 4)] + [switch]$CacheAccessToken, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $false,Position = 5)] + [string]$KeyName + ) + + # only allow https or file paths with or without file:// URL prefix + if ($KMSUri -and -not ($KMSUri.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($KMSUri) -or $KMSUri.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if (-not $KMSUri) { + $KMSUri = "https://$KMSAppName.azurewebsites.net/" + } + + if (-not $KMSUri.contains('api/uploadkey')) { + if (-not $KMSUri.EndsWith('/')) { + $KMSUri += '/' + } + $KMSUri += 'api/uploadkey' + } + + if ($LocalAccessKeyPassword) { + [securestring]$LocalAccessKeyPassword = ConvertTo-SecureString -AsPlainText -Force $LocalAccessKeyPassword + $cert = (Get-HPPrivatePublicKeyCertificateFromPFX -FileName $LocalAccessKeyFile -password $LocalAccessKeyPassword).Full + } + else { + $cert = (Get-HPPrivatePublicKeyCertificateFromPFX -FileName $LocalAccessKeyFile).Full + } + + $jsonPayload = New-HPPrivateSureAdminEnrollmentJson -Certificate $cert -AADRevocation $AADGroup -KeyName $KeyName + $accessToken = Get-HPPrivateSureAdminKMSAccessToken -CacheAccessToken:$CacheAccessToken + $response,$responseContent = Send-HPPrivateKMSRequest -KMSUri $KMSUri -JsonPayload $jsonPayload -AccessToken $accessToken + + if ($response -ne "OK") { + Invoke-HPPrivateKMSErrorHandle -ApiResponseContent $responseContent -Status $response + } +} + +<# +.SYNOPSIS + Adds a signing key in PFX format to HP Sure Admin Key Management Service (KMS) + +.DESCRIPTION + This command extracts a private key from the provided certificate file, generates a JSON for the central-managed enrollment process, and sends it to the HP Sure Admin Key Management Service (KMS). + The connection with the KMS server requires the user to authenticate with a valid Microsoft account. + +.PARAMETER SigningKeyFile + Specifies the path to the signing key as a PFX file. If the PFX file is protected by a password (recommended), the -SigningKeyPassword parameter should also be provided. + +.PARAMETER SigningKeyPassword + Specifies the signing key file password, if required. + +.PARAMETER Model + Specifies the computer model to be stored with the key in the phone app + +.PARAMETER SerialNumber + Specifies the serial number to be stored with the key in the phone app + +.PARAMETER KMSAppName + Specifies the application name on Azure KMS server that will be used to compose the URI for uploading the key + +.PARAMETER KMSUri + Specifies the complete URI for uploading the key (I.e.: https://.azurewebsites.net/). This URL must be https. + +.PARAMETER AADGroup + Specifies the group name in Azure Active Directory that will have access to the key + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Supported on Windows Power Shell v5. + - An HP Sure Admin KMS server is required for using this feature. + +.EXAMPLE + Add-HPSureAdminSigningKeyToKMS -SigningKeyFile "$path\signing_key.pfx" -KMSUri "https://MyKMSURI.azurewebsites.net/" -AADGroup "MyAADGroupName" + +.EXAMPLE + Add-HPSureAdminSigningKeyToKMS -SigningKeyFile "$path\signing_key.pfx" -SigningKeyPassword "pass" -KMSAppName "MyAppName" -AADGroup "MyAADGroupName" +#> +function Add-HPSureAdminSigningKeyToKMS { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/add-hpsureadminsigningkeytokms")] + param( + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 0)] + [System.IO.FileInfo]$SigningKeyFile, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $false,Position = 1)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $false,Position = 1)] + [string]$SigningKeyPassword, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 3)] + [string]$KMSUri, + + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 3)] + [string]$KMSAppName, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 4)] + [string]$AADGroup, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 5)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 5)] + [string]$KeyName, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $false,Position = 6)] + [switch]$CacheAccessToken + ) + + # only allow https or file paths with or without file:// URL prefix + if ($KMSUri -and -not ($KMSUri.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($KMSUri) -or $KMSUri.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if (-not $KMSUri) { + $KMSUri = "https://$KMSAppName.azurewebsites.net/" + } + if (-not $KMSUri.EndsWith('/')) { + $KMSUri += '/' + } + $KMSUri += 'api/signingkeys' + + if ($SigningKeyPassword) { + [securestring]$SigningKeyPassword = ConvertTo-SecureString -AsPlainText -Force $SigningKeyPassword + $cert = (Get-HPPrivatePublicKeyCertificateFromPFX -FileName $SigningKeyFile -password $SigningKeyPassword).Full + } + else { + $cert = (Get-HPPrivatePublicKeyCertificateFromPFX -FileName $SigningKeyFile).Full + } + + $jsonPayload = New-HPPrivateSureAdminEnrollmentJsonType4 -Certificate $cert -AADRevocation $AADGroup -KeyName $KeyName + $accessToken = Get-HPPrivateSureAdminKMSAccessToken -CacheAccessToken:$CacheAccessToken + $response,$responseContent = Send-HPPrivateKMSRequest -KMSUri $KMSUri -JsonPayload $jsonPayload -AccessToken $accessToken + + if ($response -ne "OK") { + Invoke-HPPrivateKMSErrorHandle -ApiResponseContent $responseContent -Status $response + } +} + +<# +.SYNOPSIS + Retrieves the HP Sure Admin Key Management Service (KMS) server capabilities + +.DESCRIPTION + This command displays HP Sure Admin Key Management Service (KMS) capabilities. + The connection with the KMS server requires the user to authenticate with a valid Microsoft account. + +.PARAMETER KMSAppName + Specifies the application name on Azure KMS server to be used + +.PARAMETER KMSUri + Specifies the complete URI (I.e.: https://.azurewebsites.net/). This URL must be https. + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Supported on Windows Power Shell v5. + - An HP Sure Admin KMS server is required for using this feature. + +.EXAMPLE + Get-HPSureAdminKMSCapabilities -KMSUri "https://MyKMSURI.azurewebsites.net/" + +.EXAMPLE + Get-HPSureAdminKMSCapabilities -KMSAppName "MyAppName" +#> +function Get-HPSureAdminKMSCapabilities { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPSureAdminKMSCapabilities")] + param( + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 3)] + [string]$KMSUri, + + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 3)] + [string]$KMSAppName, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $false,Position = 6)] + [switch]$CacheAccessToken + ) + + # only allow https or file paths with or without file:// URL prefix + if ($KMSUri -and -not ($KMSUri.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($KMSUri) -or $KMSUri.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if (-not $KMSUri) { + $KMSUri = "https://$KMSAppName.azurewebsites.net/" + } + if (-not $KMSUri.EndsWith('/')) { + $KMSUri += '/' + } + $KMSUri += 'api/capabilities' + + $accessToken = Get-HPPrivateSureAdminKMSAccessToken -CacheAccessToken:$CacheAccessToken + $response,$responseContent = Send-HPPrivateKMSRequest -KMSUri $KMSUri -AccessToken $accessToken -Method get + + if ($response -ne "OK") { + Invoke-HPPrivateKMSErrorHandle -ApiResponseContent $responseContent -Status $response + } + + return $responseContent | ConvertFrom-Json +} + +<# +.SYNOPSIS + Adds an endorsement key in PFX format to HP Sure Admin Key Management Service (KMS) + +.DESCRIPTION + This command extracts a private key from the provided certificate file, generates a JSON for the central-managed enrollment process, and sends it to the HP Sure Admin Key Management Service (KMS). + The connection with the KMS server requires the user to authenticate with a valid Microsoft account. + +.PARAMETER EndorsementKeyFile + Specifies the path to the endorsement key as a PFX file. If the PFX file is protected by a password (recommended), the -EndorsementKeyPassword parameter should also be provided. + +.PARAMETER EndorsementKeyPassword + Specifies the endorsement key file password, if required. + +.PARAMETER Model + Specifies the computer model to be stored with the key in the phone app + +.PARAMETER SerialNumber + Specifies the serial number to be stored with the key in the phone app + +.PARAMETER KMSAppName + Specifies the application name on Azure KMS server that will be used to compose the URI for uploading the key + +.PARAMETER KMSUri + Specifies the complete URI for uploading the key (I.e.: https://.azurewebsites.net/). This URL must be https. + +.PARAMETER AADGroup + Specifies the group name in Azure Active Directory that will have access to the key + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Supported on Windows Power Shell v5. + - An HP Sure Admin KMS server is required for using this feature. + +.EXAMPLE + Add-HPSureAdminEndorsementKeyToKMS -EndorsementKeyFile "$path\endorsement_key.pfx" -KMSUri "https://MyKMSURI.azurewebsites.net/" -AADGroup "MyAADGroupName" + +.EXAMPLE + Add-HPSureAdminEndorsementKeyToKMS -EndorsementKeyFile "$path\endorsement_key.pfx" -EndorsementKeyPassword "pass" -KMSAppName "MyAppName" -AADGroup "MyAADGroupName" +#> +function Add-HPSureAdminEndorsementKeyToKMS { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/add-hpsureadminendorsementkeytokms")] + param( + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 0)] + [System.IO.FileInfo]$EndorsementKeyFile, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $false,Position = 1)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $false,Position = 1)] + [string]$EndorsementKeyPassword, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 3)] + [string]$KMSUri, + + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 3)] + [string]$KMSAppName, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 4)] + [string]$AADGroup, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 5)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 5)] + [string]$KeyName, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $false,Position = 6)] + [switch]$CacheAccessToken + ) + + # only allow https or file paths with or without file:// URL prefix + if ($KMSUri -and -not ($KMSUri.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($KMSUri) -or $KMSUri.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if (-not $KMSUri) { + $KMSUri = "https://$KMSAppName.azurewebsites.net/" + } + if (-not $KMSUri.EndsWith('/')) { + $KMSUri += '/' + } + $KMSUri += 'api/endorsementkeys' + + if ($EndorsementKeyPassword) { + [securestring]$EndorsementKeyPassword = ConvertTo-SecureString -AsPlainText -Force $EndorsementKeyPassword + $cert = (Get-HPPrivatePublicKeyCertificateFromPFX -FileName $EndorsementKeyFile -password $EndorsementKeyPassword).Full + } + else { + $cert = (Get-HPPrivatePublicKeyCertificateFromPFX -FileName $EndorsementKeyFile).Full + } + + $jsonPayload = New-HPPrivateSureAdminEnrollmentJsonType5 -Certificate $cert -AADRevocation $AADGroup -KeyName $KeyName + $accessToken = Get-HPPrivateSureAdminKMSAccessToken -CacheAccessToken:$CacheAccessToken + $response,$responseContent = Send-HPPrivateKMSRequest -KMSUri $KMSUri -JsonPayload $jsonPayload -AccessToken $accessToken + + if ($response -ne "OK") { + Invoke-HPPrivateKMSErrorHandle -ApiResponseContent $responseContent -Status $response + } +} + +<# +.SYNOPSIS + Removes an endorsement key from HP Sure Admin Key Management Service (KMS) + +.DESCRIPTION + This command sends an HTTPS request to remove the endorsement key from the HP Sure Admin Key Management Service (KMS). + The connection with the KMS server requires the user to authenticate with a valid Microsoft account. + +.PARAMETER EndorsementKeyId + Specifies the key id encoded in base64 that is used in the server to locate the key. + Use the Get-HPSureAdminKeyId command to extract the key id from a pfx certificate. + +.PARAMETER KMSAppName + Specifies the application name on Azure KMS server that will be used to compose the URI for uploading the key + +.PARAMETER KMSUri + Specifies the complete URI for uploading the key (I.e.: https://.azurewebsites.net/). This URL must be https. + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Supported on Windows Power Shell v5. + - An HP Sure Admin KMS server is required for using this feature. + +.EXAMPLE + Remove-HPSureAdminEndorsementKeyFromKMS -EndorsementKeyId "" -KMSUri "https://MyKMSURI.azurewebsites.net/" +#> +function Remove-HPSureAdminEndorsementKeyFromKMS { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/remove-hpsureadminendorsementkeyfromkms")] + param( + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 0)] + [string]$EndorsementKeyId, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 1)] + [string]$KMSUri, + + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 1)] + [string]$KMSAppName, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $false,Position = 2)] + [switch]$CacheAccessToken + ) + + # only allow https or file paths with or without file:// URL prefix + if ($KMSUri -and -not ($KMSUri.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($KMSUri) -or $KMSUri.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if (-not $KMSUri) { + $KMSUri = "https://$KMSAppName.azurewebsites.net/" + } + if (-not $KMSUri.EndsWith('/')) { + $KMSUri += '/' + } + $KMSUri += 'api/endorsementkeys' + $KMSUri = "$KMSUri/$EndorsementKeyId" + + $accessToken = Get-HPPrivateSureAdminKMSAccessToken -CacheAccessToken:$CacheAccessToken + $response,$responseContent = Send-HPPrivateKMSRequest -Method 'DELETE' -KMSUri $KMSUri -AccessToken $accessToken + + if ($response -ne "OK") { + Invoke-HPPrivateKMSErrorHandle -ApiResponseContent $responseContent -Status $response + } +} + +<# +.SYNOPSIS + Removes a signing key from HP Sure Admin Key Management Service (KMS) + +.DESCRIPTION + This command sends an HTTPS request to remove the signing key from the HP Sure Admin Key Management Service (KMS). + The connection with the KMS server requires the user to authenticate with a valid Microsoft account. + +.PARAMETER SigningKeyId + Specifies the key id encoded in base64 that is used in the server to locate the key. + Use the Get-HPSureAdminKeyId command to extract the key id from a pfx certificate. + +.PARAMETER KMSUri + Specifies the complete URI for uploading the key (i.e.: https://.azurewebsites.net/). This URL must be https. + +.PARAMETER KMSAppName + Specifies the application name on Azure KMS server that will be used to compose the URI for uploading the key + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Supported on Windows Power Shell v5. + - An HP Sure Admin KMS server is required for using this feature. + +.EXAMPLE + Remove-HPSureAdminSigningKeyFromKMS -SigningKeyId "" -KMSUri "https://MyKMSURI.azurewebsites.net/" +#> +function Remove-HPSureAdminSigningKeyFromKMS { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/remove-hpsureadminsigningkeyfromkms")] + param( + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 0)] + [string]$SigningKeyId, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 1)] + [string]$KMSUri, + + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 1)] + [string]$KMSAppName, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $false,Position = 2)] + [switch]$CacheAccessToken + ) + + # only allow https or file paths with or without file:// URL prefix + if ($KMSUri -and -not ($KMSUri.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($KMSUri) -or $KMSUri.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if (-not $KMSUri) { + $KMSUri = "https://$KMSAppName.azurewebsites.net/" + } + if (-not $KMSUri.EndsWith('/')) { + $KMSUri += '/' + } + $KMSUri += 'api/signingkeys' + $KMSUri = "$KMSUri/$SigningKeyId" + + $accessToken = Get-HPPrivateSureAdminKMSAccessToken -CacheAccessToken:$CacheAccessToken + $response,$responseContent = Send-HPPrivateKMSRequest -Method 'DELETE' -KMSUri $KMSUri -AccessToken $accessToken + + if ($response -ne "OK") { + Invoke-HPPrivateKMSErrorHandle -ApiResponseContent $responseContent -Status $response + } +} + +function Set-HPPrivateSureAdminKMSAccessToken { + param( + [string]$AccessToken + ) + + $path = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath("msalcache.dat") + $AccessToken | Out-File -FilePath $path -Encoding utf8 + Write-Verbose "Access token saved to cache" +} + +<# +.SYNOPSIS + Clears the HP Sure Admin Key Management Service (KMS) access token + +.DESCRIPTION + This command clears the access token that is used for sending keys to HP Sure Admin Key Management Service (KMS). + The token is stored locally in msalcache.dat file when -CacheAccessToken parameter is specified in KMS commands such as the Send-HPSureAdminLocalAccessKeyToKMS command. + +.EXAMPLE + Clear-HPSureAdminKMSAccessToken +#> +function Clear-HPSureAdminKMSAccessToken { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/clear-hpsureadminkmsaccesstoken")] + param( + ) + + $path = [System.IO.Path]::GetTempPath() + "hp/msalcache.dat" + Remove-Item -Path $path -ErrorAction Ignore -Force +} + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateSureAdminKMSAccessToken { + [CmdletBinding()] + param( + [switch]$CacheAccessToken + ) + + [string]$clientId = "40ef700f-b021-4fe4-81fe-b2536e9701c3" + [string]$redirectUri = "http://localhost" + [string[]]$scopes = ("https://graph.microsoft.com/User.Read", "https://graph.microsoft.com/GroupMember.Read.All") + + $clientApplicationBuilder = [Microsoft.Identity.Client.PublicClientApplicationBuilder]::Create($clientId) + [void]$clientApplicationBuilder.WithRedirectUri($redirectUri) + [void]$clientApplicationBuilder.WithClientId($clientId) + $clientApplication = $clientApplicationBuilder.Build() + + if ($CacheAccessToken.IsPresent) { + [TokenCacheHelper]::EnableSerialization($clientApplication.UserTokenCache) + $authenticationResult = $null + try { + Write-Verbose "Trying to acquire token silently" + [Microsoft.Identity.Client.IAccount[]]$accounts = $clientApplication.GetAccountsAsync().GetAwaiter().GetResult() + if ($accounts -and $accounts.Count -gt 0) { + $authenticationResult = $clientApplication.AcquireTokenSilent($scopes,$accounts[0]).ExecuteAsync().GetAwaiter().GetResult() + } + } + catch { + Write-Verbose "AcquireTokenSilent Exception: $($_.Exception)" + } + + if ($authenticationResult) { + return $authenticationResult.AccessToken + } + } + else { + Clear-HPSureAdminKMSAccessToken + } + + # Aquire the access token using the interactive mode + $aquireToken = $clientApplication.AcquireTokenInteractive($scopes) + $parentWindow = [System.Diagnostics.Process]::GetCurrentProcess().MainWindowHandle + [void]$aquireToken.WithParentActivityOrWindow($parentWindow) + + try { + if ($PSEdition -eq 'Core') { + # A timeout of two minutes is defined because netcore version of MSAL cannot detect if the user navigates away or simply closes the browser + $timeout = New-TimeSpan -Minutes 2 + $tokenSource = New-Object System.Threading.CancellationTokenSource + $taskAuthenticationResult = $aquireToken.ExecuteAsync($tokenSource.Token) + $endTime = [datetime]::Now.Add($timeout) + while (!$taskAuthenticationResult.IsCompleted) { + if ([datetime]::Now -lt $endTime) { + Start-Sleep -Seconds 1 + } + else { + $tokenSource.Cancel() + throw [System.TimeoutException]"GetMsalTokenFailureOperationTimeout" + } + } + $authenticationResult = $taskAuthenticationResult.Result + } + else { + $authenticationResult = $aquireToken.ExecuteAsync().GetAwaiter().GetResult() + } + } + catch { + Write-Verbose $_.Exception + if ($_.Exception.innerException -and $_.Exception.innerException.Message) { + throw "Could not retrieve a valid access token: " + $_.Exception.innerException.Message + } + throw "Could not retrieve a valid access token: " + $_.Exception + } + + if (-not $authenticationResult) { + throw "Could not retrieve a valid access token" + } + + return $authenticationResult.AccessToken +} + +<# +.SYNOPSIS + Sets one or multiple device permissions on the HP Sure Admin Key Management Service (KMS) + +.DESCRIPTION + Device permissions allow IT administrators to manage local access of specific devices without having to provision a unique LAK key for each one. + This command sends an HTTPS request for mapping a device serial number to a user email, or to an AAD group. + The connection with the KMS server requires the user to authenticate with a valid Microsoft account. + Existing mappings are modified by the last configuration uploaded. + +.PARAMETER JsonFile + Specifies the path to the Json file containing multiple device permissions. JSON file must be structured as follows: + [{"deviceId":"XYZ321","userEmailAddress":"user@kms.onmicrosoft.com","adGroupName":""}, + {"deviceId":"XYZ123","userEmailAddress":"user@kms.onmicrosoft.com"}, + {"deviceId":"ZYX321","adGroupName":"admins"}, + {"deviceId":"ABC000","userEmailAddress":"user@kms.onmicrosoft.com","adGroupName":"admins"}] + +.PARAMETER KMSAppName + Specifies the application name on Azure KMS server that will be used to compose the URI for uploading the key + +.PARAMETER KMSUri + Specifies the complete URI for uploading the permissions (I.e.: https://.azurewebsites.net/). This URL must be https. + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Supported on Windows Power Shell v5. + - Supported on Windows Power Shell v7. + - An HP Sure Admin KMS server is required for using this feature. + +.EXAMPLE + Set-HPSureAdminDevicePermissions -SerialNumber "XYZ123" -KMSAppName "MyAppName" -UserEmail "myuser@myappname.onmicrosoft.com" + +.EXAMPLE + Set-HPSureAdminDevicePermissions -SerialNumber "XYZ123" -KMSUri "https://MyKMSURI.azurewebsites.net/" -AADGroup "MyAADGroupName" + +.EXAMPLE + Set-HPSureAdminDevicePermissions -JsonFile MyJsonFile.json -KMSAppName "MyAppName" -CacheAccessToken +#> +function Set-HPSureAdminDevicePermissions { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/set-hpsureadmindevicepermissions")] + param( + [Parameter(ParameterSetName = "KMSUriJsonFile",Mandatory = $true,Position = 1)] + [string]$KMSUri, + + [Parameter(ParameterSetName = "KMSAppNameJsonFile",Mandatory = $true,Position = 1)] + [string]$KMSAppName, + + [Parameter(ParameterSetName = "KMSAppNameJsonFile",Mandatory = $true,Position = 2)] + [Parameter(ParameterSetName = "KMSUriJsonFile",Mandatory = $true,Position = 2)] + [System.IO.FileInfo]$JsonFile, + + [Parameter(ParameterSetName = "KMSAppNameJsonFile",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "KMSUriJsonFile",Mandatory = $false,Position = 3)] + [switch]$CacheAccessToken + ) + + # only allow https or file paths with or without file:// URL prefix + if ($KMSUri -and -not ($KMSUri.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($KMSUri) -or $KMSUri.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if (-not $KMSUri) { + $KMSUri = "https://$KMSAppName.azurewebsites.net/" + } + + if (-not $KMSUri.EndsWith('/')) { + $KMSUri += '/' + } + $KMSUri += 'api/devicekeymappings/upload' + + if ($JsonFile) { + $f = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($JsonFile) + [string]$jsonPayload = Get-Content -Raw -Path $f -ErrorAction Stop + } + + $entries = ($jsonPayload | ConvertFrom-Json) + foreach ($entry in $entries) { + if (($entry.PSObject.Properties.Name -match 'userEmailAddress')) { + if ($entry.userEmailAddress -ne '') { + Invoke-HPPrivateValidateEmail -EmailAddress $entry.userEmailAddress + } + } + } + + $accessToken = Get-HPPrivateSureAdminKMSAccessToken -CacheAccessToken:$CacheAccessToken + if ($entries.Count -gt 1) { + $jsonPayload = $entries | ConvertTo-Json -Compress + } + $response,$responseContent = Send-HPPrivateKMSRequest -KMSUri $KMSUri -JsonPayload $jsonPayload -AccessToken $accessToken + + if ($response -ne "OK") { + Invoke-HPPrivateKMSErrorHandle -ApiResponseContent $responseContent -Status $response + } +} + +<# +.SYNOPSIS + Adds one device permissions to HP Sure Admin Key Management Service (KMS) + +.DESCRIPTION + Device permissions allow IT administrators to manage local access of specific devices without having to provision a unique LAK key for each one. + This command sends an HTTPS request for mapping a device serial number to a user email, or to an AAD group. + The connection with the KMS server requires the user to authenticate with a valid Microsoft account. + Existing mappings are modified by the last configuration uploaded. + +.PARAMETER SerialNumber + Specifies the serial number that identifies the device. + +.PARAMETER KMSAppName + Specifies the application name on Azure KMS server that will be used to compose the URI for uploading the key + +.PARAMETER KMSUri + Specifies the complete URI for uploading the permissions (I.e.: https://.azurewebsites.net/). This URL must be https. + +.PARAMETER AADGroup + Specifies the group name in Azure Active Directory that will have access to the key + +.PARAMETER UserEmail + Specifies the user email in Azure Active Directory that will have access to the key + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Supported on Windows Power Shell v5. + - Supported on Windows Power Shell v7. + - An HP Sure Admin KMS server is required for using this feature. + +.EXAMPLE + Add-HPSureAdminDevicePermissions -SerialNumber "XYZ123" -KMSAppName "MyAppName" -UserEmail "myuser@myappname.onmicrosoft.com" + +.EXAMPLE + Add-HPSureAdminDevicePermissions -SerialNumber "XYZ123" -KMSUri "https://MyKMSURI.azurewebsites.net/" -AADGroup "MyAADGroupName" +#> +function Add-HPSureAdminDevicePermissions { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/add-hpsureadmindevicepermissions")] + param( + [Parameter(ParameterSetName = "KMSUriBoth",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "KMSUriAADGroup",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "KMSUriUserEmail",Mandatory = $true,Position = 1)] + [string]$KMSUri, + + [Parameter(ParameterSetName = "KMSAppNameBoth",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "KMSAppNameAADGroup",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "KMSAppNameUserEmail",Mandatory = $true,Position = 1)] + [string]$KMSAppName, + + [Parameter(ParameterSetName = "KMSUriBoth",Mandatory = $true,Position = 2)] + [Parameter(ParameterSetName = "KMSAppNameBoth",Mandatory = $true,Position = 2)] + [Parameter(ParameterSetName = "KMSUriAADGroup",Mandatory = $true,Position = 2)] + [Parameter(ParameterSetName = "KMSAppNameAADGroup",Mandatory = $true,Position = 2)] + [Parameter(ParameterSetName = "KMSUriUserEmail",Mandatory = $true,Position = 2)] + [Parameter(ParameterSetName = "KMSAppNameUserEmail",Mandatory = $true,Position = 2)] + [string]$SerialNumber, + + [Parameter(ParameterSetName = "KMSUriBoth",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "KMSAppNameBoth",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "KMSUriAADGroup",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "KMSAppNameAADGroup",Mandatory = $true,Position = 3)] + [string]$AADGroup, + + [Parameter(ParameterSetName = "KMSUriBoth",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "KMSAppNameBoth",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "KMSUriUserEmail",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "KMSAppNameUserEmail",Mandatory = $true,Position = 3)] + [string]$UserEmail, + + [Parameter(ParameterSetName = "KMSUriBoth",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "KMSAppNameBoth",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "KMSUriAADGroup",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "KMSAppNameAADGroup",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "KMSUriUserEmail",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "KMSAppNameUserEmail",Mandatory = $false,Position = 4)] + [switch]$CacheAccessToken + ) + + # only allow https or file paths with or without file:// URL prefix + if ($KMSUri -and -not ($KMSUri.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($KMSUri) -or $KMSUri.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if (-not $KMSUri) { + $KMSUri = "https://$KMSAppName.azurewebsites.net/" + } + + if (-not $KMSUri.EndsWith('/')) { + $KMSUri += '/' + } + $KMSUri += 'api/devicekeymappings' + + $params = @{ + SerialNumber = $SerialNumber + } + if ($UserEmail) { + Invoke-HPPrivateValidateEmail -EmailAddress $UserEmail + $params.UserEmail = $UserEmail + } + if ($AADGroup) { + $params.AADGroup = $AADGroup + } + [string]$jsonPayload = New-HPPrivateSureAdminDeviceKeyMappingJson @params + + $accessToken = Get-HPPrivateSureAdminKMSAccessToken -CacheAccessToken:$CacheAccessToken + $response,$responseContent = Send-HPPrivateKMSRequest -Method 'POST' -KMSUri $KMSUri -JsonPayload $jsonPayload -AccessToken $accessToken + + if ($response -ne "OK") { + Invoke-HPPrivateKMSErrorHandle -ApiResponseContent $responseContent -Status $response + } +} + +<# +.SYNOPSIS + Edits existing device permissions to HP Sure Admin Key Management Service (KMS) + +.DESCRIPTION + Device permissions allow IT administrators to manage local access of specific devices without having to provision a unique LAK key for each one. + This command sends an HTTPS request for mapping a device serial number to a user email, or to an AAD group. + The connection with the KMS server requires the user to authenticate with a valid Microsoft account. + Existing mappings are modified by the last configuration uploaded. + +.PARAMETER SerialNumber + Specifies the serial number that identifies the device. + +.PARAMETER KMSAppName + Specifies the application name on Azure KMS server that will be used to compose the URI for uploading the key + +.PARAMETER KMSUri + Specifies the complete URI for uploading the permissions (I.e.: https://.azurewebsites.net/). This URL must be https. + +.PARAMETER AADGroup + Specifies the group name in Azure Active Directory that will have access to the key + +.PARAMETER UserEmail + Specifies the user email in Azure Active Directory that will have access to the key + +.PARAMETER eTag + Specifies the eTag informed by the Get-HPSureAdminDevicePermissions command (see examples) + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Supported on Windows Power Shell v5. + - Supported on Windows Power Shell v7. + - An HP Sure Admin KMS server is required for using this feature. + +.EXAMPLE + Edit-HPSureAdminDevicePermissions -SerialNumber "XYZ123" -KMSAppName "MyAppName" -UserEmail "myuser@myappname.onmicrosoft.com" -eTag 'W/"datetime''2021-10-22T15%3A17%3A48.9645833Z''"' + +.EXAMPLE + $entry = Get-HPSureAdminDevicePermissions -KMSAppName 'MyAppName' -SerialNumber 'XYZ123' + Edit-HPSureAdminDevicePermissions -SerialNumber "XYZ123" -KMSUri "https://MyKMSURI.azurewebsites.net/" -AADGroup "MyAADGroupName" -eTag $entry.eTag +#> +function Edit-HPSureAdminDevicePermissions { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/edit-hpsureadmindevicepermissions")] + param( + [Parameter(ParameterSetName = "KMSUriBoth",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "KMSUriAADGroup",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "KMSUriUserEmail",Mandatory = $true,Position = 1)] + [string]$KMSUri, + + [Parameter(ParameterSetName = "KMSAppNameBoth",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "KMSAppNameAADGroup",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "KMSAppNameUserEmail",Mandatory = $true,Position = 1)] + [string]$KMSAppName, + + [Parameter(ParameterSetName = "KMSUriBoth",Mandatory = $true,Position = 2)] + [Parameter(ParameterSetName = "KMSAppNameBoth",Mandatory = $true,Position = 2)] + [Parameter(ParameterSetName = "KMSUriAADGroup",Mandatory = $true,Position = 2)] + [Parameter(ParameterSetName = "KMSAppNameAADGroup",Mandatory = $true,Position = 2)] + [Parameter(ParameterSetName = "KMSUriUserEmail",Mandatory = $true,Position = 2)] + [Parameter(ParameterSetName = "KMSAppNameUserEmail",Mandatory = $true,Position = 2)] + [string]$SerialNumber, + + [Parameter(ParameterSetName = "KMSUriBoth",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "KMSAppNameBoth",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "KMSUriAADGroup",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "KMSAppNameAADGroup",Mandatory = $true,Position = 3)] + [AllowEmptyString()] + [string]$AADGroup, + + [Parameter(ParameterSetName = "KMSUriBoth",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "KMSAppNameBoth",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "KMSUriUserEmail",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "KMSAppNameUserEmail",Mandatory = $true,Position = 3)] + [AllowEmptyString()] + [string]$UserEmail, + + [Parameter(ParameterSetName = "KMSUriBoth",Mandatory = $true,Position = 5)] + [Parameter(ParameterSetName = "KMSAppNameBoth",Mandatory = $true,Position = 5)] + [Parameter(ParameterSetName = "KMSUriAADGroup",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "KMSAppNameAADGroup",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "KMSUriUserEmail",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "KMSAppNameUserEmail",Mandatory = $true,Position = 4)] + [string]$eTag, + + [Parameter(ParameterSetName = "KMSUriBoth",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "KMSAppNameBoth",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "KMSUriAADGroup",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "KMSAppNameAADGroup",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "KMSUriUserEmail",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "KMSAppNameUserEmail",Mandatory = $false,Position = 5)] + [switch]$CacheAccessToken + ) + + # only allow https or file paths with or without file:// URL prefix + if ($KMSUri -and -not ($KMSUri.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($KMSUri) -or $KMSUri.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if (-not $KMSUri) { + $KMSUri = "https://$KMSAppName.azurewebsites.net/" + } + + if (-not $KMSUri.EndsWith('/')) { + $KMSUri += '/' + } + $KMSUri += 'api/devicekeymappings' + $KMSUri = "$KMSUri/$SerialNumber" + + $params = @{ + eTag = $eTag + } + if ($PSBoundParameters.ContainsKey('UserEmail')) { + if ($UserEmail -ne '') { + Invoke-HPPrivateValidateEmail -EmailAddress $UserEmail + } + $params.UserEmail = $UserEmail + } + if ($PSBoundParameters.ContainsKey('AADGroup')) { + $params.AADGroup = $AADGroup + } + [string]$jsonPayload = New-HPPrivateSureAdminDeviceKeyMappingJson @params + + $accessToken = Get-HPPrivateSureAdminKMSAccessToken -CacheAccessToken:$CacheAccessToken + $response,$responseContent = Send-HPPrivateKMSRequest -Method 'PUT' -KMSUri $KMSUri -JsonPayload $jsonPayload -AccessToken $accessToken + + if ($response -ne "OK") { + Invoke-HPPrivateKMSErrorHandle -ApiResponseContent $responseContent -Status $response + } +} + +function Invoke-HPPrivateValidateEmail { + [CmdletBinding()] + param( + [string]$EmailAddress + ) + + try { + New-Object System.Net.Mail.MailAddress ($EmailAddress) | Out-Null + } + catch { + throw "Invalid user email address: $EmailAddress" + } + + if (-not ($EmailAddress -match '^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$')) { + throw "Invalid user email address: $EmailAddress" + } + + return +} + +function New-HPPrivateSureAdminDeviceKeyMappingJson { + [CmdletBinding()] + param( + [string]$SerialNumber, + [string]$UserEmail, + [string]$AADGroup, + $ContinuationToken, + [string]$eTag + ) + + $data = [ordered]@{} + + if ($SerialNumber) { + $data.deviceId = $SerialNumber + } + + if ($PSBoundParameters.ContainsKey('UserEmail')) { + $data.userEmailAddress = $UserEmail + } + + if ($PSBoundParameters.ContainsKey('AADGroup')) { + $data.adGroupName = $AADGroup + } + + if ($eTag) { + $data.eTag = $eTag + } + + if ($ContinuationToken) { + $data.continuationToken = $ContinuationToken + } + + $json = $data | ConvertTo-Json -Compress + return $json +} + +<# +.SYNOPSIS + Retrieves the device permissions from the HP Sure Admin Key Management Service (KMS) + +.DESCRIPTION + Device permissions allow IT administrators to manage local access of specific devices without having to provision a unique LAK key for each one. + This command retrieves from KMS the permissions set for the specified device serial number. + The connection with the KMS server requires the user to authenticate with a valid Microsoft account. + +.PARAMETER SerialNumber + Specifies the serial number that identifies the device + +.PARAMETER KMSAppName + Specifies the application name on Azure KMS server that will be used to compose the URI for uploading the key + +.PARAMETER KMSUri + Specifies the complete URI for uploading the permissions (I.e.: https://.azurewebsites.net/). This URL must be https. + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Supported on Windows Power Shell v5. + - Supported on Windows Power Shell v7. + - An HP Sure Admin KMS server is required for using this feature. + +.EXAMPLE + Get-HPSureAdminDevicePermissions -SerialNumber "XYZ123" -KMSAppName "MyAppName" + +.EXAMPLE + Get-HPSureAdminDevicePermissions -SerialNumber "XYZ123" -KMSAppName "MyAppName" -CacheAccessToken +#> +function Get-HPSureAdminDevicePermissions { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/get-hpsureadmindevicepermissions")] + param( + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 1)] + [string]$KMSUri, + + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 1)] + [string]$KMSAppName, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 2)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 2)] + [string]$SerialNumber, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $false,Position = 3)] + [switch]$CacheAccessToken + ) + + # only allow https or file paths with or without file:// URL prefix + if ($KMSUri -and -not ($KMSUri.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($KMSUri) -or $KMSUri.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if (-not $KMSUri) { + $KMSUri = "https://$KMSAppName.azurewebsites.net/" + } + + if (-not $KMSUri.EndsWith('/')) { + $KMSUri += '/' + } + $KMSUri += 'api/devicekeymappings' + $KMSUri = "$KMSUri/$SerialNumber" + + $accessToken = Get-HPPrivateSureAdminKMSAccessToken -CacheAccessToken:$CacheAccessToken + $response,$responseContent = Send-HPPrivateKMSRequest -KMSUri $KMSUri -Method "GET" -AccessToken $accessToken + + if ($response -ne "OK") { + Invoke-HPPrivateKMSErrorHandle -ApiResponseContent $responseContent -Status $response + } + + $responseContent | ConvertFrom-Json +} + +<# +.SYNOPSIS + Searches device permissions on HP Sure Admin Key Management Service (KMS) + +.DESCRIPTION + Device permissions allow IT administrators to manage local access of specific devices without having to provision a unique LAK key for each one. + This command retrieves from KMS the permissions set for the specified device serial number. + The connection with the KMS server requires the user to authenticate with a valid Microsoft account. + +.PARAMETER SerialNumber + Specifies the serial number that identifies the device + +.PARAMETER KMSAppName + Specifies the application name on Azure KMS server that will be used to compose the URI for uploading the key + +.PARAMETER KMSUri + Specifies the complete URI for uploading the permissions (I.e.: https://.azurewebsites.net/). This URL must be https. + +.PARAMETER AADGroup + Specifies the group name in Azure Active Directory that will have access to the key + +.PARAMETER UserEmail + Specifies the user email in Azure Active Directory that will have access to the key + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Supported on Windows Power Shell v5. + - Supported on Windows Power Shell v7. + - An HP Sure Admin KMS server is required for using this feature. + +.EXAMPLE + Search-HPSureAdminDevicePermissions -SerialNumber "XYZ123" -KMSAppName "MyAppName" + +.EXAMPLE + Search-HPSureAdminDevicePermissions -SerialNumber "XYZ123" -KMSAppName "MyAppName" -CacheAccessToken +#> +function Search-HPSureAdminDevicePermissions { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/search-hpsureadmindevicepermissions")] + param( + [Parameter(ParameterSetName = "KMSUriBoth",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "KMSUriAADGroup",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "KMSUriUserEmail",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "KMSUriSerialNumber",Mandatory = $true,Position = 1)] + [string]$KMSUri, + + [Parameter(ParameterSetName = "KMSAppNameBoth",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "KMSAppNameAADGroup",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "KMSAppNameUserEmail",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "KMSAppNameSerialNumber",Mandatory = $true,Position = 1)] + [string]$KMSAppName, + + [Parameter(ParameterSetName = "KMSUriBoth",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "KMSAppNameBoth",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "KMSUriAADGroup",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "KMSAppNameAADGroup",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "KMSUriUserEmail",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "KMSAppNameUserEmail",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "KMSUriSerialNumber",Mandatory = $true,Position = 2)] + [Parameter(ParameterSetName = "KMSAppNameSerialNumber",Mandatory = $true,Position = 2)] + [string]$SerialNumber, + + [Parameter(ParameterSetName = "KMSUriBoth",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "KMSAppNameBoth",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "KMSUriAADGroup",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "KMSAppNameAADGroup",Mandatory = $true,Position = 3)] + [string]$AADGroup, + + [Parameter(ParameterSetName = "KMSUriBoth",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "KMSAppNameBoth",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "KMSUriUserEmail",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "KMSAppNameUserEmail",Mandatory = $true,Position = 3)] + [string]$UserEmail, + + [Parameter(ParameterSetName = "KMSUriBoth",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "KMSAppNameBoth",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "KMSUriAADGroup",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "KMSAppNameAADGroup",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "KMSUriUserEmail",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "KMSAppNameUserEmail",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "KMSUriSerialNumber",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "KMSAppNameSerialNumber",Mandatory = $true,Position = 3)] + [switch]$CacheAccessToken + ) + + # only allow https or file paths with or without file:// URL prefix + if ($KMSUri -and -not ($KMSUri.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($KMSUri) -or $KMSUri.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if (-not $KMSUri) { + $KMSUri = "https://$KMSAppName.azurewebsites.net/" + } + + if (-not $KMSUri.EndsWith('/')) { + $KMSUri += '/' + } + $KMSUri += 'api/devicekeymappings/search' + + $params = @{} + if ($SerialNumber) { + $params.SerialNumber = $SerialNumber + } + if ($UserEmail) { + $params.UserEmail = $UserEmail + } + if ($AADGroup) { + $params.AADGroup = $AADGroup + } + + do { + [string]$jsonPayload = New-HPPrivateSureAdminDeviceKeyMappingJson @params + $accessToken = Get-HPPrivateSureAdminKMSAccessToken -CacheAccessToken:$CacheAccessToken + $response,$responseContent = Send-HPPrivateKMSRequest -Method 'POST' -KMSUri $KMSUri -JsonPayload $jsonPayload -AccessToken $accessToken + + if ($response -ne "OK") { + Invoke-HPPrivateKMSErrorHandle -ApiResponseContent $responseContent -Status $response + } + + $response = ($responseContent | ConvertFrom-Json) + $response.deviceKeyMappings + + $params.continuationToken = $response.continuationToken + } while ($response.continuationToken) +} + +<# +.SYNOPSIS + Removes a device permission from the HP Sure Admin Key Management Service (KMS) + +.DESCRIPTION + This command removes a device permission from the HP Sure Admin Key Management Service (KMS). Device permissions allow IT administrators to manage local access of specific devices without having to provision a unique LAK key for each device. + This command removes the permissions set for the device specified via its serial number from KMS. + The connection with the KMS server requires the user to authenticate with a valid Microsoft account. + +.PARAMETER SerialNumber + Specifies the serial number that identifies the device + +.PARAMETER KMSAppName + Specifies the application name on Azure KMS server that will be used to compose the URI for uploading the key + +.PARAMETER KMSUri + Specifies the complete URI for uploading the permissions (I.e.: https://.azurewebsites.net/). This URL must be https. + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Supported on Windows Power Shell v5. + - Supported on Windows Power Shell v7. + - An HP Sure Admin KMS server is required for using this feature. + +.EXAMPLE + Remove-HPSureAdminDevicePermissions -SerialNumber "XYZ123" -KMSAppName "MyAppName" + +.EXAMPLE + Remove-HPSureAdminDevicePermissions -SerialNumber "XYZ123" -KMSAppName "MyAppName" -CacheAccessToken +#> +function Remove-HPSureAdminDevicePermissions { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/remove-hpsureadmindevicepermissions")] + param( + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 1)] + [string]$KMSUri, + + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 1)] + [string]$KMSAppName, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $true,Position = 2)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $true,Position = 2)] + [string]$SerialNumber, + + [Parameter(ParameterSetName = "KMSUri",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "KMSAppName",Mandatory = $false,Position = 3)] + [switch]$CacheAccessToken + ) + + # only allow https or file paths with or without file:// URL prefix + if ($KMSUri -and -not ($KMSUri.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($KMSUri) -or $KMSUri.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if (-not $KMSUri) { + $KMSUri = "https://$KMSAppName.azurewebsites.net/" + } + + if (-not $KMSUri.EndsWith('/')) { + $KMSUri += '/' + } + $KMSUri += 'api/devicekeymappings' + $KMSUri = "$KMSUri/$SerialNumber" + + $accessToken = Get-HPPrivateSureAdminKMSAccessToken -CacheAccessToken:$CacheAccessToken + $response,$responseContent = Send-HPPrivateKMSRequest -KMSUri $KMSUri -Method "DELETE" -AccessToken $accessToken + + if ($response -ne "OK") { + Invoke-HPPrivateKMSErrorHandle -ApiResponseContent $responseContent -Status $response + } +} + +function New-HPPrivateQRCode { + param( + [string]$Data, + [System.IO.FileInfo]$OutputFile, + [ValidateSet('Jpeg','Bmp','Png','Svg')] + [string]$Format = "Jpeg", + [ValidateSet('None','Text','Default')] + [string]$ViewAs = "Default" + ) + + [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") + + $QRCode = [System.Byte[]]::CreateInstance([System.Byte],3918) + switch (Test-OSBitness) { + 32 { $result = [DfmNativeQRCode]::create_qrcode32($data,$QRCode) } + 64 { $result = [DfmNativeQRCode]::create_qrcode64($data,$QRCode) } + } + + $width = $height = $QRCode[0] + $RGBBuffer = Convert-HPPrivateQRCodeToRGBBuffer -QRCode $QRCode + + [System.Drawing.Image]$img = New-HPPrivateImageFromRGBBuffer -RGBBuffer $RGBBuffer -Width $width -Height $height + [System.Drawing.Image]$newImg = New-HPPrivateImageScale -Image $img -Width 250 -Height 250 -Border 10 + $img.Dispose() + + $path = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($OutputFile) + if ($ViewAs -eq "Default" -and $OutputFile -eq $null) + { + $temp = [string][math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s")) + "." + $Format + $path = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($temp) + } + + if ($OutputFile -or $ViewAs -eq "Default") { + if ($Format -eq "Svg") { + Invoke-HPPrivateWriteQRCodeToSvgFile -QRCode $QRCode -Path $path + } + else { + $newImg.Save($path,[System.Drawing.Imaging.ImageFormat]::$Format) + } + } + + if ($ViewAs) { + if ($ViewAs -eq "Text") { + Invoke-HPPrivateWriteSmallQRCodeToConsole -QRCode $QRCode + } + elseif ($ViewAs -eq "Default") { + Start-Process $path + Write-Host "The file $path contains sensitive information; please delete it once you have scanned with HP Sure Admin phone app" + if ($OutputFile -eq $null) { + Start-Sleep -Seconds 5 + Remove-Item -Path $path -ErrorAction Ignore -Force + Write-Host "The file was deleted; please specify an -OutputFile to keep it" + } + } + } + + $newImg.Dispose() +} + +function Get-HPPrivateQRCodeModule { + param( + [byte[]]$QRCode, + [int]$X, + [int]$Y + ) + + $size = $QRCode[0] + if (0 -le $X -and $X -lt $size -and 0 -le $Y -and $Y -lt $size) { + $index = $Y * $size + $X; + $k = $QRCode[(($index -shr 3) + 1)] + $i = $index -band 7 + if ((($k -shr $i) -band 1) -ne 0) { + return $true + } + } + + return $false +} + +function Convert-HPPrivateQRCodeToRGBBuffer { + param( + [byte[]]$QRCode + ) + + $len = $QRCode[0] + $channels = 3 + $size = $len * $len * $channels #RGB color channels + [byte[]]$RGBBuffer = [byte[]]::CreateInstance([byte],$size) + for ($y = 0; $y -lt $len; $y++) { + for ($x = 0; $x -lt $len; $x++) { + $index = (($x * $len) + $y) * $channels + if ((Get-HPPrivateQRCodeModule -QRCode $QRCode -X $x -Y $y) -eq $false) { + $RGBBuffer[$index + 0] = 0xFF + $RGBBuffer[$index + 1] = 0xFF + $RGBBuffer[$index + 2] = 0xFF + } + } + } + + return $RGBBuffer +} + +function Invoke-HPPrivateWriteSmallQRCodeToConsole { + param( + [byte[]]$QRCode + ) + + $white = ([char]0x2588) + $black = ' ' + $whiteBlack = ([char]0x2580) + $blackWhite = ([char]0x2584) + + $size = $QRCode[0] + Write-Host "`n" + + Write-Host -NoNewline " " + for ($x = 0; $x -lt $size + 2; $x++) { + Write-Host -NoNewline $blackWhite + } + Write-Host "" + + for ($y = 0; $y -lt $size; $y += 2) { + Write-Host -NoNewline " " + for ($x = -1; $x -lt $size + 1; $x++) { + if (-not (Get-HPPrivateQRCodeModule -QRCode $QRCode -X $x -Y $y) -and + -not (Get-HPPrivateQRCodeModule -QRCode $QRCode -X $x -Y ($y + 1))) { + Write-Host -NoNewline $white + } + elseif (-not (Get-HPPrivateQRCodeModule -QRCode $QRCode -X $x -Y $y) -and + (Get-HPPrivateQRCodeModule -QRCode $QRCode -X $x -Y ($y + 1))) { + Write-Host -NoNewline $whiteBlack + } + elseif ((Get-HPPrivateQRCodeModule -QRCode $QRCode -X $x -Y $y) -and + -not (Get-HPPrivateQRCodeModule -QRCode $QRCode -X $x -Y ($y + 1))) { + Write-Host -NoNewline $blackWhite + } + else { + Write-Host -NoNewline $black + } + } + Write-Host "" + } + Write-Host "`n" +} + +function Invoke-HPPrivateWriteQRCodeToSvgFile { + param( + [byte[]]$QRCode, + [string]$Path + ) + + $border = 2 + $size = $QRCode[0] + $content = ('' + + '' + + '' + + '' + + '' + + '') + + $content | Out-File -FilePath $Path -Encoding utf8 +} + +function New-HPPrivateImageScale { + param( + [System.Drawing.Image]$Image, + [int]$Width, + [int]$Height, + [int]$Border = 10 + ) + + $newImage = New-Object System.Drawing.Bitmap (($Width + $border * 2),($Height + $border * 2),[System.Drawing.Imaging.PixelFormat]::Format24bppRgb) + $graphics = [System.Drawing.Graphics]::FromImage($newImage) + $graphics.Clear([System.Drawing.Color]::White) + $graphics.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::NearestNeighbor + $graphics.PixelOffsetMode = [System.Drawing.Drawing2D.PixelOffsetMode]::Half + $graphics.DrawImage($Image,$border,$border,$Width,$Height) + $graphics.Flush() + $graphics.Dispose() + + return $newImage +} + +function New-HPPrivateImageFromRGBBuffer { + param( + [byte[]]$RGBBuffer, + [int]$Width, + [int]$Height, + [int]$Border = 10 + ) + + $img = New-Object System.Drawing.Bitmap ($Width,$Height,[System.Drawing.Imaging.PixelFormat]::Format24bppRgb) + $rect = New-Object System.Drawing.Rectangle (0,0,$img.Width,$img.Height) + $bmpData = $img.LockBits($rect,[System.Drawing.Imaging.ImageLockMode]::ReadWrite,$img.PixelFormat) + $bufferStride = $img.Width * 3 + $targetStride = $bmpData.Stride + $imgPtr = $bmpData.Scan0.ToInt64() + + for ($y = 0; $y -lt $img.Height; $y++) { + [System.Runtime.InteropServices.Marshal]::Copy($RGBBuffer,$y * $bufferStride,[IntPtr]($imgPtr + $y * $targetStride),$bufferStride) + } + $img.UnlockBits($bmpData) + + return $img +} + +function Get-HPPrivateConsoleFontSize { + param() + + $width = 0 + switch (Test-OSBitness) { + 32 { $width = [DfmNativeQRCode]::get_console_font_width32() } + 64 { $width = [DfmNativeQRCode]::get_console_font_width64() } + } + + $height = 0 + switch (Test-OSBitness) { + 32 { $height = [DfmNativeQRCode]::get_console_font_height32() } + 64 { $height = [DfmNativeQRCode]::get_console_font_height64() } + } + + return $width,$height +} + +function Get-HPPrivateScreenScale { + param() + + $result = 0 + switch (Test-OSBitness) { + 32 { $result = [DfmNativeQRCode]::get_screen_scale32() } + 64 { $result = [DfmNativeQRCode]::get_screen_scale64() } + } + + return $result +} + +# SIG # Begin signature block +# MIIoHQYJKoZIhvcNAQcCoIIoDjCCKAoCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDVxlDYP+FOBybX +# H3Zc1PjbJJ8mGmsHDl6QpAsHwXcgOqCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6TCCGeUCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIOaD7KQi +# yQZTvogPBDoG2BDUw5x7HaEXP20Tgk9Mu/dVMA0GCSqGSIb3DQEBAQUABIIBgFOe +# zMDg80Hi++idUN2xB2FJeWB8ZOp145A55kUs5xh1VHSgS5kjVg3DKzBF7lk8LHoQ +# Oe7vlMmRx/lyxNrhwDUVo4JiWTS6CognIo+UZlgnkEyTXcc2Gy7fyofTfF1Ln16t +# x0ESbS8rl7Q8/v1WizMg+PcplwkKrWPUaTrtP9mexJtzMmBiS3wgDSW4p7e0Hurk +# aTh+BlGtUnWRryxZVtLFCQnMR0TLcsX4cujI+uADwoMnVWlqB7HdtaBKuN3Qq1jk +# dO73oonxqjqHSAlcJPcFqSSBKpJ0kcyQ6Am2wh2Istnhq8jKYs2ewi2osT5PweNT +# g+/ISKXnNKjoSjJXmCDiB+MsD9nxa1HlWJ3iWt4aCOyxrP139nl9yUrBnZaMgRXc +# OKuUJZYY2YJ4a0hvxKUs43anj/C00XRKOU+z7b+TucBg79GkssKAqdCK7HBeJJ1g +# 7A5o2AepSB+gOrapUImmWTOhCfLZSMWPrfVeCd0tdCh6fR6QrAivz0H/Mvi24KGC +# Fz8wghc7BgorBgEEAYI3AwMBMYIXKzCCFycGCSqGSIb3DQEHAqCCFxgwghcUAgED +# MQ8wDQYJYIZIAWUDBAIBBQAwdwYLKoZIhvcNAQkQAQSgaARmMGQCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCA7L9Oin02fvi0MC/v7BTYHlO/0z7v4sxHN +# HNEWqlmkgQIQI1vHTOixmzWfBQLx9Jy+VBgPMjAyNDA4MjcxNjU1NTBaoIITCTCC +# BsIwggSqoAMCAQICEAVEr/OUnQg5pr/bP1/lYRYwDQYJKoZIhvcNAQELBQAwYzEL +# MAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJE +# aWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBD +# QTAeFw0yMzA3MTQwMDAwMDBaFw0zNDEwMTMyMzU5NTlaMEgxCzAJBgNVBAYTAlVT +# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEgMB4GA1UEAxMXRGlnaUNlcnQgVGlt +# ZXN0YW1wIDIwMjMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjU0WH +# HYOOW6w+VLMj4M+f1+XS512hDgncL0ijl3o7Kpxn3GIVWMGpkxGnzaqyat0QKYoe +# YmNp01icNXG/OpfrlFCPHCDqx5o7L5Zm42nnaf5bw9YrIBzBl5S0pVCB8s/LB6Yw +# aMqDQtr8fwkklKSCGtpqutg7yl3eGRiF+0XqDWFsnf5xXsQGmjzwxS55DxtmUuPI +# 1j5f2kPThPXQx/ZILV5FdZZ1/t0QoRuDwbjmUpW1R9d4KTlr4HhZl+NEK0rVlc7v +# CBfqgmRN/yPjyobutKQhZHDr1eWg2mOzLukF7qr2JPUdvJscsrdf3/Dudn0xmWVH +# VZ1KJC+sK5e+n+T9e3M+Mu5SNPvUu+vUoCw0m+PebmQZBzcBkQ8ctVHNqkxmg4ho +# Yru8QRt4GW3k2Q/gWEH72LEs4VGvtK0VBhTqYggT02kefGRNnQ/fztFejKqrUBXJ +# s8q818Q7aESjpTtC/XN97t0K/3k0EH6mXApYTAA+hWl1x4Nk1nXNjxJ2VqUk+tfE +# ayG66B80mC866msBsPf7Kobse1I4qZgJoXGybHGvPrhvltXhEBP+YUcKjP7wtsfV +# x95sJPC/QoLKoHE9nJKTBLRpcCcNT7e1NtHJXwikcKPsCvERLmTgyyIryvEoEyFJ +# UX4GZtM7vvrrkTjYUQfKlLfiUKHzOtOKg8tAewIDAQABo4IBizCCAYcwDgYDVR0P +# AQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# IAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQYMBaAFLoW +# 2W1NhS9zKXaaL3WMaiCPnshvMB0GA1UdDgQWBBSltu8T5+/N0GSh1VapZTGj3tXj +# STBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln +# aUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3JsMIGQ +# BggrBgEFBQcBAQSBgzCBgDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl +# cnQuY29tMFgGCCsGAQUFBzAChkxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v +# RGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3J0 +# MA0GCSqGSIb3DQEBCwUAA4ICAQCBGtbeoKm1mBe8cI1PijxonNgl/8ss5M3qXSKS +# 7IwiAqm4z4Co2efjxe0mgopxLxjdTrbebNfhYJwr7e09SI64a7p8Xb3CYTdoSXej +# 65CqEtcnhfOOHpLawkA4n13IoC4leCWdKgV6hCmYtld5j9smViuw86e9NwzYmHZP +# VrlSwradOKmB521BXIxp0bkrxMZ7z5z6eOKTGnaiaXXTUOREEr4gDZ6pRND45Ul3 +# CFohxbTPmJUaVLq5vMFpGbrPFvKDNzRusEEm3d5al08zjdSNd311RaGlWCZqA0Xe +# 2VC1UIyvVr1MxeFGxSjTredDAHDezJieGYkD6tSRN+9NUvPJYCHEVkft2hFLjDLD +# iOZY4rbbPvlfsELWj+MXkdGqwFXjhr+sJyxB0JozSqg21Llyln6XeThIX8rC3D0y +# 33XWNmdaifj2p8flTzU8AL2+nCpseQHc2kTmOt44OwdeOVj0fHMxVaCAEcsUDH6u +# vP6k63llqmjWIso765qCNVcoFstp8jKastLYOrixRoZruhf9xHdsFWyuq69zOuhJ +# RrfVf8y2OMDY7Bz1tqG4QyzfTkx9HmhwwHcK1ALgXGC7KP845VJa1qwXIiNO9OzT +# F/tQa/8Hdx9xl0RBybhG02wyfFgvZ0dl5Rtztpn5aywGRu9BHvDwX+Db2a2QgESv +# gBBBijCCBq4wggSWoAMCAQICEAc2N7ckVHzYR6z9KGYqXlswDQYJKoZIhvcNAQEL +# BQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UE +# CxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBS +# b290IEc0MB4XDTIyMDMyMzAwMDAwMFoXDTM3MDMyMjIzNTk1OVowYzELMAkGA1UE +# BhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2Vy +# dCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMaGNQZJs8E9cklRVcclA8TykTep +# l1Gh1tKD0Z5Mom2gsMyD+Vr2EaFEFUJfpIjzaPp985yJC3+dH54PMx9QEwsmc5Zt +# +FeoAn39Q7SE2hHxc7Gz7iuAhIoiGN/r2j3EF3+rGSs+QtxnjupRPfDWVtTnKC3r +# 07G1decfBmWNlCnT2exp39mQh0YAe9tEQYncfGpXevA3eZ9drMvohGS0UvJ2R/dh +# gxndX7RUCyFobjchu0CsX7LeSn3O9TkSZ+8OpWNs5KbFHc02DVzV5huowWR0QKfA +# csW6Th+xtVhNef7Xj3OTrCw54qVI1vCwMROpVymWJy71h6aPTnYVVSZwmCZ/oBpH +# IEPjQ2OAe3VuJyWQmDo4EbP29p7mO1vsgd4iFNmCKseSv6De4z6ic/rnH1pslPJS +# lRErWHRAKKtzQ87fSqEcazjFKfPKqpZzQmiftkaznTqj1QPgv/CiPMpC3BhIfxQ0 +# z9JMq++bPf4OuGQq+nUoJEHtQr8FnGZJUlD0UfM2SU2LINIsVzV5K6jzRWC8I41Y +# 99xh3pP+OcD5sjClTNfpmEpYPtMDiP6zj9NeS3YSUZPJjAw7W4oiqMEmCPkUEBID +# fV8ju2TjY+Cm4T72wnSyPx4JduyrXUZ14mCjWAkBKAAOhFTuzuldyF4wEr1GnrXT +# drnSDmuZDNIztM2xAgMBAAGjggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBS6FtltTYUvcyl2mi91jGogj57IbzAfBgNVHSMEGDAWgBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUH +# AwgwdwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp +# Y2VydC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv +# bS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0 +# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3Js +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsF +# AAOCAgEAfVmOwJO2b5ipRCIBfmbW2CFC4bAYLhBNE88wU86/GPvHUF3iSyn7cIoN +# qilp/GnBzx0H6T5gyNgL5Vxb122H+oQgJTQxZ822EpZvxFBMYh0MCIKoFr2pVs8V +# c40BIiXOlWk/R3f7cnQU1/+rT4osequFzUNf7WC2qk+RZp4snuCKrOX9jLxkJods +# kr2dfNBwCnzvqLx1T7pa96kQsl3p/yhUifDVinF2ZdrM8HKjI/rAJ4JErpknG6sk +# HibBt94q6/aesXmZgaNWhqsKRcnfxI2g55j7+6adcq/Ex8HBanHZxhOACcS2n82H +# hyS7T6NJuXdmkfFynOlLAlKnN36TU6w7HQhJD5TNOXrd/yVjmScsPT9rp/Fmw0HN +# T7ZAmyEhQNC3EyTN3B14OuSereU0cZLXJmvkOHOrpgFPvT87eK1MrfvElXvtCl8z +# OYdBeHo46Zzh3SP9HSjTx/no8Zhf+yvYfvJGnXUsHicsJttvFXseGYs2uJPU5vIX +# mVnKcPA3v5gA3yAWTyf7YGcWoWa63VXAOimGsJigK+2VQbc61RWYMbRiCQ8KvYHZ +# E/6/pNHzV9m8BPqC3jLfBInwAM1dwvnQI38AC+R2AibZ8GV2QqYphwlHK+Z/GqSF +# D/yYlvZVVCsfgPrA8g4r5db7qS9EFUrnEw4d2zc4GqEr9u3WfPwwggWNMIIEdaAD +# AgECAhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYT +# AlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2Vy +# dC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0y +# MjA4MDEwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYD +# VQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAf +# BgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEB +# BQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4Smn +# PVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6f +# qVcWWVVyr2iTcMKyunWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O +# 7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZ +# Vu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4F +# fYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLm +# qaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMre +# Sx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/ch +# srIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+U +# DCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xM +# dT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUb +# AgMBAAGjggE6MIIBNjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAO +# BgNVHQ8BAf8EBAMCAYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRw +# Oi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRz +# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0f +# BD4wPDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNz +# dXJlZElEUm9vdENBLmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEM +# BQADggEBAHCgv0NcVec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLt +# pIh3bb0aFPQTSnovLbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouy +# XtTP0UNEm0Mh65ZyoUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jS +# TEAZNUZqaVSwuKFWjuyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAc +# AgPLILCsWKAOQGPFmCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2 +# h5b9W9FcrBjDTZ9ztwGpn1eqXijiuZQxggN2MIIDcgIBATB3MGMxCzAJBgNVBAYT +# AlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQg +# VHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OU +# nQg5pr/bP1/lYRYwDQYJYIZIAWUDBAIBBQCggdEwGgYJKoZIhvcNAQkDMQ0GCyqG +# SIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNDA4MjcxNjU1NTBaMCsGCyqGSIb3 +# DQEJEAIMMRwwGjAYMBYEFGbwKzLCwskPgl3OqorJxk8ZnM9AMC8GCSqGSIb3DQEJ +# BDEiBCC0vWzSIzJR9OXzlHdQdd6YGnu7JNaqZ32cCqs81d2NSTA3BgsqhkiG9w0B +# CRACLzEoMCYwJDAiBCDS9uRt7XQizNHUQFdoQTZvgoraVZquMxavTRqa1Ax4KDAN +# BgkqhkiG9w0BAQEFAASCAgBExhx2ox7404c8Jt9f2IU3D6Y2w0g8UXs73DTmFlDl +# QlEsk2CQZ13baWga5cY9towmqcnqL992PpdzKP9IHimwE8LtVkJuWHyww9/qLKTK +# Mv3whmtq9yKgsv/U5QbMdVNFBcCQPi29OSrX4mgHn8faUc2LEUGvrC4wMgRRMc54 +# KEvWaLRwblOaClAr9d05LXWe4tQLUYfwh9BXB48qtiJZt77jZhmpiiVforYW+unM +# fXR9uokoNR6c64I4UrANaF9B3U/uVmKuNb0g5YPSnHIPPPPkdwpT5RNZEsh6WlzA +# LT5lGXiSfIEVzDto56rURwdERl/e1mLZw4E+c2sXh6opNGfHxpgOVFxaYy2KDfDQ +# ULwFHtnARWMzDr27Uj4O4mebvzUZ45i9Qh7VcG9Oekf9jiADyqH/335/8PsVSLoO +# HJwgrrB2t2bhRtV4WrZHFNnWArbh3PXrtKpLSmKUQfz837dcK09MfnCAr3QCiNKe +# DfmJJWKDn/QtCbyxYnZ8GxoeTvVeWGbpboFJU3pwh5814yHaaNhuKiMq6IWV/1u9 +# GkiS6cSE/gl2IydpwZNmV5dWfKbrJ8WwqKzJ4f3slJTscpsGmri5Is1dtv774CQb +# fX7acidpiZ8iqJo7SSnaD//DSXenY9iWJOj4VtkTiXj6QRswQvq2wWiuYrjBbTSa +# CQ== +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Firmware/HP.Firmware.SureRecover.psm1 b/Bios-Update-HP-v2.0/module/HP.Firmware/HP.Firmware.SureRecover.psm1 new file mode 100644 index 0000000..0d14171 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Firmware/HP.Firmware.SureRecover.psm1 @@ -0,0 +1,1712 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + +using namespace HP.CMSLHelper + +Set-StrictMode -Version 3.0 +$ErrorActionPreference = 'Stop' +#requires -Modules "HP.Private" + +# CMSL is normally installed in C:\Program Files\WindowsPowerShell\Modules +# but if installed via PSGallery and via PS7, it is installed in a different location +if (Test-Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll") { + Add-Type -Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll" +} +else{ + Add-Type -Path "$PSScriptRoot\..\..\HP.Private\1.7.2\HP.CMSLHelper.dll" +} + +[Flags()] enum DeprovisioningTarget{ + AgentProvisioning = 1 + OSImageProvisioning = 2 + ConfigurationData = 4 + TriggerRecoveryData = 8 + ScheduleRecoveryData = 16 +} + + +# Converts a BIOS value to a boolean +function ConvertValue { + param($value) + if ($value -eq "Enable" -or $value -eq "Yes") { return $true } + $false +} + + +<# +.SYNOPSIS + Retrieves the current state of the HP Sure Recover feature + +.DESCRIPTION + This command retrieves the current state of the HP Sure Recover feature. + + Refer to the New-HPSureRecoverConfigurationPayload command for more information on how to configure HP Sure Recover. + +.PARAMETER All + If specified, the output includes the OS Recovery Image and the OS Recovery Agent configuration. + +.NOTES + - Requires HP BIOS with HP Sure Recover support. + - This command requires elevated privileges. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.LINK + [Blog post: Provisioning and Configuring HP Sure Recover with HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/provisioning-and-configuring-hp-sure-recover-hp-client-management-script-library) + +.EXAMPLE + Get-HPSureRecoverState +#> +function Get-HPSureRecoverState +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPSureRecoverState")] + param([switch]$All) + $mi_result = 0 + $data = New-Object -TypeName surerecover_state_t + $c = '[DfmNativeSureRecover]::get_surerecover_state' + (Test-OSBitness) + '([ref]$data,[ref]$mi_result);' + $result = Invoke-Expression -Command $c + Test-HPPrivateCustomResult -result 0x80000711 -mi_result $mi_result -Category 0x05 -Verbose:$VerbosePreference + + $fixed_version = "$($data.subsystem_version[0]).$($data.subsystem_version[1])" + if ($fixed_version -eq "0.0") { + Write-Verbose "Patched SureRecover version 0.0 to 1.0" + $fixed_version = "1.0" + } + $SchedulerIsDisabled = ($data.schedule.window_size -eq 0) + + $RecoveryTimeBetweenRetries = ([uint32]$data.os_flags -shr 8) -band 0x0f + $RecoveryNumberOfRetries = ([uint32]$data.os_flags -shr 12) -band 0x07 + if ($RecoveryNumberOfRetries -eq 0) + { + $RecoveryNumberOfRetries = "Infinite" + } + $imageFailoverIsConfigured = [bool]$data.image_failover + + $obj = [ordered]@{ + Version = $fixed_version + Nonce = $data.Nonce + BIOSFlags = ($data.os_flags -band 0xff) + ImageIsProvisioned = (($data.flags -band 2) -ne 0) + AgentFlags = ($data.re_flags -band 0xff) + AgentIsProvisioned = (($data.flags -band 1) -ne 0) + RecoveryTimeBetweenRetries = $RecoveryTimeBetweenRetries + RecoveryNumberOfRetries = $RecoveryNumberOfRetries + Schedule = New-Object -TypeName PSObject -Property @{ + DayOfWeek = $data.schedule.day_of_week + hour = [uint32]$data.schedule.hour + minute = [uint32]$data.schedule.minute + WindowSize = [uint32]$data.schedule.window_size + } + ConfigurationDataIsProvisioned = (($data.flags -band 4) -ne 0) + TriggerRecoveryDataIsProvisioned = (($data.flags -band 8) -ne 0) + ScheduleRecoveryDataIsProvisioned = (($data.flags -band 16) -ne 0) + SchedulerIsDisabled = $SchedulerIsDisabled + ImageFailoverIsConfigured = $imageFailoverIsConfigured + } + + if ($all.IsPresent) + { + $ia = [ordered]@{ + Url = (Get-HPBIOSSettingValue -Name "OS Recovery Image URL") + Username = (Get-HPBIOSSettingValue -Name "OS Recovery Image Username") + #PublicKey = (Get-HPBiosSettingValue -name "OS Recovery Image Public Key") + ProvisioningVersion = (Get-HPBIOSSettingValue -Name "OS Recovery Image Provisioning Version") + } + + $aa = [ordered]@{ + Url = (Get-HPBIOSSettingValue -Name "OS Recovery Agent URL") + Username = (Get-HPBIOSSettingValue -Name "OS Recovery Agent Username") + #PublicKey = (Get-HPBiosSettingValue -name "OS Recovery Agent Public Key") + ProvisioningVersion = (Get-HPBIOSSettingValue -Name "OS Recovery Agent Provisioning Version") + } + + $Image = New-Object -TypeName PSObject -Property $ia + $Agent = New-Object -TypeName PSObject -Property $aa + + $obj.Add("Image",$Image) + $osFailover = New-Object System.Collections.Generic.List[PSCustomObject] + if ($imageFailoverIsConfigured) { + try { + $osFailoverIndex = Get-HPSureRecoverFailoverConfiguration -Image 'os' + $osFailover.Add($osFailoverIndex) + } + catch { + Write-Warning "Error reading OS Failover configuration $($Index): $($_.Exception.Message)" + } + $obj.Add("ImageFailover",$osFailover) + } + + $obj.Add("Agent",$Agent) + } + return New-Object -TypeName PSCustomObject -Property $obj +} + +<# +.SYNOPSIS + Retrieves the current HP Sure Recover failover configuration + +.DESCRIPTION + This command retrieves the current configuration of the HP Sure Recover failover feature. + +.PARAMETER Image + Specifies whether this command will create a configuration payload for a Recovery Agent image or a Recovery OS image. However, only the value 'os' is supported for now. + +.NOTES + - Requires HP BIOS with HP Sure Recover and Failover support. + - This command requires elevated privileges. + +.EXAMPLE + Get-HPSureRecoverFailoverConfiguration -Image os +#> +function Get-HPSureRecoverFailoverConfiguration +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPSureRecoverFailoverConfiguration")] + param( + [ValidateSet("os")] + [Parameter(Mandatory = $false,Position = 0)] + [string]$Image = 'os' + ) + + $mi_result = 0 + $data = New-Object -TypeName surerecover_failover_configuration_t + $index = 1 + $c = '[DfmNativeSureRecover]::get_surerecover_failover_configuration' + (Test-OSBitness) + '([bool]$False,[int]$index,[ref]$data,[ref]$mi_result);' + try { + $result = Invoke-Expression -Command $c + Test-HPPrivateCustomResult -result $result -mi_result $mi_result -Category 0x05 -Verbose:$VerbosePreference + } + catch { + Write-Error "Failover is not configured properly. Error: $($_.Exception.Message)" + } + + return [PSCustomObject]@{ + Index = $Index + Version = $data.version + Url = $data.url + Username = $data.username + } +} + +<# +.SYNOPSIS + Retrieves information about the HP Sure Recover embedded reimaging device + +.DESCRIPTION + This command retrieves information about the embedded reimaging device for HP Sure Recover. + +.NOTES + The embedded reimaging device is an optional hardware feature, and if not present, the field Embedded Reimaging Device is false. + +.NOTES + - Requires HP BIOS with HP Sure Recover support + - Requires Embedded Reimaging device hardware option + - This command requires elevated privileges. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.LINK + [Blog post: Provisioning and Configuring HP Sure Recover with HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/provisioning-and-configuring-hp-sure-recover-hp-client-management-script-library) + +.EXAMPLE + Get-HPSureRecoverReimagingDeviceDetails +#> +function Get-HPSureRecoverReimagingDeviceDetails +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPSureRecoverReimagingDeviceDetails")] + param() + $result = @{} + + try { + [string]$ImageVersion = Get-HPBIOSSettingValue -Name "OS Recovery Image Version" + $result.Add("ImageVersion",$ImageVersion) + } + catch {} + + try { + [string]$DriverVersion = Get-HPBIOSSettingValue -Name "OS Recovery Driver Version" + $result.Add("DriverVersion",$DriverVersion) + } + catch {} + + try{ + # eMMC module is present if Embedded Storage for Recovery BIOS setting exists + [string]$OSRsize = Get-HPBIOSSettingValue -Name "Embedded Storage for Recovery" + $result.Add("EmbeddedReimagingDevice", $true) + } + catch{ + $result.Add("EmbeddedReimagingDevice", $false) + } + + $result +} + +<# +.SYNOPSIS + Creates a payload to configure the HP Sure Recover OS or Recovery image + +.DESCRIPTION + This command creates a payload to configure a custom HP Sure Recover OS or Recovery image. There are three signing options to choose from: + - Signing Key File (and Password) using -SigningKeyFile and -SigningKeyPassword parameters + - Signing Key Certificate using -SigningKeyCertificate parameter + - Remote Signing using -RemoteSigningServiceKeyID and -RemoteSigningServiceURL parameters + + Please note that using a Key File with Password in PFX format is recommended over using an X509 Certificate object because a private key in a certificate is not password protected. + + This command writes the created payload to the pipeline or to the file specified in the OutputFile parameter. + This payload can then be passed to the Set-HPSecurePlatformPayload command. + + Security note: Payloads should only be created on secure servers. Once created, the payload may be transferred to a client and applied via the Set-HPSecurePlatformPayload. Creating the payload and passing it to the Set-HPSecurePlatformPayload command via the pipeline is not a recommended production pattern. + +.PARAMETER Image + Specifies whether this command will create a configuration payload for a Recovery Agent image or a Recovery OS image. The value must be either 'agent' or 'os'. + +.PARAMETER SigningKeyFile + Specifies the path to the Secure Platform Management signing key as a PFX file. If the PFX file is protected by a password (recommended), the SigningKeyPassword parameter should also be provided. + +.PARAMETER SigningKeyPassword + Specifies the Secure Platform Management signing key file password, if required + +.PARAMETER SigningKeyCertificate + Specifies the Secure Platform Management signing key certificate as an X509Certificate object + +.PARAMETER ImageCertificateFile + Specifies the path to the image signing certificate as a PFX file. If the PFX file is protected by a password (recommended), the ImageCertificatePassword parameter should also be provided. Depending on the Image switch, this will be either the signing key file for the Agent or the OS image. + ImageCertificateFile and PublicKeyFile are mutually exclusive. + +.PARAMETER ImageCertificatePassword + Specifies the image signing key file password, if required + +.PARAMETER ImageCertificate + Specifies the image signing key certificate as an X509Certificate object. Depending on the Image parameter, this value will be either the signing key certificate for the Agent or the OS image. + +.PARAMETER PublicKeyFile + Specifies the image signing key as the path to a base64-encoded RSA key (a PEM file). + ImageCertificateFile and PublicKeyFile are mutually exclusive. + +.PARAMETER PublicKey + Specifies the image signing key as an array of bytes, including modulus and exponent. + This option is currently reserved for internal use. + +.PARAMETER Nonce + Specifies a Nonce. If nonce is specified, the Secure Platform Management subsystem will only accept commands with a nonce greater or equal to the last nonce sent. This approach helps to prevent replay attacks. If not specified, the nonce is inferred from the current local time. The current local time as the nonce works in most cases. However, this approach has a resolution of seconds, so when performing parallel operations or a high volume of operations, it is possible for the same counter to be interpreted for more than one command. In these cases, the caller should use its own nonce derivation and provide it through this parameter. + +.PARAMETER Version + Specifies the operation version. Each new configuration payload must increment the last operation payload version, as available in the public WMI setting 'OS Recovery Image Provisioning Version'. If this parameter is not provided, this command will read the public wmi setting and increment it automatically. + +.PARAMETER Username + Specifies the username for accessing the url specified in the Url parameter, if any. + +.PARAMETER Password + Specifies the password for accessing the url specified in the Url parameter, if any. + +.PARAMETER Url + Specifies the url from where to download the image. If not specified, the default HP.COM location will be used. + +.PARAMETER OutputFile + Specifies the file to write output to instead of writing the output to the pipeline + +.PARAMETER RemoteSigningServiceKeyID + Specifies the Signing Key ID to be used + +.PARAMETER RemoteSigningServiceURL + Specifies the (Key Management Service) KMS server URL (I.e.: https://.azurewebsites.net/) + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.NOTES + - Requires HP BIOS with HP Sure Recover support + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.LINK + [Blog post: Provisioning and Configuring HP Sure Recover with HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/provisioning-and-configuring-hp-sure-recover-hp-client-management-script-library) + +.EXAMPLE + $payload = New-HPSureRecoverImageConfigurationPayload -SigningKeyFile "$path\signing_key.pfx" -Image OS -ImageKeyFile ` + "$path\os.pfx" -username my_http_user -password `s3cr3t` -url "http://my.company.com" + ... + $payload | Set-HPSecurePlatformPayload +#> +function New-HPSureRecoverImageConfigurationPayload +{ + [CmdletBinding(DefaultParameterSetName = "SKFileCert_OSFilePem",HelpUri = "https://developers.hp.com/hp-client-management/doc/New-HPSureRecoverImageConfigurationPayload")] + param( + [Parameter(ParameterSetName = "SKFileCert_OSBytesCert",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "SKBytesCert_OSBytesCert",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "SKFileCert_OSFileCert",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "SKBytesCert_OSFileCert",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "SKFileCert_OSBytesPem",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "SKBytesCert_OSBytesPem",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "SKFileCert_OSFilePem",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "SKBytesCert_OSFilePem",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "RemoteSigning_OSBytesCert",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "RemoteSigning_OSFileCert",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "RemoteSigning_OSBytesPem",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "RemoteSigning_OSFilePem",Mandatory = $true,Position = 0)] + [ValidateSet("os","agent")] + [string]$Image, + + [Parameter(ParameterSetName = "SKFileCert_OSBytesCert",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "SKFileCert_OSFileCert",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "SKFileCert_OSBytesPem",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "SKFileCert_OSFilePem",Mandatory = $true,Position = 1)] + [System.IO.FileInfo]$SigningKeyFile, + + [Parameter(ParameterSetName = "SKFileCert_OSBytesCert",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "SKFileCert_OSFileCert",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "SKFileCert_OSBytesPem",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "SKFileCert_OSFilePem",Mandatory = $false,Position = 2)] + [string]$SigningKeyPassword, + + [Parameter(ParameterSetName = "SKBytesCert_OSBytesCert",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "SKBytesCert_OSFileCert",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "SKBytesCert_OSBytesPem",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "SKBytesCert_OSFilePem",Mandatory = $true,Position = 3)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$SigningKeyCertificate, + + + [Parameter(ParameterSetName = "SKFileCert_OSFileCert",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "SKBytesCert_OSFileCert",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "RemoteSigning_OSFileCert",Mandatory = $true,Position = 1)] + [Alias("ImageKeyFile")] + [System.IO.FileInfo]$ImageCertificateFile, + + [Parameter(ParameterSetName = "SKFileCert_OSFileCert",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "SKBytesCert_OSFileCert",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "RemoteSigning_OSFileCert",Mandatory = $false,Position = 2)] + [Alias("ImageKeyPassword")] + [string]$ImageCertificatePassword, + + [Parameter(ParameterSetName = "SKFileCert_OSBytesCert",Mandatory = $true,Position = 6)] + [Parameter(ParameterSetName = "SKBytesCert_OSBytesCert",Mandatory = $true,Position = 6)] + [Parameter(ParameterSetName = "RemoteSigning_OSBytesCert",Mandatory = $true,Position = 1)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$ImageCertificate, + + + [Parameter(ParameterSetName = "SKFileCert_OSFilePem",Mandatory = $true,Position = 7)] + [Parameter(ParameterSetName = "SKBytesCert_OSFilePem",Mandatory = $true,Position = 7)] + [Parameter(ParameterSetName = "RemoteSigning_OSFilePem",Mandatory = $true,Position = 1)] + [System.IO.FileInfo]$PublicKeyFile, + + + [Parameter(ParameterSetName = "SKFileCert_OSBytesPem",Mandatory = $true,Position = 8)] + [Parameter(ParameterSetName = "SKBytesCert_OSBytesPem",Mandatory = $true,Position = 8)] + [Parameter(ParameterSetName = "RemoteSigning_OSBytesPem",Mandatory = $true,Position = 1)] + [byte[]]$PublicKey, + + + [Parameter(ParameterSetName = "SKFileCert_OSBytesCert",Mandatory = $false,Position = 9)] + [Parameter(ParameterSetName = "SKBytesCert_OSBytesCert",Mandatory = $false,Position = 9)] + [Parameter(ParameterSetName = "SKFileCert_OSFileCert",Mandatory = $false,Position = 9)] + [Parameter(ParameterSetName = "SKBytesCert_OSFileCert",Mandatory = $false,Position = 9)] + [Parameter(ParameterSetName = "SKFileCert_OSBytesPem",Mandatory = $false,Position = 9)] + [Parameter(ParameterSetName = "SKBytesCert_OSBytesPem",Mandatory = $false,Position = 9)] + [Parameter(ParameterSetName = "SKFileCert_OSFilePem",Mandatory = $false,Position = 9)] + [Parameter(ParameterSetName = "SKBytesCert_OSFilePem",Mandatory = $false,Position = 9)] + [Parameter(ParameterSetName = "RemoteSigning_OSBytesCert",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "RemoteSigning_OSFileCert",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "RemoteSigning_OSBytesPem",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "RemoteSigning_OSFilePem",Mandatory = $false,Position = 2)] + [uint32]$Nonce = [math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s").Replace(',','.')), + + + [Parameter(ParameterSetName = "SKFileCert_OSBytesCert",Mandatory = $false,Position = 10)] + [Parameter(ParameterSetName = "SKBytesCert_OSBytesCert",Mandatory = $false,Position = 10)] + [Parameter(ParameterSetName = "SKFileCert_OSFileCert",Mandatory = $false,Position = 10)] + [Parameter(ParameterSetName = "SKBytesCert_OSFileCert",Mandatory = $false,Position = 10)] + [Parameter(ParameterSetName = "SKFileCert_OSBytesPem",Mandatory = $false,Position = 10)] + [Parameter(ParameterSetName = "SKBytesCert_OSBytesPem",Mandatory = $false,Position = 10)] + [Parameter(ParameterSetName = "SKFileCert_OSFilePem",Mandatory = $false,Position = 10)] + [Parameter(ParameterSetName = "SKBytesCert_OSFilePem",Mandatory = $false,Position = 10)] + [Parameter(ParameterSetName = "RemoteSigning_OSBytesCert",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "RemoteSigning_OSFileCert",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "RemoteSigning_OSBytesPem",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "RemoteSigning_OSFilePem",Mandatory = $false,Position = 3)] + [uint16]$Version, + + [Parameter(ParameterSetName = "SKFileCert_OSBytesCert",Mandatory = $false,Position = 11)] + [Parameter(ParameterSetName = "SKBytesCert_OSBytesCert",Mandatory = $false,Position = 11)] + [Parameter(ParameterSetName = "SKFileCert_OSFileCert",Mandatory = $false,Position = 11)] + [Parameter(ParameterSetName = "SKBytesCert_OSFileCert",Mandatory = $false,Position = 11)] + [Parameter(ParameterSetName = "SKFileCert_OSBytesPem",Mandatory = $false,Position = 11)] + [Parameter(ParameterSetName = "SKBytesCert_OSBytesPem",Mandatory = $false,Position = 11)] + [Parameter(ParameterSetName = "SKFileCert_OSFilePem",Mandatory = $false,Position = 11)] + [Parameter(ParameterSetName = "SKBytesCert_OSFilePem",Mandatory = $false,Position = 11)] + [Parameter(ParameterSetName = "RemoteSigning_OSBytesCert",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "RemoteSigning_OSFileCert",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "RemoteSigning_OSBytesPem",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "RemoteSigning_OSFilePem",Mandatory = $false,Position = 4)] + [string]$Username, + + [Parameter(ParameterSetName = "SKFileCert_OSBytesCert",Mandatory = $false,Position = 12)] + [Parameter(ParameterSetName = "SKBytesCert_OSBytesCert",Mandatory = $false,Position = 12)] + [Parameter(ParameterSetName = "SKFileCert_OSFileCert",Mandatory = $false,Position = 12)] + [Parameter(ParameterSetName = "SKBytesCert_OSFileCert",Mandatory = $false,Position = 12)] + [Parameter(ParameterSetName = "SKFileCert_OSBytesPem",Mandatory = $false,Position = 12)] + [Parameter(ParameterSetName = "SKBytesCert_OSBytesPem",Mandatory = $false,Position = 12)] + [Parameter(ParameterSetName = "SKFileCert_OSFilePem",Mandatory = $false,Position = 12)] + [Parameter(ParameterSetName = "SKBytesCert_OSFilePem",Mandatory = $false,Position = 12)] + [Parameter(ParameterSetName = "RemoteSigning_OSBytesCert",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "RemoteSigning_OSFileCert",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "RemoteSigning_OSBytesPem",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "RemoteSigning_OSFilePem",Mandatory = $false,Position = 5)] + [string]$Password, + + [Parameter(ParameterSetName = "SKFileCert_OSBytesCert",Mandatory = $false,Position = 13)] + [Parameter(ParameterSetName = "SKBytesCert_OSBytesCert",Mandatory = $false,Position = 13)] + [Parameter(ParameterSetName = "SKFileCert_OSFileCert",Mandatory = $false,Position = 13)] + [Parameter(ParameterSetName = "SKBytesCert_OSFileCert",Mandatory = $false,Position = 13)] + [Parameter(ParameterSetName = "SKFileCert_OSBytesPem",Mandatory = $false,Position = 13)] + [Parameter(ParameterSetName = "SKBytesCert_OSBytesPem",Mandatory = $false,Position = 13)] + [Parameter(ParameterSetName = "SKFileCert_OSFilePem",Mandatory = $false,Position = 13)] + [Parameter(ParameterSetName = "SKBytesCert_OSFilePem",Mandatory = $false,Position = 13)] + [Parameter(ParameterSetName = "RemoteSigning_OSBytesCert",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "RemoteSigning_OSFileCert",Mandatory = $false,Position = 7)] + [Parameter(ParameterSetName = "RemoteSigning_OSBytesPem",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "RemoteSigning_OSFilePem",Mandatory = $false,Position = 6)] + [uri]$Url = "", + + [Parameter(ParameterSetName = "SKFileCert_OSBytesCert",Mandatory = $false,Position = 14)] + [Parameter(ParameterSetName = "SKBytesCert_OSBytesCert",Mandatory = $false,Position = 14)] + [Parameter(ParameterSetName = "SKFileCert_OSFileCert",Mandatory = $false,Position = 14)] + [Parameter(ParameterSetName = "SKBytesCert_OSFileCert",Mandatory = $false,Position = 14)] + [Parameter(ParameterSetName = "SKFileCert_OSBytesPem",Mandatory = $false,Position = 14)] + [Parameter(ParameterSetName = "SKBytesCert_OSBytesPem",Mandatory = $false,Position = 14)] + [Parameter(ParameterSetName = "SKFileCert_OSFilePem",Mandatory = $false,Position = 14)] + [Parameter(ParameterSetName = "SKBytesCert_OSFilePem",Mandatory = $false,Position = 14)] + [Parameter(ParameterSetName = "RemoteSigning_OSBytesCert",Mandatory = $false,Position = 7)] + [Parameter(ParameterSetName = "RemoteSigning_OSFileCert",Mandatory = $false,Position = 8)] + [Parameter(ParameterSetName = "RemoteSigning_OSBytesPem",Mandatory = $false,Position = 7)] + [Parameter(ParameterSetName = "RemoteSigning_OSFilePem",Mandatory = $false,Position = 7)] + [System.IO.FileInfo]$OutputFile, + + [Parameter(ParameterSetName = "RemoteSigning_OSBytesCert",Mandatory = $true,Position = 8)] + [Parameter(ParameterSetName = "RemoteSigning_OSFileCert",Mandatory = $true,Position = 9)] + [Parameter(ParameterSetName = "RemoteSigning_OSBytesPem",Mandatory = $true,Position = 8)] + [Parameter(ParameterSetName = "RemoteSigning_OSFilePem",Mandatory = $true,Position = 8)] + [string]$RemoteSigningServiceKeyID, + + [Parameter(ParameterSetName = "RemoteSigning_OSBytesCert",Mandatory = $true,Position = 9)] + [Parameter(ParameterSetName = "RemoteSigning_OSFileCert",Mandatory = $true,Position = 10)] + [Parameter(ParameterSetName = "RemoteSigning_OSBytesPem",Mandatory = $true,Position = 9)] + [Parameter(ParameterSetName = "RemoteSigning_OSFilePem",Mandatory = $true,Position = 9)] + [string]$RemoteSigningServiceURL, + + [Parameter(ParameterSetName = "RemoteSigning_OSBytesCert",Mandatory = $false,Position = 10)] + [Parameter(ParameterSetName = "RemoteSigning_OSFileCert",Mandatory = $false,Position = 11)] + [Parameter(ParameterSetName = "RemoteSigning_OSBytesPem",Mandatory = $false,Position = 10)] + [Parameter(ParameterSetName = "RemoteSigning_OSFilePem",Mandatory = $false,Position = 10)] + [switch]$CacheAccessToken + ) + + Write-Verbose "Creating SureRecover Image provisioning payload" + + + if ($PublicKeyFile -or $PublicKey) { + $osk = Get-HPPrivatePublicKeyCoalesce -File $PublicKeyFile -key $PublicKey -Verbose:$VerbosePreference + } + else { + $osk = Get-HPPrivateX509CertCoalesce -File $ImageCertificateFile -password $ImageCertificatePassword -cert $ImageCertificate -Verbose:$VerbosePreference + } + + $OKBytes = $osk.Modulus + + $opaque = New-Object opaque4096_t + $opaqueLength = 4096 + $mi_result = 0 + + if (-not $Version) { + if ($image -eq "os") + { + $Version = [uint16](Get-HPBIOSSettingValue "OS Recovery Image Provisioning Version") + 1 + } + else { + $Version = [uint16](Get-HPBIOSSettingValue "OS Recovery Agent Provisioning Version") + 1 + } + Write-Verbose "New version number is $version" + } + + $cmd = '[DfmNativeSureRecover]::get_surerecover_provisioning_opaque' + (Test-OSBitness) + '($Nonce, $Version, $OKBytes,$($OKBytes.Count),$Username, $Password, $($Url.ToString()), [ref]$opaque, [ref]$opaqueLength, [ref]$mi_result);' + $result = Invoke-Expression -Command $cmd + Test-HPPrivateCustomResult -result $result -mi_result $mi_result -Category 0x05 + + $payload = $opaque.raw[0..($opaqueLength - 1)] + + if ($PSCmdlet.ParameterSetName -eq "RemoteSigning_OSBytesCert" -or $PSCmdlet.ParameterSetName -eq "RemoteSigning_OSFileCert" -or $PSCmdlet.ParameterSetName -eq "RemoteSigning_OSBytesPem" -or $PSCmdlet.ParameterSetName -eq "RemoteSigning_OSFilePem") { + $sig = Invoke-HPPrivateRemoteSignData -Data $payload -CertificateId $RemoteSigningServiceKeyID -KMSUri $RemoteSigningServiceURL -CacheAccessToken:$CacheAccessToken -Verbose:$VerbosePreference + } + else { + $sk = Get-HPPrivateX509CertCoalesce -File $SigningKeyFile -password $SigningKeyPassword -cert $SigningKeycertificate -Verbose:$VerbosePreference + $sig = Invoke-HPPrivateSignData -Data $payload -Certificate $sk.Full -Verbose:$VerbosePreference + } + + [byte[]]$out = $sig + $payload + + Write-Verbose "Building output document" + $output = New-Object -TypeName PortableFileFormat + $output.Data = $out + + if ($Image -eq "os") { + $output.purpose = "hp:surerecover:provision:os_image" + } + else { + $output.purpose = "hp:surerecover:provision:recovery_image" + } + + Write-Verbose "Provisioning version will be $version" + $output.timestamp = Get-Date + + if ($OutputFile) { + Write-Verbose "Will output to file $OutputFile" + $f = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($OutputFile) + $output | ConvertTo-Json -Compress | Out-File -FilePath $f -Encoding utf8 + } + else { + $output | ConvertTo-Json -Compress + } +} + + + +<# +.SYNOPSIS + Creates a payload to deprovision HP Sure Recover + +.DESCRIPTION + This command creates a payload to deprovision the HP Sure Recover feature. There are three signing options to choose from: + - Signing Key File (and Password) using -SigningKeyFile and -SigningKeyPassword parameters + - Signing Key Certificate using -SigningKeyCertificate parameter + - Remote Signing using -RemoteSigningServiceKeyID and -RemoteSigningServiceURL parameters + + Please note that using a Key File with Password in PFX format is recommended over using an X509 Certificate object because a private key in a certificate is not password protected. + + This command writes the created payload to the pipeline or to the file specified in the OutputFile parameter. This payload can then be passed to the Set-HPSecurePlatformPayload command. + + Security note: Payloads should only be created on secure servers. Once created, the payload may be transferred to a client and applied via the Set-HPSecurePlatformPayload command. Creating the payload and passing it to the Set-HPSecurePlatformPayload command via the pipeline is not a recommended production pattern. + +.PARAMETER SigningKeyFile + Specifies the path to the Secure Platform Management signing key as a PFX file. If the PFX file is protected by a password (recommended), the SigningKeyPassword parameter should also be provided. + +.PARAMETER SigningKeyPassword + Specifies the Secure Platform Management signing key file password, if required. + +.PARAMETER SigningKeyCertificate + Specifies the Secure Platform Management signing key certificate as an X509Certificate object. + +.PARAMETER Nonce + Specifies a Nonce. If nonce is specified, the Secure Platform Management subsystem will only accept commands with a nonce greater or equal to the last nonce sent. This approach helps to prevent replay attacks. If not specified, the nonce is inferred from the current local time. The current local time as the nonce works in most cases. However, this approach has a resolution of seconds, so when performing parallel operations or a high volume of operations, it is possible for the same counter to be interpreted for more than one command. In these cases, the caller should use its own nonce derivation and provide it through this parameter. + +.PARAMETER RemoveOnly + This parameter allows deprovisioning only specific parts of the Sure Recover subsystem. If not specified, the entire SureRecover is deprovisoned. Possible values are one or more of the following: + + - AgentProvisioning - remove the Agent provisioning + - OSImageProvisioning - remove the OS Image provisioning + - ConfigurationData - remove HP SureRecover configuration data + - TriggerRecoveryData - remove the HP Sure Recover trigger definition + - ScheduleRecoveryData - remove the HP Sure Recover schedule definition + +.PARAMETER OutputFile + Specifies the file to write output to instead of writing the output to the pipelineing output to the specified file, instead of writing it to the pipeline. + +.PARAMETER RemoteSigningServiceKeyID + Specifies the Signing Key ID to be used + +.PARAMETER RemoteSigningServiceURL + Specifies the (Key Management Service) KMS server URL (I.e.: https://.azurewebsites.net/) + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.LINK + [Blog post: Provisioning and Configuring HP Sure Recover with HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/provisioning-and-configuring-hp-sure-recover-hp-client-management-script-library) + +.NOTES + - Requires HP BIOS with HP Sure Recover support + +.EXAMPLE + New-HPSureRecoverDeprovisionPayload -SigningKeyFile sk.pfx +#> +function New-HPSureRecoverDeprovisionPayload +{ + [CmdletBinding(DefaultParameterSetName = "SF",HelpUri = "https://developers.hp.com/hp-client-management/doc/New-HPSureRecoverDeprovisionPayload")] + param( + [Parameter(ParameterSetName = "SF",Mandatory = $true,Position = 0)] + [System.IO.FileInfo]$SigningKeyFile, + + [Parameter(ParameterSetName = "SF",Mandatory = $false,Position = 1)] + [string]$SigningKeyPassword, + + [Parameter(ParameterSetName = "SB",Mandatory = $true,Position = 0)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$SigningKeyCertificate, + + [Parameter(ParameterSetName = "SF",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "SB",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 0)] + [uint32]$Nonce = [math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s").Replace(',','.')), + + [Parameter(ParameterSetName = "SF",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "SB",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 1)] + [DeprovisioningTarget[]]$RemoveOnly, + + [Parameter(ParameterSetName = "SF",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "SB",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 2)] + [System.IO.FileInfo]$OutputFile, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 3)] + [string]$RemoteSigningServiceKeyID, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 4)] + [string]$RemoteSigningServiceURL, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 5)] + [switch]$CacheAccessToken + ) + + Write-Verbose "Creating SureRecover deprovisioning payload" + if ($RemoveOnly) { + [byte]$target = 0 + $RemoveOnly | ForEach-Object { $target = $target -bor $_ } + Write-Verbose "Will deprovision only $([string]$RemoveOnly)" + } + else + { + [byte]$target = 31 # all five bits + Write-Verbose "No deprovisioning filter specified, will deprovision all SureRecover" + } + + $payload = [BitConverter]::GetBytes($nonce) + $target + + if ($PSCmdlet.ParameterSetName -eq "RemoteSigning") { + $sig = Invoke-HPPrivateRemoteSignData -Data $payload -CertificateId $RemoteSigningServiceKeyID -KMSUri $RemoteSigningServiceURL -CacheAccessToken:$CacheAccessToken -Verbose:$VerbosePreference + } + else { + $sk = Get-HPPrivateX509CertCoalesce -File $SigningKeyFile -password $SigningKeyPassword -cert $SigningKeycertificate -Verbose:$VerbosePreference + $sig = Invoke-HPPrivateSignData -Data $payload -Certificate $sk.Full -Verbose:$VerbosePreference + } + + Write-Verbose "Building output document" + $output = New-Object -TypeName PortableFileFormat + $output.Data = $sig + $payload + $output.purpose = "hp:surerecover:deprovision" + $output.timestamp = Get-Date + + if ($OutputFile) { + Write-Verbose "Will output to file $OutputFile" + $f = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($OutputFile) + $output | ConvertTo-Json -Compress | Out-File -FilePath $f -Encoding utf8 + } + else { + $output | ConvertTo-Json -Compress + } +} + + + +<# +.SYNOPSIS + Creates a payload to configure the HP Sure Recover schedule + +.DESCRIPTION + This command creates a payload to configure a HP Sure Recover schedule. There are three signing options to choose from: + - Signing Key File (and Password) using -SigningKeyFile and -SigningKeyPassword parameters + - Signing Key Certificate using -SigningKeyCertificate parameter + - Remote Signing using -RemoteSigningServiceKeyID and -RemoteSigningServiceURL parameters + + Please note that using a Key File with Password in PFX format is recommended over using an X509 Certificate object because a private key in a certificate is not password protected. + + This command writes the created payload to the pipeline or to the file specified in the OutputFile parameter. This payload can then be passed to the Set-HPSecurePlatformPayload command. + + Security note: Payloads should only be created on secure servers. Once created, the payload may be transferred to a client and applied via the Set-HPSecurePlatformPayload command. Creating the payload and passing it to the Set-HPSecurePlatformPayload command via the pipeline is not a recommended production pattern. + +.PARAMETER SigningKeyFile + Specifies the path to the Secure Platform Management signing key, as a PFX file. If the PFX file is protected by a password (recommended), + the SigningKeyPassword parameter should also be provided. + +.PARAMETER SigningKeyPassword + Specifies the Secure Platform Management signing key file password, if required. + +.PARAMETER SigningKeyCertificate + Specifies the Secure Platform Management signing key certificate, as an X509Certificate object. + +.PARAMETER Nonce + Specifies a Nonce. If nonce is specified, the Secure Platform Management subsystem will only accept commands with a nonce greater or equal to the last nonce sent. This approach helps to prevent replay attacks. If not specified, the nonce is inferred from the current local time. The current local time as the nonce works in most cases. However, this approach has a resolution of seconds, so when performing parallel operations or a high volume of operations, it is possible for the same counter to be interpreted for more than one command. In these cases, the caller should use its own nonce derivation and provide it through this parameter. + +.PARAMETER DayOfWeek + Specifies the day of the week for the schedule + +.PARAMETER Hour + Specifies the hour value for the schedule + +.PARAMETER Minute + Specifies the minute of the schedule + +.PARAMETER WindowSize + Specifies the windows size for the schedule activation in minutes, in case the exact configured schedule is + missed. By default, the window is zero. The value may not be larger than 240 minutes (4 hours). + +.PARAMETER Disable + If specified, this command creates a payload to disable HP Sure Recover schedule. + +.PARAMETER OutputFile + Specifies the file to write output to instead of writing the output to the pipelineing output to the specified file, instead of writing it to the pipeline. + +.PARAMETER RemoteSigningServiceKeyID + Specifies the Signing Key ID to be used + +.PARAMETER RemoteSigningServiceURL + Specifies the (Key Management Service) KMS server URL (I.e.: https://.azurewebsites.net/) + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.LINK + [Blog post: Provisioning and Configuring HP Sure Recover with HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/provisioning-and-configuring-hp-sure-recover-hp-client-management-script-library) + +.NOTES + - Requires HP BIOS with HP Sure Recover support + +.EXAMPLE + New-HPSureRecoverSchedulePayload -SigningKeyFile sk.pfx -DayOfWeek Sunday -Hour 2 + +.EXAMPLE + New-HPSureRecoverSchedulePayload -SigningKeyFile sk.pfx -Disable +#> +function New-HPSureRecoverSchedulePayload +{ + [CmdletBinding(DefaultParameterSetName = "SF",HelpUri = "https://developers.hp.com/hp-client-management/doc/New-HPSureRecoverSchedulePayload")] + param( + + [Parameter(ParameterSetName = "SF",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "DisableSF",Mandatory = $true,Position = 0)] + [System.IO.FileInfo]$SigningKeyFile, + + [Parameter(ValueFromPipeline,ParameterSetName = "SB",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "DisableSB",Mandatory = $true,Position = 0)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$SigningKeyCertificate, + + [Parameter(ParameterSetName = "SF",Mandatory = $false,Position = 1)] + [Parameter(ParameterSetName = "DisableSF",Mandatory = $false,Position = 1)] + [string]$SigningKeyPassword, + + [Parameter(ParameterSetName = "SF",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "SB",Mandatory = $false,Position = 1)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 0)] + [Parameter(ParameterSetName = "DisableRemoteSigning",Mandatory = $false,Position = 0)] + [Parameter(ParameterSetName = "DisableSF",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "DisableSB",Mandatory = $false,Position = 1)] + [uint32]$Nonce = [math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s").Replace(',','.')), + + [Parameter(ParameterSetName = "SF",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "SB",Mandatory = $true,Position = 2)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 1)] + [surerecover_day_of_week]$DayOfWeek = [surerecover_day_of_week]::Sunday, + + [Parameter(ParameterSetName = "SF",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "SB",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 2)] + [ValidateRange(0,23)] + [uint32]$Hour = 0, + + [Parameter(ParameterSetName = "SF",Mandatory = $true,Position = 5)] + [Parameter(ParameterSetName = "SB",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 3)] + [ValidateRange(0,59)] + [uint32]$Minute = 0, + + [Parameter(ParameterSetName = "SF",Mandatory = $true,Position = 6)] + [Parameter(ParameterSetName = "SB",Mandatory = $true,Position = 5)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 4)] + [ValidateRange(1,240)] + [uint32]$WindowSize = 0, + + [Parameter(ParameterSetName = "DisableRemoteSigning",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "DisableSF",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "DisableSB",Mandatory = $true,Position = 2)] + [switch]$Disable, + + [Parameter(ParameterSetName = "SF",Mandatory = $false,Position = 7)] + [Parameter(ParameterSetName = "SB",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "DisableRemoteSigning",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "DisableSF",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "DisableSB",Mandatory = $false,Position = 3)] + [System.IO.FileInfo]$OutputFile, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 6)] + [Parameter(ParameterSetName = "DisableRemoteSigning",Mandatory = $true,Position = 3)] + [string]$RemoteSigningServiceKeyID, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 7)] + [Parameter(ParameterSetName = "DisableRemoteSigning",Mandatory = $true,Position = 4)] + [string]$RemoteSigningServiceURL, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 8)] + [Parameter(ParameterSetName = "DisableRemoteSigning",Mandatory = $false,Position = 5)] + [switch]$CacheAccessToken + ) + + Write-Verbose "Creating SureRecover scheduling payload" + $schedule_data = New-Object -TypeName surerecover_schedule_data_t + + Write-Verbose "Will set the SureRecover scheduler" + $schedule_data.day_of_week = $DayOfWeek + $schedule_data.hour = $Hour + $schedule_data.minute = $Minute + $schedule_data.window_size = $WindowSize + + $schedule = New-Object -TypeName surerecover_schedule_data_payload_t + $schedule.schedule = $schedule_data + $schedule.Nonce = $Nonce + + $cmd = New-Object -TypeName surerecover_schedule_payload_t + $cmd.Data = $schedule + [byte[]]$payload = (Convert-HPPrivateObjectToBytes -obj $schedule -Verbose:$VerbosePreference)[0] + + if ($PSCmdlet.ParameterSetName -eq "RemoteSigning" -or $PSCmdlet.ParameterSetName -eq "DisableRemoteSigning") { + $cmd.sig = Invoke-HPPrivateRemoteSignData -Data $payload -CertificateId $RemoteSigningServiceKeyID -KMSUri $RemoteSigningServiceURL -CacheAccessToken:$CacheAccessToken -Verbose:$VerbosePreference + } + else { + $sk = Get-HPPrivateX509CertCoalesce -File $SigningKeyFile -password $SigningKeyPassword -cert $SigningKeycertificate -Verbose:$VerbosePreference + $cmd.sig = Invoke-HPPrivateSignData -Data $payload -Certificate $sk.Full -Verbose:$VerbosePreference + } + + Write-Verbose "Building output document" + $output = New-Object -TypeName PortableFileFormat + + $output.Data = (Convert-HPPrivateObjectToBytes -obj $cmd -Verbose:$VerbosePreference)[0] + $output.purpose = "hp:surerecover:scheduler" + $output.timestamp = Get-Date + + + if ($OutputFile) { + Write-Verbose "Will output to file $OutputFile" + $f = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($OutputFile) + $output | ConvertTo-Json -Compress | Out-File -FilePath $f -Encoding utf8 + } + else { + $output | ConvertTo-Json -Compress + } +} + + +<# +.SYNOPSIS + Creates a payload to configure HP Sure Recover + +.DESCRIPTION + This command create a payload to configure HP Sure Recover. There are three signing options to choose from: + - Signing Key File (and Password) using -SigningKeyFile and -SigningKeyPassword parameters + - Signing Key Certificate using -SigningKeyCertificate parameter + - Remote Signing using -RemoteSigningServiceKeyID and -RemoteSigningServiceURL parameters + + Please note that using a Key File with Password in PFX format is recommended over using an X509 Certificate object because a private key in a certificate is not password protected. + + This command writes the created payload to the pipeline or to the file specified in the OutputFile parameter. + This payload can then be passed to the Set-HPSecurePlatformPayload command. + + Security note: Payloads should only be created on secure servers. Once created, the payload may be transferred to a client and applied via the Set-HPSecurePlatformPayload command. Creating the payload and passing it to the Set-HPSecurePlatformPayload command via the pipeline is not a recommended production pattern. + +.PARAMETER SigningKeyFile + Specifies the path to the Secure Platform Management signing key as a PFX file. If the PFX file is protected by a password (recommended), the SigningKeyPassword parameter should also be provided. + +.PARAMETER SigningKeyPassword + Specifies the Secure Platform Management signing key file password, if required. + +.PARAMETER SigningKeyCertificate + Specifies the Secure Platform Management signing key certificate as an X509Certificate object. + +.PARAMETER SigningKeyModulus + The Secure Platform Management signing key modulus + +.PARAMETER Nonce + Specifies a Nonce. If nonce is specified, the Secure Platform Management subsystem will only accept commands with a nonce greater or equal to the last nonce sent. This approach helps to prevent replay attacks. If not specified, the nonce is inferred from the current local time. The current local time as the nonce works in most cases. However, this approach has a resolution of seconds, so when performing parallel operations or a high volume of operations, it is possible for the same counter to be interpreted for more than one command. In these cases, the caller should use its own nonce derivation and provide it through this parameter. + +.PARAMETER BIOSFlags + Specifies the imaging flags to set. Please note that this parameter was previously named OSImageFlags. + None = 0 + NetworkBasedRecovery = 1 => Enable network based recovery + WiFi = 2 => Enable WiFi + PartitionRecovery = 4 => Enable partition based recovery + SecureStorage = 8 => Enable recovery from secure storage device + SecureEraseUnit = 16 => Secure Erase Unit before recovery + RollbackPrevention = 64 => Enforce rollback prevention + +.PARAMETER AgentFlags + Specifies the agent flags to set: + None = 0 => OEM OS release with in-box drivers + DRDVD = 1 => OEM OS release with optimized drivers + CorporateReadyWithoutOffice = 2 => Corporate ready without office + CorporateReadyWithOffice = 4 => Corporate ready with office + InstallManageabilitySuite = 16 => Install current components of the Manageability Suite included on the DRDVD + InstallSecuritySuite = 32 => Install current components of the Security Suite included on the DRDVD + RollbackPrevention = 64 => Enforce rollback prevention + + Please note that the Image Type AgentFlags DRDVD, CorporateReadyWithOffice, and CorporateReadyWithoutOffice are mutually exclusive. If you choose to set an Image type flag, you can only set one of the three flags. + +.PARAMETER OutputFile + Specifies the file to write output to instead of writing the output to the pipelineing output to the specified file, instead of writing it to the pipeline. + +.PARAMETER RemoteSigningServiceKeyID + Specifies the Signing Key ID to be used + +.PARAMETER RemoteSigningServiceURL + Specifies the (Key Management Service) KMS server URL (I.e.: https://.azurewebsites.net/) + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.LINK + [Blog post: Provisioning and Configuring HP Sure Recover with HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/provisioning-and-configuring-hp-sure-recover-hp-client-management-script-library) + +.NOTES + - Requires HP BIOS with HP Sure Recover support + +.EXAMPLE + New-HPSureRecoverConfigurationPayload -SigningKeyFile sk.pfx -BIOSFlags WiFi -AgentFlags DRDVD + +.EXAMPLE + New-HPSureRecoverConfigurationPayload -SigningKeyFile sk.pfx -BIOSFlags WiFi,SecureStorage -AgentFlags DRDVD,RollbackPrevention +#> +function New-HPSureRecoverConfigurationPayload +{ + [CmdletBinding(DefaultParameterSetName = "SF",HelpUri = "https://developers.hp.com/hp-client-management/doc/New-HPSureRecoverConfigurationPayload")] + param( + + [Parameter(ParameterSetName = "SF",Mandatory = $true,Position = 0)] + [System.IO.FileInfo]$SigningKeyFile, + + [Parameter(ValueFromPipeline,ParameterSetName = "SB",Mandatory = $true,Position = 0)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$SigningKeyCertificate, + + [Parameter(ParameterSetName = "SF",Mandatory = $false,Position = 1)] + [string]$SigningKeyPassword, + + [Parameter(ParameterSetName = "SF",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "SB",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 0)] + [uint32]$Nonce = [math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s").Replace(',','.')), + + [Parameter(ParameterSetName = "SF",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "SB",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 1)] + [Alias("OSImageFlags")] + [surerecover_os_flags_no_reserved]$BIOSFlags, # does not allow setting to reserved values + + [Parameter(ParameterSetName = "SF",Mandatory = $true,Position = 5)] + [Parameter(ParameterSetName = "SB",Mandatory = $true,Position = 5)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 2)] + [surerecover_re_flags_no_reserved]$AgentFlags, # does not allow setting to reserved values + + [Parameter(ParameterSetName = "SF",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "SB",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 3)] + [System.IO.FileInfo]$OutputFile, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 4)] + [string]$RemoteSigningServiceKeyID, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 5)] + [string]$RemoteSigningServiceURL, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 6)] + [switch]$CacheAccessToken + ) + + # Image Type AgentFlags DRDVD, CorporateReadyWithOffice. and CorporateReadyWithoutOffice are all mutually exclusive + # as only one of the three is valid at a time + if ($AgentFlags -band 1 -and ($AgentFlags -band 2 -or $AgentFlags -band 4) -or + $AgentFlags -band 2 -and ($AgentFlags -band 1 -or $AgentFlags -band 4) -or + $AgentFlags -band 4 -and ($AgentFlags -band 1 -or $AgentFlags -band 2)){ + throw "Cannot set multiple Image Type AgentFlags: DRDVD, CorporateReadyWithOffice, and CorporateReadyWithoutOffice are mutually exclusive." + } + + # surerecover_configuration_payload_t has flags enums with reserved values, + # but since the parameter validation ensures user cannot select reserved values to set, + # we can safely cast the values to uint32 to be used in the payload with reserved values + $data = New-Object -TypeName surerecover_configuration_payload_t + $data.os_flags = [uint32]$BIOSFlags + $data.re_flags = [uint32]$AgentFlags + $data.arp_counter = $Nonce + + $cmd = New-Object -TypeName surerecover_configuration_t + $cmd.Data = $data + + [byte[]]$payload = (Convert-HPPrivateObjectToBytes -obj $data -Verbose:$VerbosePreference)[0] + + if ($PSCmdlet.ParameterSetName -eq "RemoteSigning") { + $cmd.sig = Invoke-HPPrivateRemoteSignData -Data $payload -CertificateId $RemoteSigningServiceKeyID -KMSUri $RemoteSigningServiceURL -CacheAccessToken:$CacheAccessToken -Verbose:$VerbosePreference + } + else { + $sk = Get-HPPrivateX509CertCoalesce -File $SigningKeyFile -password $SigningKeyPassword -cert $SigningKeycertificate + $cmd.sig = Invoke-HPPrivateSignData -Data $payload -Certificate $sk.Full -Verbose:$VerbosePreference + } + + Write-Verbose "Building output document" + $output = New-Object -TypeName PortableFileFormat + $output.Data = (Convert-HPPrivateObjectToBytes -obj $cmd -Verbose:$VerbosePreference)[0] + $output.purpose = "hp:surerecover:configure" + $output.timestamp = Get-Date + + if ($OutputFile) { + Write-Verbose "Will output to file $OutputFile" + $f = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($OutputFile) + $output | ConvertTo-Json -Compress | Out-File -FilePath $f -Encoding utf8 + } + else { + $output | ConvertTo-Json -Compress + } +} + +<# +.SYNOPSIS + Creates a payload to configure HP Sure Recover OS or Recovery image failover + +.DESCRIPTION + This command creates a payload to configure HP Sure Recover OS or Recovery image failover. There are three signing options to choose from: + - Signing Key File (and Password) using -SigningKeyFile and -SigningKeyPassword parameters + - Signing Key Certificate using -SigningKeyCertificate parameter + - Remote Signing using -RemoteSigningServiceKeyID and -RemoteSigningServiceURL parameters + + Please note that using a Key File with Password in PFX format is recommended over using an X509 Certificate object because a private key in a certificate is not password protected. + + This command writes the created payload to the pipeline or to the file specified in the OutputFile parameter. This payload can then be passed to the Set-HPSecurePlatformPayload command. + + Security note: Payloads should only be created on secure servers. Once created, the payload may be transferred to a client and applied via the Set-HPSecurePlatformPayload command. Creating the payload and passing it to the Set-HPSecurePlatformPayload command via the pipeline is not a recommended production pattern. + +.PARAMETER Image + Specifies whether this command will create a configuration payload for a Recovery Agent image or a Recovery OS image. For now, only 'os' is supported. + +.PARAMETER SigningKeyFile + Specifies the path to the Secure Platform Management signing key, as a PFX file. If the PFX file is protected by a password (recommended), + the SigningKeyPassword parameter should also be provided. + +.PARAMETER SigningKeyPassword + Specifies the Secure Platform Management signing key file password, if required. + +.PARAMETER SigningKeyCertificate + Specifies the Secure Platform Management signing key certificate as an X509Certificate object. + +.PARAMETER Version + Specifies the operation version. Each new configuration payload must increment the last operation payload version, as available in the Get-HPSureRecoverFailoverConfiguration. If this parameter is not provided, this command will read from current system and increment it automatically. + +.PARAMETER Username + Specifies the username for accessing the url specified in the Url parameter, if any. + +.PARAMETER Password + Specifies the password for accessing the url specified in the Url parameter, if any. + +.PARAMETER Url + Specifies the URL from where to download the image. An empty URL can be specified to deprovision Failover. + +.PARAMETER Nonce + Specifies a Nonce. If nonce is specified, the Secure Platform Management subsystem will only accept commands with a nonce greater or equal to the last nonce sent. This approach helps to prevent replay attacks. If not specified, the nonce is inferred from the current local time. The current local time as the nonce works in most cases. However, this approach has a resolution of seconds, so when performing parallel operations or a high volume of operations, it is possible for the same counter to be interpreted for more than one command. In these cases, the caller should use its own nonce derivation and provide it through this parameter. + +.PARAMETER OutputFile + Specifies the file to write output to instead of writing the output to the pipelineing output to the specified file, instead of writing it to the pipeline. + +.PARAMETER RemoteSigningServiceKeyID + Specifies the Signing Key ID to be used + +.PARAMETER RemoteSigningServiceURL + Specifies the (Key Management Service) KMS server URL (I.e.: https://.azurewebsites.net/). This URL must be https. + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.NOTES + - Requires HP BIOS with HP Sure Recover support + +.EXAMPLE + New-HPSureRecoverFailoverConfigurationPayload -SigningKeyFile sk.pfx -Version 1 -Url '' + +.EXAMPLE + New-HPSureRecoverFailoverConfigurationPayload -SigningKeyFile sk.pfx -Image os -Version 1 -Nonce 2 -Url 'http://url.com/' -Username 'user' -Password 123 +#> +function New-HPSureRecoverFailoverConfigurationPayload +{ + [CmdletBinding(DefaultParameterSetName = "SF",HelpUri = "https://developers.hp.com/hp-client-management/doc/New-HPSureRecoverFailoverConfigurationPayload")] + param( + + [Parameter(ParameterSetName = "SF",Mandatory = $true,Position = 0)] + [System.IO.FileInfo]$SigningKeyFile, + + [Parameter(ValueFromPipeline,ParameterSetName = "SB",Mandatory = $true,Position = 0)] + [System.Security.Cryptography.X509Certificates.X509Certificate2]$SigningKeyCertificate, + + [Parameter(ParameterSetName = "SF",Mandatory = $false,Position = 1)] + [string]$SigningKeyPassword, + + [Parameter(ParameterSetName = "SF",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "SB",Mandatory = $false,Position = 1)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 0)] + [ValidateSet("os")] + [string]$Image = "os", + + [Parameter(ParameterSetName = "SF",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "SB",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 1)] + [uint16]$Version, + + [Parameter(ParameterSetName = "SF",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "SB",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 2)] + [string]$Username, + + [Parameter(ParameterSetName = "SF",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "SB",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 3)] + [string]$Password, + + [Parameter(ParameterSetName = "SF",Mandatory = $true,Position = 3)] + [Parameter(ParameterSetName = "SB",Mandatory = $true,Position = 2)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 4)] + [uri]$Url = "", + + [Parameter(ParameterSetName = "SF",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "SB",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 5)] + [uint32]$Nonce = [math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s").Replace(',','.')), + + [Parameter(ParameterSetName = "SF",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "SB",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 6)] + [System.IO.FileInfo]$OutputFile, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 7)] + [string]$RemoteSigningServiceKeyID, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $true,Position = 8)] + [string]$RemoteSigningServiceURL, + + [Parameter(ParameterSetName = "RemoteSigning",Mandatory = $false,Position = 9)] + [switch]$CacheAccessToken + ) + + if (-not $Version) { + try { + $Version = (Get-HPSureRecoverFailoverConfiguration -Image $Image).Version + 1 + } + catch { + # It is not possible to get current version if failover is not configured yet, assigning version 1 + $Version = 1 + } + Write-Verbose "New version number is $version" + } + + $opaque = New-Object opaque4096_t + $opaqueLength = 4096 + $mi_result = 0 + [byte]$index = 1 + + $cmd = '[DfmNativeSureRecover]::get_surerecover_failover_opaque' + (Test-OSBitness) + '($Nonce, $Version, $index, $Username, $Password, $($Url.ToString()), [ref]$opaque, [ref]$opaqueLength, [ref]$mi_result);' + $result = Invoke-Expression -Command $cmd + Test-HPPrivateCustomResult -result $result -mi_result $mi_result -Category 0x05 + + [byte[]]$payload = $opaque.raw[0..($opaqueLength - 1)] + + if ($PSCmdlet.ParameterSetName -eq "RemoteSigning") { + $sig = Invoke-HPPrivateRemoteSignData -Data $payload -CertificateId $RemoteSigningServiceKeyID -KMSUri $RemoteSigningServiceURL -CacheAccessToken:$CacheAccessToken -Verbose:$VerbosePreference + } + else { + $sk = Get-HPPrivateX509CertCoalesce -File $SigningKeyFile -password $SigningKeyPassword -cert $SigningKeycertificate + $sig = Invoke-HPPrivateSignData -Data $payload -Certificate $sk.Full -Verbose:$VerbosePreference + } + + [byte[]]$out = $sig + $payload + + Write-Verbose "Building output document" + $output = New-Object -TypeName PortableFileFormat + $output.Data = $out + $output.purpose = "hp:surerecover:failover:os_image" + $output.timestamp = Get-Date + + if ($OutputFile) { + Write-Verbose "Will output to file $OutputFile" + $f = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($OutputFile) + $output | ConvertTo-Json -Compress | Out-File -FilePath $f -Encoding utf8 + } + else { + $output | ConvertTo-Json -Compress + } + +} + +<# +.SYNOPSIS + Creates a payload to trigger HP Sure Recover events + +.DESCRIPTION + This command creates a payload to trigger HP Sure Recover. There are three signing options to choose from: + - Signing Key File (and Password) using -SigningKeyFile and -SigningKeyPassword parameters + - Signing Key Certificate using -SigningKeyCertificate parameter + - Remote Signing using -RemoteSigningServiceKeyID and -RemoteSigningServiceURL parameters + + Please note that using a Key File with Password in PFX format is recommended over using an X509 Certificate object because a private key in a certificate is not password protected. + + This command writes the created payload to the pipeline or to the file specified in the OutputFile parameter. This payload can then be passed to the Set-HPSecurePlatformPayload command. + + Security note: Payloads should only be created on secure servers. Once created, the payload may be transferred to a client and applied via the Set-HPSecurePlatformPayload command. Creating the payload and passing it to the Set-HPSecurePlatformPayload command via the pipeline is not a recommended production pattern. + +.PARAMETER SigningKeyFile + Specifies the path to the Secure Platform Management signing key as a PFX file. If the PFX file is protected by a password (recommended), the SigningKeyPassword parameter should also be provided. + +.PARAMETER SigningKeyPassword + Specifies the Secure Platform Management signing key file password, if required. + +.PARAMETER SigningKeyCertificate + Specifies the Secure Platform Management signing key certificate as an X509Certificate object + +.PARAMETER Nonce + Specifies a Nonce. If nonce is specified, the Secure Platform Management subsystem will only accept commands with a nonce greater or equal to the last nonce sent. This approach helps to prevent replay attacks. If not specified, the nonce is inferred from the current local time. The current local time as the nonce works in most cases. However, this approach has a resolution of seconds, so when performing parallel operations or a high volume of operations, it is possible for the same counter to be interpreted for more than one command. In these cases, the caller should use its own nonce derivation and provide it through this parameter. + +.PARAMETER Set + If specified, this command sets the trigger information. This parameter is used by default and optional. + +.PARAMETER Cancel + If specified, this command clears any existing trigger definition. + +.PARAMETER ForceAfterReboot + Specifies how many reboots to count before applying the trigger. If not specified, the value defaults to 1 (next reboot). + +.PARAMETER PromptPolicy + Specifies the prompting policy. If not specified, it will default to prompt before recovery, and on error. + +.PARAMETER ErasePolicy + Specifies the erase policy for the imaging process + +.PARAMETER OutputFile + Specifies the file to write output to instead of writing the output to the pipelineing output to the specified file, instead of writing it to the pipeline. + +.PARAMETER RemoteSigningServiceKeyID + Specifies the Signing Key ID to be used + +.PARAMETER RemoteSigningServiceURL + Specifies the (Key Management Service) KMS server URL (I.e.: https://.azurewebsites.net/) + +.PARAMETER CacheAccessToken + If specified, the access token is cached in msalcache.dat file and user credentials will not be asked again until the credentials expire. + This parameter should be specified for caching the access token when performing multiple operations on the KMS server. + If access token is not cached, the user must re-enter credentials on each call of this command. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.LINK + [Blog post: Provisioning and Configuring HP Sure Recover with HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/provisioning-and-configuring-hp-sure-recover-hp-client-management-script-library) + +.NOTES + - Requires HP BIOS with HP Sure Recover support + +.EXAMPLE + New-HPSureRecoverTriggerRecoveryPayload -SigningKeyFile sk.pfx +#> +function New-HPSureRecoverTriggerRecoveryPayload +{ + [CmdletBinding(DefaultParameterSetName = "SF_Schedule",HelpUri = "https://developers.hp.com/hp-client-management/doc/New-HPSureRecoverTriggerRecoveryPayload")] + param( + + [Parameter(ParameterSetName = "SF_Schedule",Mandatory = $true,Position = 0)] + [Parameter(ParameterSetName = "SF_Cancel",Mandatory = $true,Position = 0)] + [string]$SigningKeyFile, + + [Parameter(ParameterSetName = "SF_Schedule",Mandatory = $false,Position = 1)] + [Parameter(ParameterSetName = "SF_Cancel",Mandatory = $false,Position = 1)] + [string]$SigningKeyPassword, + + [Parameter(ValueFromPipeline,ParameterSetName = "SB_Schedule",Mandatory = $true,Position = 0)] + [Parameter(ValueFromPipeline,ParameterSetName = "SB_Cancel",Mandatory = $true,Position = 0)] + [byte[]]$SigningKeyCertificate, + + [Parameter(ParameterSetName = "SF_Schedule",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "SF_Cancel",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "SB_Schedule",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "SB_Cancel",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "RemoteSigning_Schedule",Mandatory = $false,Position = 0)] + [Parameter(ParameterSetName = "RemoteSigning_Cancel",Mandatory = $false,Position = 0)] + [uint32]$Nonce = [math]::Floor([decimal](Get-Date (Get-Date).ToUniversalTime() -UFormat "%s").Replace(',','.')), + + [Parameter(ParameterSetName = "SF_Schedule",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "SB_Schedule",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "RemoteSigning_Schedule",Mandatory = $false,Position = 1)] + [switch]$Set, + + [Parameter(ParameterSetName = "SF_Cancel",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "SB_Cancel",Mandatory = $true,Position = 4)] + [Parameter(ParameterSetName = "RemoteSigning_Cancel",Mandatory = $true,Position = 1)] + [switch]$Cancel, + + [Parameter(ParameterSetName = "SF_Schedule",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "SB_Schedule",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "RemoteSigning_Schedule",Mandatory = $false,Position = 2)] + [ValidateRange(1,7)] + [byte]$ForceAfterReboot = 1, + + [Parameter(ParameterSetName = "SF_Schedule",Mandatory = $false,Position = 7)] + [Parameter(ParameterSetName = "SB_Schedule",Mandatory = $false,Position = 7)] + [Parameter(ParameterSetName = "RemoteSigning_Schedule",Mandatory = $false,Position = 3)] + [surerecover_prompt_policy]$PromptPolicy = "PromptBeforeRecovery,PromptOnError", + + [Parameter(ParameterSetName = "SF_Schedule",Mandatory = $false,Position = 8)] + [Parameter(ParameterSetName = "SB_Schedule",Mandatory = $false,Position = 8)] + [Parameter(ParameterSetName = "RemoteSigning_Schedule",Mandatory = $false,Position = 4)] + [surerecover_erase_policy]$ErasePolicy = "None", + + [Parameter(ParameterSetName = "SF_Schedule",Mandatory = $false,Position = 9)] + [Parameter(ParameterSetName = "SB_Schedule",Mandatory = $false,Position = 9)] + [Parameter(ParameterSetName = "SF_Cancel",Mandatory = $false,Position = 9)] + [Parameter(ParameterSetName = "SB_Cancel",Mandatory = $false,Position = 9)] + [Parameter(ParameterSetName = "RemoteSigning_Schedule",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "RemoteSigning_Cancel",Mandatory = $false,Position = 2)] + [System.IO.FileInfo]$OutputFile, + + [Parameter(ParameterSetName = "RemoteSigning_Schedule",Mandatory = $true,Position = 6)] + [Parameter(ParameterSetName = "RemoteSigning_Cancel",Mandatory = $true,Position = 3)] + [string]$RemoteSigningServiceKeyID, + + [Parameter(ParameterSetName = "RemoteSigning_Schedule",Mandatory = $true,Position = 7)] + [Parameter(ParameterSetName = "RemoteSigning_Cancel",Mandatory = $true,Position = 4)] + [string]$RemoteSigningServiceURL, + + [Parameter(ParameterSetName = "RemoteSigning_Schedule",Mandatory = $false,Position = 8)] + [Parameter(ParameterSetName = "RemoteSigning_Cancel",Mandatory = $false,Position = 5)] + [switch]$CacheAccessToken + ) + + $data = New-Object -TypeName surerecover_trigger_payload_t + $data.arp_counter = $Nonce + $data.bios_trigger_flags = 0 + + $output = New-Object -TypeName PortableFileFormat + + if ($Cancel.IsPresent) + { + Write-Verbose "Creating payload to cancel trigger" + $output.purpose = "hp:surerecover:trigger" + $data.bios_trigger_flags = 0 + $data.re_trigger_flags = 0 + } + else { + Write-Verbose ("Creating payload to set trigger") + $output.purpose = "hp:surerecover:trigger" + $data.bios_trigger_flags = [uint32]$ForceAfterReboot + $data.re_trigger_flags = [uint32]$PromptPolicy + $data.re_trigger_flags = ([uint32]$ErasePolicy -shl 4) -bor $data.re_trigger_flags + } + + $cmd = New-Object -TypeName surerecover_trigger_t + $cmd.Data = $data + + [byte[]]$payload = (Convert-HPPrivateObjectToBytes -obj $data -Verbose:$VerbosePreference)[0] + + if ($PSCmdlet.ParameterSetName -eq "RemoteSigning_Schedule" -or $PSCmdlet.ParameterSetName -eq "RemoteSigning_Cancel") { + $cmd.sig = Invoke-HPPrivateRemoteSignData -Data $payload -CertificateId $RemoteSigningServiceKeyID -KMSUri $RemoteSigningServiceURL -CacheAccessToken:$CacheAccessToken -Verbose:$VerbosePreference + } + else { + $sk = Get-HPPrivateX509CertCoalesce -File $SigningKeyFile -password $SIgningKeyPassword -cert $SigningKeycertificate -Verbose:$VerbosePreference + $cmd.sig = Invoke-HPPrivateSignData -Data $payload -Certificate $sk.Full -Verbose:$VerbosePreference + } + Write-Verbose "Building output document with nonce $([BitConverter]::GetBytes($nonce))" + + $output.Data = (Convert-HPPrivateObjectToBytes -obj $cmd -Verbose:$VerbosePreference)[0] + Write-Verbose "Sending document of size $($output.data.length)" + $output.timestamp = Get-Date + + if ($OutputFile) { + Write-Verbose "Will output to file $OutputFile" + $f = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($OutputFile) + $output | ConvertTo-Json -Compress | Out-File -FilePath $f -Encoding utf8 + } + else { + $output | ConvertTo-Json -Compress + } +} + + +<# +.SYNOPSIS + Invokes the WMI command to trigger the BIOS to perform a service event on the next boot + +.DESCRIPTION + This command invokes the WMI command to trigger the BIOS to perform a service event on the next boot. If the hardware option is not present, this command will throw a NotSupportedException exception. + + The BIOS will then compare SR_AED to HP_EAD and agent will compare SR_Image to HP_Image and update as necessary. The CloudRecovery.exe is the tool that performs the actual update. + +.LINK + [Blog post: HP Secure Platform Management with the HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/hp-secure-platform-management-hp-client-management-script-library) + +.LINK + [Blog post: Provisioning and Configuring HP Sure Recover with HP Client Management Script Library](https://developers.hp.com/hp-client-management/blog/provisioning-and-configuring-hp-sure-recover-hp-client-management-script-library) + + +.NOTES + - Requires HP BIOS with HP Sure Recover support + - Requires Embedded Reimaging device hardware option + +.EXAMPLE + Invoke-HPSureRecoverTriggerUpdate +#> +function Invoke-HPSureRecoverTriggerUpdate +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Invoke-HPSureRecoverTriggerUpdate")] + param() + + $mi_result = 0 + $cmd = '[DfmNativeSureRecover]::raise_surerecover_service_event_opaque' + (Test-OSBitness) + '($null, $null, [ref]$mi_result);' + $result = Invoke-Expression -Command $cmd + Test-HPPrivateCustomResult -result $result -mi_result $mi_result -Category 0x05 +} + + +# SIG # Begin signature block +# MIIoHgYJKoZIhvcNAQcCoIIoDzCCKAsCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCQkiFCsZwSXYri +# RHyXXjE+2EaSRgip2+A0HDZ4e+ry/6CCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6jCCGeYCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIK7rSRA2 +# OYEjdWGHpMD20gxTgU0u0wedJEYSyxdL23pRMA0GCSqGSIb3DQEBAQUABIIBgIV9 +# 4Y6nlq6OXMQ0GJkw9b3r1Az3NKSXu2FRFMEb7ZfVfB/HS2b4Ij9O8yFUFQtp4Drd +# BPdVctRbntFE/hxV1S4oGhHz5QP/L/8+1KKEDmSCjsVRhd2Y4g2BPqQsX8tESDz9 +# 00y8UEGlAyBQPltIj/MqmlwUUNMcak3tHljoeoiH7pu5ksZL/P5lRtCkK8TeqCIB +# sYqviy4Gn7PDjZvWpFhsw4fQSSqHgID9fYWbPuFyODjmrWYx8t7b4Uc3jgZzCmPr +# x2tzMH5ZX2V8SDB37hhNajHgC/dJ95Bl2Rc2Su/4+puQr77lOXjw/Y/kuooAmrIk +# u+0OldvIZxFep2gwOLzlEPeKkg6y5LBjg7uee/P7YIXND/CFPw8wEVe6Y7TwEmlS +# ced8Bt06dHHTYn0zLRG/ATKRFcYuNlN3slgX85Ceelcl7cXmXhtiJahfizXdGugv +# Bjta6CFbM0S8Z/IZalXX4wj1fZJOzZ0pb1AY/mangTE0htBiz6gQxVGhYOAYzaGC +# F0Awghc8BgorBgEEAYI3AwMBMYIXLDCCFygGCSqGSIb3DQEHAqCCFxkwghcVAgED +# MQ8wDQYJYIZIAWUDBAIBBQAweAYLKoZIhvcNAQkQAQSgaQRnMGUCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCD3n4+oF0eKlg2EtGPVyYW9MS1eiHYcOOmG +# FC6dB2FjYAIRANdyh1JGOO/ufeQTocv57rQYDzIwMjQwODI3MTY1NTUwWqCCEwkw +# ggbCMIIEqqADAgECAhAFRK/zlJ0IOaa/2z9f5WEWMA0GCSqGSIb3DQEBCwUAMGMx +# CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMy +# RGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcg +# Q0EwHhcNMjMwNzE0MDAwMDAwWhcNMzQxMDEzMjM1OTU5WjBIMQswCQYDVQQGEwJV +# UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xIDAeBgNVBAMTF0RpZ2lDZXJ0IFRp +# bWVzdGFtcCAyMDIzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo1NF +# hx2DjlusPlSzI+DPn9fl0uddoQ4J3C9Io5d6OyqcZ9xiFVjBqZMRp82qsmrdECmK +# HmJjadNYnDVxvzqX65RQjxwg6seaOy+WZuNp52n+W8PWKyAcwZeUtKVQgfLPywem +# MGjKg0La/H8JJJSkghraarrYO8pd3hkYhftF6g1hbJ3+cV7EBpo88MUueQ8bZlLj +# yNY+X9pD04T10Mf2SC1eRXWWdf7dEKEbg8G45lKVtUfXeCk5a+B4WZfjRCtK1ZXO +# 7wgX6oJkTf8j48qG7rSkIWRw69XloNpjsy7pBe6q9iT1HbybHLK3X9/w7nZ9MZll +# R1WdSiQvrCuXvp/k/XtzPjLuUjT71Lvr1KAsNJvj3m5kGQc3AZEPHLVRzapMZoOI +# aGK7vEEbeBlt5NkP4FhB+9ixLOFRr7StFQYU6mIIE9NpHnxkTZ0P387RXoyqq1AV +# ybPKvNfEO2hEo6U7Qv1zfe7dCv95NBB+plwKWEwAPoVpdceDZNZ1zY8SdlalJPrX +# xGshuugfNJgvOuprAbD3+yqG7HtSOKmYCaFxsmxxrz64b5bV4RAT/mFHCoz+8LbH +# 1cfebCTwv0KCyqBxPZySkwS0aXAnDU+3tTbRyV8IpHCj7ArxES5k4MsiK8rxKBMh +# SVF+BmbTO77665E42FEHypS34lCh8zrTioPLQHsCAwEAAaOCAYswggGHMA4GA1Ud +# DwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATAfBgNVHSMEGDAWgBS6 +# FtltTYUvcyl2mi91jGogj57IbzAdBgNVHQ4EFgQUpbbvE+fvzdBkodVWqWUxo97V +# 40kwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp +# Z2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNybDCB +# kAYIKwYBBQUHAQEEgYMwgYAwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj +# ZXJ0LmNvbTBYBggrBgEFBQcwAoZMaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t +# L0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNy +# dDANBgkqhkiG9w0BAQsFAAOCAgEAgRrW3qCptZgXvHCNT4o8aJzYJf/LLOTN6l0i +# kuyMIgKpuM+AqNnn48XtJoKKcS8Y3U623mzX4WCcK+3tPUiOuGu6fF29wmE3aEl3 +# o+uQqhLXJ4Xzjh6S2sJAOJ9dyKAuJXglnSoFeoQpmLZXeY/bJlYrsPOnvTcM2Jh2 +# T1a5UsK2nTipgedtQVyMadG5K8TGe8+c+njikxp2oml101DkRBK+IA2eqUTQ+OVJ +# dwhaIcW0z5iVGlS6ubzBaRm6zxbygzc0brBBJt3eWpdPM43UjXd9dUWhpVgmagNF +# 3tlQtVCMr1a9TMXhRsUo063nQwBw3syYnhmJA+rUkTfvTVLzyWAhxFZH7doRS4wy +# w4jmWOK22z75X7BC1o/jF5HRqsBV44a/rCcsQdCaM0qoNtS5cpZ+l3k4SF/Kwtw9 +# Mt911jZnWon49qfH5U81PAC9vpwqbHkB3NpE5jreODsHXjlY9HxzMVWggBHLFAx+ +# rrz+pOt5Zapo1iLKO+uagjVXKBbLafIymrLS2Dq4sUaGa7oX/cR3bBVsrquvczro +# SUa31X/MtjjA2Owc9bahuEMs305MfR5ocMB3CtQC4Fxguyj/OOVSWtasFyIjTvTs +# 0xf7UGv/B3cfcZdEQcm4RtNsMnxYL2dHZeUbc7aZ+WssBkbvQR7w8F/g29mtkIBE +# r4AQQYowggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqGSIb3DQEB +# CwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNV +# BAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQg +# Um9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMxCzAJBgNV +# BAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNl +# cnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggIi +# MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXHJQPE8pE3 +# qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMfUBMLJnOW +# bfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w1lbU5ygt +# 69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRktFLydkf3 +# YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYbqMFkdECn +# wHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUmcJgmf6Aa +# RyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP65x9abJTy +# UpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzKQtwYSH8U +# NM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo80VgvCON +# WPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjBJgj5FBAS +# A31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXcheMBK9Rp61 +# 03a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAd +# BgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF +# BwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln +# aWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJo +# dHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy +# bDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQEL +# BQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd4ksp+3CK +# Daopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiCqBa9qVbP +# FXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl/Yy8ZCaH +# bJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeCRK6ZJxur +# JB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYTgAnEtp/N +# h4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/a6fxZsNB +# zU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37xJV77Qpf +# MzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmLNriT1Oby +# F5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0YgkPCr2B +# 2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJRyvmfxqk +# hQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIFjTCCBHWg +# AwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +# EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +# cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcN +# MjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEVMBMG +# A1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +# HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqGSIb3DQEB +# AQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +# pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+ +# n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYykt +# zuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw +# 2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6Qu +# BX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC +# 5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK +# 3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3 +# IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEP +# lAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98 +# THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t9dmpsh3l +# GwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8w +# DgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0 +# cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0 +# cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MEUGA1Ud +# HwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz +# c3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAowCDAGBgRVHSAAMA0GCSqGSIb3DQEB +# DAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9mqyhhyzshV6pGrsi+IcaaVQi +# 7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxSA8hO0Cre+i1Wz/n096wwepqL +# sl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE1Od/6Fmo8L8vC6bp8jQ87PcDx4eo +# 0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSMb++hUD38dglohJ9vytsgjTVg +# HAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbObyMt9H5xaiNrIv8SuFQtJ37YOtnw +# toeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMYIDdjCCA3ICAQEwdzBjMQswCQYDVQQG +# EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0 +# IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAFRK/z +# lJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUAoIHRMBoGCSqGSIb3DQEJAzENBgsq +# hkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwODI3MTY1NTUwWjArBgsqhkiG +# 9w0BCRACDDEcMBowGDAWBBRm8CsywsLJD4JdzqqKycZPGZzPQDAvBgkqhkiG9w0B +# CQQxIgQg1dYmgcj7iRfy+0HoNy8nbKUTVV6TPw8wA/XxDZtua4IwNwYLKoZIhvcN +# AQkQAi8xKDAmMCQwIgQg0vbkbe10IszR1EBXaEE2b4KK2lWarjMWr00amtQMeCgw +# DQYJKoZIhvcNAQEBBQAEggIAdw19FK5nVPiEAbol+u+DMqD0l3sJ7ml2/e4bukwY +# fUT03GT83uQrLRTUThwaX3kuCKX2it0UmX8eJ/tsb1cFRfHOE9SFnqYJQ9Dggf68 +# 2ekbPuohIrJqs6PenIuCMcmZPB/MSn9Xr2wgKyWBr4mT3q9Ap+r2xcN+3w0RUEaR +# twaVBq8/5LgZ1rXHuN1MAPqWR3wTecCE2bdS4YRT3R3XQFXmnJsnEan+3k4MTyBL +# fppdWxrmmCENyZY4ENRsep66ZAqX+7TMowZp4OHru5tEtwERl8EzmvzMmsGfYH9S +# 3MT3hJVz79QSnnhf9fihtVFFObtv1llaOEwmG8a5rKt2dBpTjjItjs9dPag3zwND +# zWjbrJ1QDwuRIOe2leT98hNjPNqWRrTt9Py31cJd0LjxxJ2Mv/KKm7mNgykzcIgX +# mzcmhEv9ckrBuLAb+uYY8sUrBvU+DR/UlqjI1vCW3hEOmAn05VT2xD2AH8iMZHwB +# m3VsR1hW7JGEIHcNz8POWG72Vi0ESdav5OCItc55k191Q4P765/Z74idMGLqBr6e +# fMFNOV16srKAhxDyAx9HC4Jxci420DU9D+1X9C1m/TO9vR7kyysqhsWmLZbEgkBn +# frwwrfU9474/pxCR+U+5QbbCXjjskN7gO1z2SHBtj1ZBxc6X6MMzDJkXBA/T7GKU +# rFE= +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Firmware/HP.Firmware.SureView.psm1 b/Bios-Update-HP-v2.0/module/HP.Firmware/HP.Firmware.SureView.psm1 new file mode 100644 index 0000000..19d690d --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Firmware/HP.Firmware.SureView.psm1 @@ -0,0 +1,424 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + +using namespace HP.CMSLHelper + +Set-StrictMode -Version 3.0 +$ErrorActionPreference = "Stop" +#requires -Modules "HP.Private" + +# CMSL is normally installed in C:\Program Files\WindowsPowerShell\Modules +# but if installed via PSGallery and via PS7, it is installed in a different location +if (Test-Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll") { + Add-Type -Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll" +} +else{ + Add-Type -Path "$PSScriptRoot\..\..\HP.Private\1.7.2\HP.CMSLHelper.dll" +} + +<# +.SYNOPSIS + Retrieves the state of the HP Sure View electronic privacy filter if available + +.DESCRIPTION + This command retrieves the state of HP Sure View electronic privacy filter if available on the system. +.NOTES + - Requires HP BIOS. + - This command requires elevated privileges. + +.EXAMPLE + Get-HPSureViewState + +.LINK + [Set-HPSureViewState](https://developers.hp.com/hp-client-management/doc/Set-HPSureViewState) + +.LINK + [Test-HPSureViewIsSupported](https://developers.hp.com/hp-client-management/doc/Test-HPSureViewIsSupported) + +.NOTES + Information about HP Sure View forced state is available via the public WMI property 'Force Enable HP Sure View"' +#> +function Get-HPSureViewState +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPSureViewState")] + param() + $mi_result = 0 + + $data = New-Object -TypeName sureview_state_t + switch (Test-OSBitness) { + 32 { $result = [DfmNativeSureView]::get_sureview_state32([ref]$data,[ref]$mi_result) } + 64 { $result = [DfmNativeSureView]::get_sureview_state64([ref]$data,[ref]$mi_result) } + } + + Test-HPPrivateCustomResult -result $result -mi_result $mi_result -Category 0x02 + + if (($data.Status -eq [sureview_status_t]::sureview_unknown) -or + ($data.Status -eq [sureview_status_t]::sureview_unsupported) + ) + { + Write-Verbose ("HP Sure View is not supported on this system.") + throw [NotSupportedException]"This platform does not support HP Sure View" + } + + New-Object -TypeName PSObject -Property @{ + State = $data.Status + VisibilityPercentage = $data.visibility + Capabilities = $data.Capabilities + } +} + +<# +.SYNOPSIS + Checks if HP Sure View is supported + +.DESCRIPTION + This command returns $true if HP Sure View is supported by the current platform and returns $false otherwise. + +.NOTES + - Requires HP BIOS. + - This command requires elevated privileges. + +.EXAMPLE + Test-HPSureViewIsSupported + +.LINK + [Get-HPSureViewState](https://developers.hp.com/hp-client-management/doc/Get-HPSureViewState) + +.LINK + [Set-HPSureViewState](https://developers.hp.com/hp-client-management/doc/Set-HPSureViewState) + +#> +function Test-HPSureViewIsSupported +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Test-HPSureViewIsSupported")] + param() + $mi_result = 0 + $data = New-Object -TypeName sureview_state_t + switch (Test-OSBitness) { + 32 { $result = [DfmNativeSureView]::get_sureview_state32([ref]$data,[ref]$mi_result) } + 64 { $result = [DfmNativeSureView]::get_sureview_state64([ref]$data,[ref]$mi_result) } + } + Test-HPPrivateCustomResult -result $result -mi_result $mi_result -Category 0x02 + + if (($data.Status -eq [sureview_status_t]::sureview_unknown) -or + ($data.Status -eq [sureview_status_t]::sureview_unsupported) + ) + { + $false + } + else + { + $true + } +} + + + +<# +.SYNOPSIS + Sets HP Sure View state + +.DESCRIPTION + This command turns HP Sure View on and off and controls settings associated with HP Sure View. + +.NOTES + - Requires HP BIOS. + - This command requires elevated privileges. + +.EXAMPLE + Set-HPSureViewState -on -level 80 + +.EXAMPLE + Set-HPSureViewState -off + +.PARAMETER on + If specified, this command turns HP Sure View on. + +.PARAMETER off + If specified, this command turns HP Sure View off. + +.PARAMETER level + Specifies the privacy level, as an integer between 0 and 100, if turning HP Sure View on. A privacy level of 100 will provide the most privacy, but it would also reduce the screen brightness the most. + If this parameter is not specified, turning HP Sure View on will default the privacy level to the maximum privacy level. + +.LINK + [Test-HPSureViewIsSupported](https://developers.hp.com/hp-client-management/doc/Test-HPSureViewIsSupported) + +.LINK + [Get-HPSureViewState](https://developers.hp.com/hp-client-management/doc/Get-HPSureViewState) + +.NOTES + To force HP Sure View on or off, you can set the public WMI setting 'Force Enable HP Sure View' to Enable or Disable, as needed. +#> +function Set-HPSureViewState +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Set-HPSureViewState")] + param( + [Parameter(ParameterSetName = 'turnOn',Position = 0,Mandatory = $true)] + [switch]$On, + + [Parameter(ParameterSetName = 'turnOff',Position = 0,Mandatory = $true)] + [switch]$Off, + + [ValidateRange(-1,100)] + [Parameter(ParameterSetName = 'turnOn',Position = 1,Mandatory = $false)] + [int]$Level = -1 + ) + + if ((Test-HPSureViewIsSupported) -eq $false) + { + throw [NotSupportedException]"This platform does not support HP Sure View" + } + + if ($level -ne -1) { $level = (100 - $level) } + + if ($on.IsPresent -and ($level -ne -1)) { + Write-Verbose ("Setting Sure View on to privacy level $level") + $wanted = [sureview_desired_state_t]::sureview_desired_on + } + elseif ($on.IsPresent) { + Write-Verbose ("Setting Sure View on to maximum privacy") + $wanted = [sureview_desired_state_t]::sureview_desired_on_max + $level = 0 + } + else { + Write-Verbose ("Setting Sure View off") + $wanted = [sureview_desired_state_t]::sureview_desired_off + $level = 0 + } + + $mi_result = 0 + switch (Test-OSBitness) { + 32 { $result = [DfmNativeSureView]::set_sureview_state32($wanted,$level,[ref]$mi_result) } + 64 { $result = [DfmNativeSureView]::set_sureview_state64($wanted,$level,[ref]$mi_result) } + } + Test-HPPrivateCustomResult -result $result -mi_result $mi_result -Category 0x02 +} + + + +# SIG # Begin signature block +# MIIoHQYJKoZIhvcNAQcCoIIoDjCCKAoCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBP/WGvq1OeTPKr +# tZgKl8BW7ffh9ayf35zlwZK4TUrZYqCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6TCCGeUCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIKzpkniN +# CP9DezQnGpwc1u1twUhBVu96G2Ns74BP+CdRMA0GCSqGSIb3DQEBAQUABIIBgHbh +# c0kx6X9t9CE7o+L7adgKz/Sm7NaKvsmckhB3IY4ngSm06oVISjoF/Wn8e7nPCxca +# r0cOtaJxBHPKC5k5W5K2/TeUYCeoVtCNk3mCgPQB7tM1XuC303fIMZacQQcbn2L7 +# Fn2dbvModkcv+xhp+cRn3eqH1ViwyuSYKvCWyUuoYR5l0Grjrzs8O8YKGwXbh1np +# 5PHuyBvKy8jiY9G3uil4oXMA++3dFTzg2xrABtlKJPsNC3KQbM+ib06nJwx6hPJm +# QOOrVHCydKs594hMhT1L5D8GIqKrGUGmi6yWFfbASqziyelPuxHVGj3Glzox/j9w +# AuDurHDliGvvxaGaY7ImwGjxFXGdLXtx1x6uPuDlaUMGS05SYTj1qM+fviDj8HRY +# LwK6X2p5AAfnIyRMpReDCs9mR/oSC5CXiNj57XOAls56/Bo60qWTFrTqUSqAjgft +# oQwEREcPlIfc/9LBZvWm8+mIrzINYNofvvkw5PC6XzKYfMZ1oRpKKU3aGJFIT6GC +# Fz8wghc7BgorBgEEAYI3AwMBMYIXKzCCFycGCSqGSIb3DQEHAqCCFxgwghcUAgED +# MQ8wDQYJYIZIAWUDBAIBBQAwdwYLKoZIhvcNAQkQAQSgaARmMGQCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCCupNEXllsxa6iokTJd3Webq/TZ2n5q65fp +# Wk/XuiHgjgIQEP9iaomNp7EwJTjzK6Z9nRgPMjAyNDA4MjcxNjU1NTBaoIITCTCC +# BsIwggSqoAMCAQICEAVEr/OUnQg5pr/bP1/lYRYwDQYJKoZIhvcNAQELBQAwYzEL +# MAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJE +# aWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBD +# QTAeFw0yMzA3MTQwMDAwMDBaFw0zNDEwMTMyMzU5NTlaMEgxCzAJBgNVBAYTAlVT +# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEgMB4GA1UEAxMXRGlnaUNlcnQgVGlt +# ZXN0YW1wIDIwMjMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjU0WH +# HYOOW6w+VLMj4M+f1+XS512hDgncL0ijl3o7Kpxn3GIVWMGpkxGnzaqyat0QKYoe +# YmNp01icNXG/OpfrlFCPHCDqx5o7L5Zm42nnaf5bw9YrIBzBl5S0pVCB8s/LB6Yw +# aMqDQtr8fwkklKSCGtpqutg7yl3eGRiF+0XqDWFsnf5xXsQGmjzwxS55DxtmUuPI +# 1j5f2kPThPXQx/ZILV5FdZZ1/t0QoRuDwbjmUpW1R9d4KTlr4HhZl+NEK0rVlc7v +# CBfqgmRN/yPjyobutKQhZHDr1eWg2mOzLukF7qr2JPUdvJscsrdf3/Dudn0xmWVH +# VZ1KJC+sK5e+n+T9e3M+Mu5SNPvUu+vUoCw0m+PebmQZBzcBkQ8ctVHNqkxmg4ho +# Yru8QRt4GW3k2Q/gWEH72LEs4VGvtK0VBhTqYggT02kefGRNnQ/fztFejKqrUBXJ +# s8q818Q7aESjpTtC/XN97t0K/3k0EH6mXApYTAA+hWl1x4Nk1nXNjxJ2VqUk+tfE +# ayG66B80mC866msBsPf7Kobse1I4qZgJoXGybHGvPrhvltXhEBP+YUcKjP7wtsfV +# x95sJPC/QoLKoHE9nJKTBLRpcCcNT7e1NtHJXwikcKPsCvERLmTgyyIryvEoEyFJ +# UX4GZtM7vvrrkTjYUQfKlLfiUKHzOtOKg8tAewIDAQABo4IBizCCAYcwDgYDVR0P +# AQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# IAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQYMBaAFLoW +# 2W1NhS9zKXaaL3WMaiCPnshvMB0GA1UdDgQWBBSltu8T5+/N0GSh1VapZTGj3tXj +# STBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln +# aUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3JsMIGQ +# BggrBgEFBQcBAQSBgzCBgDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl +# cnQuY29tMFgGCCsGAQUFBzAChkxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v +# RGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3J0 +# MA0GCSqGSIb3DQEBCwUAA4ICAQCBGtbeoKm1mBe8cI1PijxonNgl/8ss5M3qXSKS +# 7IwiAqm4z4Co2efjxe0mgopxLxjdTrbebNfhYJwr7e09SI64a7p8Xb3CYTdoSXej +# 65CqEtcnhfOOHpLawkA4n13IoC4leCWdKgV6hCmYtld5j9smViuw86e9NwzYmHZP +# VrlSwradOKmB521BXIxp0bkrxMZ7z5z6eOKTGnaiaXXTUOREEr4gDZ6pRND45Ul3 +# CFohxbTPmJUaVLq5vMFpGbrPFvKDNzRusEEm3d5al08zjdSNd311RaGlWCZqA0Xe +# 2VC1UIyvVr1MxeFGxSjTredDAHDezJieGYkD6tSRN+9NUvPJYCHEVkft2hFLjDLD +# iOZY4rbbPvlfsELWj+MXkdGqwFXjhr+sJyxB0JozSqg21Llyln6XeThIX8rC3D0y +# 33XWNmdaifj2p8flTzU8AL2+nCpseQHc2kTmOt44OwdeOVj0fHMxVaCAEcsUDH6u +# vP6k63llqmjWIso765qCNVcoFstp8jKastLYOrixRoZruhf9xHdsFWyuq69zOuhJ +# RrfVf8y2OMDY7Bz1tqG4QyzfTkx9HmhwwHcK1ALgXGC7KP845VJa1qwXIiNO9OzT +# F/tQa/8Hdx9xl0RBybhG02wyfFgvZ0dl5Rtztpn5aywGRu9BHvDwX+Db2a2QgESv +# gBBBijCCBq4wggSWoAMCAQICEAc2N7ckVHzYR6z9KGYqXlswDQYJKoZIhvcNAQEL +# BQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UE +# CxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBS +# b290IEc0MB4XDTIyMDMyMzAwMDAwMFoXDTM3MDMyMjIzNTk1OVowYzELMAkGA1UE +# BhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2Vy +# dCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMaGNQZJs8E9cklRVcclA8TykTep +# l1Gh1tKD0Z5Mom2gsMyD+Vr2EaFEFUJfpIjzaPp985yJC3+dH54PMx9QEwsmc5Zt +# +FeoAn39Q7SE2hHxc7Gz7iuAhIoiGN/r2j3EF3+rGSs+QtxnjupRPfDWVtTnKC3r +# 07G1decfBmWNlCnT2exp39mQh0YAe9tEQYncfGpXevA3eZ9drMvohGS0UvJ2R/dh +# gxndX7RUCyFobjchu0CsX7LeSn3O9TkSZ+8OpWNs5KbFHc02DVzV5huowWR0QKfA +# csW6Th+xtVhNef7Xj3OTrCw54qVI1vCwMROpVymWJy71h6aPTnYVVSZwmCZ/oBpH +# IEPjQ2OAe3VuJyWQmDo4EbP29p7mO1vsgd4iFNmCKseSv6De4z6ic/rnH1pslPJS +# lRErWHRAKKtzQ87fSqEcazjFKfPKqpZzQmiftkaznTqj1QPgv/CiPMpC3BhIfxQ0 +# z9JMq++bPf4OuGQq+nUoJEHtQr8FnGZJUlD0UfM2SU2LINIsVzV5K6jzRWC8I41Y +# 99xh3pP+OcD5sjClTNfpmEpYPtMDiP6zj9NeS3YSUZPJjAw7W4oiqMEmCPkUEBID +# fV8ju2TjY+Cm4T72wnSyPx4JduyrXUZ14mCjWAkBKAAOhFTuzuldyF4wEr1GnrXT +# drnSDmuZDNIztM2xAgMBAAGjggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBS6FtltTYUvcyl2mi91jGogj57IbzAfBgNVHSMEGDAWgBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUH +# AwgwdwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp +# Y2VydC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv +# bS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0 +# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3Js +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsF +# AAOCAgEAfVmOwJO2b5ipRCIBfmbW2CFC4bAYLhBNE88wU86/GPvHUF3iSyn7cIoN +# qilp/GnBzx0H6T5gyNgL5Vxb122H+oQgJTQxZ822EpZvxFBMYh0MCIKoFr2pVs8V +# c40BIiXOlWk/R3f7cnQU1/+rT4osequFzUNf7WC2qk+RZp4snuCKrOX9jLxkJods +# kr2dfNBwCnzvqLx1T7pa96kQsl3p/yhUifDVinF2ZdrM8HKjI/rAJ4JErpknG6sk +# HibBt94q6/aesXmZgaNWhqsKRcnfxI2g55j7+6adcq/Ex8HBanHZxhOACcS2n82H +# hyS7T6NJuXdmkfFynOlLAlKnN36TU6w7HQhJD5TNOXrd/yVjmScsPT9rp/Fmw0HN +# T7ZAmyEhQNC3EyTN3B14OuSereU0cZLXJmvkOHOrpgFPvT87eK1MrfvElXvtCl8z +# OYdBeHo46Zzh3SP9HSjTx/no8Zhf+yvYfvJGnXUsHicsJttvFXseGYs2uJPU5vIX +# mVnKcPA3v5gA3yAWTyf7YGcWoWa63VXAOimGsJigK+2VQbc61RWYMbRiCQ8KvYHZ +# E/6/pNHzV9m8BPqC3jLfBInwAM1dwvnQI38AC+R2AibZ8GV2QqYphwlHK+Z/GqSF +# D/yYlvZVVCsfgPrA8g4r5db7qS9EFUrnEw4d2zc4GqEr9u3WfPwwggWNMIIEdaAD +# AgECAhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYT +# AlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2Vy +# dC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0y +# MjA4MDEwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYD +# VQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAf +# BgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEB +# BQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4Smn +# PVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6f +# qVcWWVVyr2iTcMKyunWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O +# 7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZ +# Vu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4F +# fYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLm +# qaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMre +# Sx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/ch +# srIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+U +# DCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xM +# dT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUb +# AgMBAAGjggE6MIIBNjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAO +# BgNVHQ8BAf8EBAMCAYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRw +# Oi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRz +# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0f +# BD4wPDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNz +# dXJlZElEUm9vdENBLmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEM +# BQADggEBAHCgv0NcVec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLt +# pIh3bb0aFPQTSnovLbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouy +# XtTP0UNEm0Mh65ZyoUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jS +# TEAZNUZqaVSwuKFWjuyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAc +# AgPLILCsWKAOQGPFmCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2 +# h5b9W9FcrBjDTZ9ztwGpn1eqXijiuZQxggN2MIIDcgIBATB3MGMxCzAJBgNVBAYT +# AlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQg +# VHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OU +# nQg5pr/bP1/lYRYwDQYJYIZIAWUDBAIBBQCggdEwGgYJKoZIhvcNAQkDMQ0GCyqG +# SIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNDA4MjcxNjU1NTBaMCsGCyqGSIb3 +# DQEJEAIMMRwwGjAYMBYEFGbwKzLCwskPgl3OqorJxk8ZnM9AMC8GCSqGSIb3DQEJ +# BDEiBCBSBoZPgcpWcvQMmhJw1CfHAUCsRi0nI8EK9BjF+UXreDA3BgsqhkiG9w0B +# CRACLzEoMCYwJDAiBCDS9uRt7XQizNHUQFdoQTZvgoraVZquMxavTRqa1Ax4KDAN +# BgkqhkiG9w0BAQEFAASCAgBh11+Ix8LRfmH+BxZPpeGRdIIbr3R+5NqvFX/JDQki +# ymAMnnGuldMOSLvuWXTshQtHyj/glbUdsL9y5A8JkkyUQi5mRoJgOVvA21GWVK6r +# dP0UkNNxmcnhSJFF6yeNce+ZCY4BCw/832AyWthj3lBksASoaFjoOnnLKLQ4QVRI +# i6hwlHYKCgtxHyzLtQyI7TXxx5IiLCzGtdaSxgu+fG8WjMSlYJzCQnyaHWp79vrZ +# 4ZJ/DEBuWzmLQ+rVMaSCb1Bygm6f7eQMgSsv1mJHWozXvqWYZizxI/nXzVhSpJIh +# wSa85lheYSHOAhaiwk8oXMAcf9nrHoawpSA9niqWX4KO6+gGMZshddReCpmgJjAq +# 97CEOOg4LxFM+/9S/NHM7f/GjdHSyPApxlQaX3GXICEwhv7vT4zQtjvT3Q3vRogi +# 4+Qynj91TlYgAV4w7VN66FjYO5O8f8tGrOKKFX/cN1Ykse8VRWHGss7j1IMU/73A +# bRNKTi4iG+/wyQU5/pUpP/i6NsFwsS7khpULChfWnLQPRfdfkGLqt2ue+xYO3t8u +# hT9eHgG9sPFdwBElFGvVLwVS32xaesJjxQG4nqEthpjBZfSCz8RRSGVnxuS+d97M +# Koe/JDmv/On5d770HSmI7yvnlLhZNyW3yKPVvZKBTPu13Tar+ZIqJ0fs0Xl5oull +# +A== +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Firmware/HP.Firmware.psd1 b/Bios-Update-HP-v2.0/module/HP.Firmware/HP.Firmware.psd1 new file mode 100644 index 0000000..8685949 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Firmware/HP.Firmware.psd1 @@ -0,0 +1,330 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Inc. +# +# The intellectual and technical concepts contained herein are proprietary to HP Inc +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Inc. + + +@{ + + # Script module or binary module file associated with this manifest. + RootModule = 'HP.Firmware.psm1' + NestedModules = @( + 'HP.Firmware.SureView', + 'HP.Firmware.SecurePlatform', + 'HP.Firmware.SureRecover', + 'HP.Firmware.SureAdmin' + ) + + # Version number of this module. + #FullModuleVersion = '1.7.2.774' + ModuleVersion = '1.7.2' + + # ID used to uniquely identify this module + GUID = '9c46d615-4396-4e75-9eea-908625f0484e' + + # Author of this module + Author = 'HP Development Company, L.P.' + + # Company or vendor of this module + CompanyName = 'HP Inc' + + # Copyright statement for this module + Copyright = '(C) Copyright 2018-2024 HP Development Company, L.P.' + + # Description of the functionality provided by this module + Description = 'Firmware access module for HP Client Management Script Library' + + # Minimum version of the Windows PowerShell engine required by this module + PowerShellVersion = '5.1' + + FunctionsToExport = + 'Clear-HPFirmwareBootLogo', + 'Get-EFIPartitionPath', + 'Get-HPFirmwareAuditLog', + 'Get-HPFirmwareBootLogoIsActive', + 'Get-HPPrivateRetailConfiguration', + 'Get-HPSecurePlatformState', + 'Get-HPSureRecoverReimagingDeviceDetails', + 'Get-HPSureRecoverState', + 'Get-HPSureViewState', + 'Get-HPSureAdminState', + 'New-HPSureAdminEnablePayload', + 'New-HPSureAdminDisablePayload', + 'Convert-HPSureAdminCertToQRCode', + 'Send-HPSureAdminLocalAccessKeyToKMS', + 'Clear-HPSureAdminKMSAccessToken', + 'New-HPSureAdminLocalAccessKeyProvisioningPayload', + 'New-HPSureAdminBIOSSettingValuePayload', + 'New-HPSureAdminSettingDefaultsPayload', + 'New-HPSureAdminBIOSSettingsListPayload', + 'New-HPSureAdminFirmwareUpdatePayload', + 'Invoke-HPSureRecoverTriggerUpdate', + 'New-HPSecurePlatformDeprovisioningPayload', + 'New-HPSecurePlatformEndorsementKeyProvisioningPayload', + 'New-HPSecurePlatformSigningKeyProvisioningPayload', + 'New-HPSureRecoverConfigurationPayload', + 'New-HPSureRecoverDeprovisionPayload', + 'New-HPSureRecoverImageConfigurationPayload', + 'New-HPSureRecoverSchedulePayload', + 'New-HPSureRecoverTriggerRecoveryPayload', + 'Set-HPFirmwareBootLogo', + 'Set-HPPrivateRetailConfiguration', + 'Set-HPSecurePlatformPayload', + 'Set-HPSureViewState', + 'Test-HPFirmwareFlashSupported', + 'Test-HPSureViewIsSupported', + 'Test-OSBitness', + 'Update-HPFirmware', + 'Set-HPPrivateFirmwareUpdatePayload', + 'Write-HPFirmwarePasswordFile', + 'Add-HPSureAdminSigningKeyToKMS', + 'Remove-HPSureAdminSigningKeyFromKMS', + 'Add-HPSureAdminEndorsementKeyToKMS', + 'Remove-HPSureAdminEndorsementKeyFromKMS', + 'Invoke-HPPrivateRemoteSignData', + 'Get-HPSureAdminKeyId', + 'Add-HPSureAdminDevicePermissions', + 'Set-HPSureAdminDevicePermissions', + 'Get-HPSureAdminDevicePermissions', + 'Remove-HPSureAdminDevicePermissions', + 'Edit-HPSureAdminDevicePermissions', + 'Search-HPSureAdminDevicePermissions', + 'New-HPSureRecoverFailoverConfigurationPayload', + 'Get-HPSureRecoverFailoverConfiguration', + 'Get-HPSureAdminKMSCapabilities', + 'Get-HPPrivateSureAdminKMSAccessToken' + + PrivateData = @{ + PSData = @{ + LicenseUri = 'https://developers.hp.com/node/11493' + RequireLicenseAcceptance = $true + } # End of PSData hashtable + } # End of PrivateData hashtable + + +} + + +# SIG # Begin signature block +# MIIoHQYJKoZIhvcNAQcCoIIoDjCCKAoCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCzI6zMQIBlARM9 +# x5DKYAEcB63qy1WCTxZ04tbwGEhLxKCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6TCCGeUCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIESOPJf/ +# mPTtvFXRWhEUSc7fp66pDXvx4YVeMHnfVidmMA0GCSqGSIb3DQEBAQUABIIBgA3R +# JkrDAwN01Ose8QoejNoeq0cxccRXHmECcM2sXehrwDAsOwO3bdl3Fd39k52r3Q0d +# OQI7Tqf0Zyv1hrqD1BNqGCrlOc9St0Y9PrFBILWheLBrs31WnLeeLJS/95NISkGg +# 5h2ZUknyp6oCJe69tjDcolW0i55/TrePWNYBKe1XukqcfabvzrGhi1GV4/sTKpYk +# DbSWn+hm6lpo8J/SJbSXWY97+XUZJCXOJoFZzNVPKzDCG7UafJzmzUJ0EkQrVCxC +# s0hDpe7tz2NbyZeEBEOsJ+jIyM3CHXLE5NLDNVTBKRHrcgi13se47hRijK/mjfNh +# 6LhJEtc13e/sXwsr+LsUSDWJA2I/VgbSQfacV9NV9W3JbluhEijy8WIHIMZKBZqg +# TiQYXteIlyUA2ygGY+SxpLx3//YXqSclqfNMNpnq0RlLAuwU1ht7f44OtZ+xO7xC +# s6n9Rhg3YmPWzvzp6v6PnSxK8YaoAck75ork2GHK+w5anygsN8RWDO2Yl3D3vqGC +# Fz8wghc7BgorBgEEAYI3AwMBMYIXKzCCFycGCSqGSIb3DQEHAqCCFxgwghcUAgED +# MQ8wDQYJYIZIAWUDBAIBBQAwdwYLKoZIhvcNAQkQAQSgaARmMGQCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCC8dV+wodFCep4cLDKynWsE54OPMJPSa+5b +# WotEWhKNeQIQTDpWQGeaaL4RGPM6Gym41RgPMjAyNDA4MjcxNjU1NTBaoIITCTCC +# BsIwggSqoAMCAQICEAVEr/OUnQg5pr/bP1/lYRYwDQYJKoZIhvcNAQELBQAwYzEL +# MAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJE +# aWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBD +# QTAeFw0yMzA3MTQwMDAwMDBaFw0zNDEwMTMyMzU5NTlaMEgxCzAJBgNVBAYTAlVT +# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEgMB4GA1UEAxMXRGlnaUNlcnQgVGlt +# ZXN0YW1wIDIwMjMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjU0WH +# HYOOW6w+VLMj4M+f1+XS512hDgncL0ijl3o7Kpxn3GIVWMGpkxGnzaqyat0QKYoe +# YmNp01icNXG/OpfrlFCPHCDqx5o7L5Zm42nnaf5bw9YrIBzBl5S0pVCB8s/LB6Yw +# aMqDQtr8fwkklKSCGtpqutg7yl3eGRiF+0XqDWFsnf5xXsQGmjzwxS55DxtmUuPI +# 1j5f2kPThPXQx/ZILV5FdZZ1/t0QoRuDwbjmUpW1R9d4KTlr4HhZl+NEK0rVlc7v +# CBfqgmRN/yPjyobutKQhZHDr1eWg2mOzLukF7qr2JPUdvJscsrdf3/Dudn0xmWVH +# VZ1KJC+sK5e+n+T9e3M+Mu5SNPvUu+vUoCw0m+PebmQZBzcBkQ8ctVHNqkxmg4ho +# Yru8QRt4GW3k2Q/gWEH72LEs4VGvtK0VBhTqYggT02kefGRNnQ/fztFejKqrUBXJ +# s8q818Q7aESjpTtC/XN97t0K/3k0EH6mXApYTAA+hWl1x4Nk1nXNjxJ2VqUk+tfE +# ayG66B80mC866msBsPf7Kobse1I4qZgJoXGybHGvPrhvltXhEBP+YUcKjP7wtsfV +# x95sJPC/QoLKoHE9nJKTBLRpcCcNT7e1NtHJXwikcKPsCvERLmTgyyIryvEoEyFJ +# UX4GZtM7vvrrkTjYUQfKlLfiUKHzOtOKg8tAewIDAQABo4IBizCCAYcwDgYDVR0P +# AQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# IAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQYMBaAFLoW +# 2W1NhS9zKXaaL3WMaiCPnshvMB0GA1UdDgQWBBSltu8T5+/N0GSh1VapZTGj3tXj +# STBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln +# aUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3JsMIGQ +# BggrBgEFBQcBAQSBgzCBgDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl +# cnQuY29tMFgGCCsGAQUFBzAChkxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v +# RGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3J0 +# MA0GCSqGSIb3DQEBCwUAA4ICAQCBGtbeoKm1mBe8cI1PijxonNgl/8ss5M3qXSKS +# 7IwiAqm4z4Co2efjxe0mgopxLxjdTrbebNfhYJwr7e09SI64a7p8Xb3CYTdoSXej +# 65CqEtcnhfOOHpLawkA4n13IoC4leCWdKgV6hCmYtld5j9smViuw86e9NwzYmHZP +# VrlSwradOKmB521BXIxp0bkrxMZ7z5z6eOKTGnaiaXXTUOREEr4gDZ6pRND45Ul3 +# CFohxbTPmJUaVLq5vMFpGbrPFvKDNzRusEEm3d5al08zjdSNd311RaGlWCZqA0Xe +# 2VC1UIyvVr1MxeFGxSjTredDAHDezJieGYkD6tSRN+9NUvPJYCHEVkft2hFLjDLD +# iOZY4rbbPvlfsELWj+MXkdGqwFXjhr+sJyxB0JozSqg21Llyln6XeThIX8rC3D0y +# 33XWNmdaifj2p8flTzU8AL2+nCpseQHc2kTmOt44OwdeOVj0fHMxVaCAEcsUDH6u +# vP6k63llqmjWIso765qCNVcoFstp8jKastLYOrixRoZruhf9xHdsFWyuq69zOuhJ +# RrfVf8y2OMDY7Bz1tqG4QyzfTkx9HmhwwHcK1ALgXGC7KP845VJa1qwXIiNO9OzT +# F/tQa/8Hdx9xl0RBybhG02wyfFgvZ0dl5Rtztpn5aywGRu9BHvDwX+Db2a2QgESv +# gBBBijCCBq4wggSWoAMCAQICEAc2N7ckVHzYR6z9KGYqXlswDQYJKoZIhvcNAQEL +# BQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UE +# CxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBS +# b290IEc0MB4XDTIyMDMyMzAwMDAwMFoXDTM3MDMyMjIzNTk1OVowYzELMAkGA1UE +# BhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2Vy +# dCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMaGNQZJs8E9cklRVcclA8TykTep +# l1Gh1tKD0Z5Mom2gsMyD+Vr2EaFEFUJfpIjzaPp985yJC3+dH54PMx9QEwsmc5Zt +# +FeoAn39Q7SE2hHxc7Gz7iuAhIoiGN/r2j3EF3+rGSs+QtxnjupRPfDWVtTnKC3r +# 07G1decfBmWNlCnT2exp39mQh0YAe9tEQYncfGpXevA3eZ9drMvohGS0UvJ2R/dh +# gxndX7RUCyFobjchu0CsX7LeSn3O9TkSZ+8OpWNs5KbFHc02DVzV5huowWR0QKfA +# csW6Th+xtVhNef7Xj3OTrCw54qVI1vCwMROpVymWJy71h6aPTnYVVSZwmCZ/oBpH +# IEPjQ2OAe3VuJyWQmDo4EbP29p7mO1vsgd4iFNmCKseSv6De4z6ic/rnH1pslPJS +# lRErWHRAKKtzQ87fSqEcazjFKfPKqpZzQmiftkaznTqj1QPgv/CiPMpC3BhIfxQ0 +# z9JMq++bPf4OuGQq+nUoJEHtQr8FnGZJUlD0UfM2SU2LINIsVzV5K6jzRWC8I41Y +# 99xh3pP+OcD5sjClTNfpmEpYPtMDiP6zj9NeS3YSUZPJjAw7W4oiqMEmCPkUEBID +# fV8ju2TjY+Cm4T72wnSyPx4JduyrXUZ14mCjWAkBKAAOhFTuzuldyF4wEr1GnrXT +# drnSDmuZDNIztM2xAgMBAAGjggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBS6FtltTYUvcyl2mi91jGogj57IbzAfBgNVHSMEGDAWgBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUH +# AwgwdwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp +# Y2VydC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv +# bS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0 +# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3Js +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsF +# AAOCAgEAfVmOwJO2b5ipRCIBfmbW2CFC4bAYLhBNE88wU86/GPvHUF3iSyn7cIoN +# qilp/GnBzx0H6T5gyNgL5Vxb122H+oQgJTQxZ822EpZvxFBMYh0MCIKoFr2pVs8V +# c40BIiXOlWk/R3f7cnQU1/+rT4osequFzUNf7WC2qk+RZp4snuCKrOX9jLxkJods +# kr2dfNBwCnzvqLx1T7pa96kQsl3p/yhUifDVinF2ZdrM8HKjI/rAJ4JErpknG6sk +# HibBt94q6/aesXmZgaNWhqsKRcnfxI2g55j7+6adcq/Ex8HBanHZxhOACcS2n82H +# hyS7T6NJuXdmkfFynOlLAlKnN36TU6w7HQhJD5TNOXrd/yVjmScsPT9rp/Fmw0HN +# T7ZAmyEhQNC3EyTN3B14OuSereU0cZLXJmvkOHOrpgFPvT87eK1MrfvElXvtCl8z +# OYdBeHo46Zzh3SP9HSjTx/no8Zhf+yvYfvJGnXUsHicsJttvFXseGYs2uJPU5vIX +# mVnKcPA3v5gA3yAWTyf7YGcWoWa63VXAOimGsJigK+2VQbc61RWYMbRiCQ8KvYHZ +# E/6/pNHzV9m8BPqC3jLfBInwAM1dwvnQI38AC+R2AibZ8GV2QqYphwlHK+Z/GqSF +# D/yYlvZVVCsfgPrA8g4r5db7qS9EFUrnEw4d2zc4GqEr9u3WfPwwggWNMIIEdaAD +# AgECAhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYT +# AlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2Vy +# dC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0y +# MjA4MDEwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYD +# VQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAf +# BgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEB +# BQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4Smn +# PVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6f +# qVcWWVVyr2iTcMKyunWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O +# 7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZ +# Vu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4F +# fYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLm +# qaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMre +# Sx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/ch +# srIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+U +# DCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xM +# dT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUb +# AgMBAAGjggE6MIIBNjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAO +# BgNVHQ8BAf8EBAMCAYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRw +# Oi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRz +# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0f +# BD4wPDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNz +# dXJlZElEUm9vdENBLmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEM +# BQADggEBAHCgv0NcVec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLt +# pIh3bb0aFPQTSnovLbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouy +# XtTP0UNEm0Mh65ZyoUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jS +# TEAZNUZqaVSwuKFWjuyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAc +# AgPLILCsWKAOQGPFmCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2 +# h5b9W9FcrBjDTZ9ztwGpn1eqXijiuZQxggN2MIIDcgIBATB3MGMxCzAJBgNVBAYT +# AlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQg +# VHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OU +# nQg5pr/bP1/lYRYwDQYJYIZIAWUDBAIBBQCggdEwGgYJKoZIhvcNAQkDMQ0GCyqG +# SIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNDA4MjcxNjU1NTBaMCsGCyqGSIb3 +# DQEJEAIMMRwwGjAYMBYEFGbwKzLCwskPgl3OqorJxk8ZnM9AMC8GCSqGSIb3DQEJ +# BDEiBCCvvoI9x+p2aw9Ky3XFN9LcYvOgjw++FTLctlI3d74WMDA3BgsqhkiG9w0B +# CRACLzEoMCYwJDAiBCDS9uRt7XQizNHUQFdoQTZvgoraVZquMxavTRqa1Ax4KDAN +# BgkqhkiG9w0BAQEFAASCAgAWfLC/94zkL0iMTDRJG8TuHoLk9bHxzmFgXdz1dLMf +# 3L9jAFhQoqgdu3D3ZqfRkXpxfRbeca5AZG5wXKnG/WwlWdUjhSzeekM6SZc6VszW +# yfaZvDS2T0dm3FjiXsB18H6bQDktcko3j36I3l7AfP20+TtcT6Npvxxz5fLeo2fF +# Zmjbc4ReAnIExdfnXUHj1toFkueG8vFJ21Av6XOMtTQfr3zEAnkgNabODn8DIBtt +# AwBgc2hhPX2r8chY2bfZCmamhWeUmRBSYQYtvlt8o0HPTdwuctmUaKmp0b2jvvzc +# gULx7JELx8ilUKlyKyeiyQnO1SjKw/gMJH5H4b+yhUn5znES1uBW8CS7QpSQYo8A +# 8a+Is/n9lR/m/qilmDz4f7vWnE/mIxX+Enz4jOzcgg+eMrDA66JWsvzi35ej+tKJ +# 1H+q/5jxoCY/sGtgyPfzXt90uiHTO3xNLoijUhfPKkzXsePr0aqfXBzTKQgx3UgB +# 0Zo1O9Vwp82KcvMVPAtszuOd2u8wzTnTKoDVDAsdWtIJ+sPVqPjaupFO5qKQXJzS +# tEIj2lVocdVl9Jf15iWhKLSgv+WnZ7akwv35F9gtNZX1COvUS8hX0oy3lVYYQyYO +# TwxhOkw4t8zxed0Iw84GCWkF3bNYDCJnH3ytWMfnuwogHoRhKrqrgZJq/6vFxtXt +# bg== +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Firmware/HP.Firmware.psm1 b/Bios-Update-HP-v2.0/module/HP.Firmware/HP.Firmware.psm1 new file mode 100644 index 0000000..79c3b39 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Firmware/HP.Firmware.psm1 @@ -0,0 +1,1656 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + +using namespace HP.CMSLHelper + +Set-StrictMode -Version 3.0 +$ErrorActionPreference = "Stop" +#requires -Modules "HP.Private","HP.Utility" + +# CMSL is normally installed in C:\Program Files\WindowsPowerShell\Modules +# but if installed via PSGallery and via PS7, it is installed in a different location +if (Test-Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll") { + Add-Type -Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll" +} +else{ + Add-Type -Path "$PSScriptRoot\..\..\HP.Private\1.7.2\HP.CMSLHelper.dll" +} + +if ($PSEdition -eq "Core") { + Add-Type -Path "$PSScriptRoot\MSAL_4.36.2\netcoreapp2.1\Microsoft.Identity.Client.dll" -IgnoreWarnings -WarningAction SilentlyContinue +} +else { + Add-Type -Path "$PSScriptRoot\MSAL_4.36.2\net45\Microsoft.Identity.Client.dll" -IgnoreWarnings -WarningAction SilentlyContinue +} + +$msgs = @{ + 0x031e = @("Sure Start found the primary BIOS in shared flash memory is either corrupted or missing. Possible causes include but not limited to interrupted BIOS update or recent BIOS attack.",1); + 0x031f = @("Sure Start found the backup BIOS is either corrupted or missing. Possible causes include but not limited to interrupted BIOS update.",1); + 0x0320 = @("Sure Start found shared flash memory layout is different from original factory settings.",1); + 0x0322 = @("Sure Start has recovered the primary BIOS in shared flash memory.",0); + 0x0323 = @("Sure Start has updated the backup copy of BIOS.",0); + 0x0324 = @("Sure Start found shared flash memory layout is different from original factory settings and has repaired the shared flash layout.",0); + 0x0326 = @("Sure Start found that the primary BIOS in shared flash memory on resume from Sleep is different than what system originally booted with.",0); + 0x0328 = @("Sure Start found that the 'BIOS Update Policy' setting was set to Locked but was unable to honor policy as backup copy of BIOS may be corrupted or missing.",1); + 0x032a = @("Sure Start received a command to perform a manual recovery.",0); + 0x032b = @("Sure Start integrity checking on backup copy of critical factory configured parameters failed and is no longer being used.",2); + 0x032c = @("Sure Start integrity checking on backup copy of critical network parameters data failed and is no longer being used.",2); + 0x032d = @("Sure Start integrity checking on backup copy of shared flash memory layout description failed and is no longer being used.",2); + 0x032e = @("Sure Start has found and repaired an integrity issue with saved audit logs; some logging data may have been lost.",1); + 0x032f = @("Sure Start policy settings have been corrupted and reverted to factory defaults.",1); + 0x0330 = @("System was placed in manufacturing programming mode.",1); + 0x0331 = @("System was taken out of manufacturing programming mode.",0); + 0x0332 = @("Sure Start found that backup and primary copy of BIOS do not match.",0); + 0x0333 = @("Sure Start received a request to perform a self test.",0); + 0x0334 = @("The permanent fuse in the HP Sure Start embedded controller has been modified to block the automated process that typically locks this platform to production firmware only. This should only occur on platforms that are used by HP for development purposes or exception manufacturing processes. Permanently locking this device to use production firmware only will now require a manual process.",1); + 0x0335 = @("The permanent fuse in the HP Sure Start embedded controller has been modified such that HP Sure Start will only accept HP production firmware.",0); + 0x0336 = @("A BIOS update was blocked because it did not meet the policy version requirements.",1); + 0x0337 = @("A BIOS update was blocked because it would have rolled back the current BIOS to an older BIOS which was prohibited by policy.",1); + 0x0338 = @("Runtime Verification (S0 Sure Start) has been skipped as EpSC was not able to read a correct known data back (FDT Signature).",1); + + 0x801f = @("Sure Start repaired the onboard ethernet configuration data.",1); + 0x8020 = @("Sure Start has recovered the primary BIOS in shared flash memory from a copy located on flash.",1); + 0x8021 = @("Sure Start has recovered the primary BIOS in shared flash memory from a copy located on the HDD.",1); + 0x8022 = @("Sure Start has recovered the primary BIOS in shared flash memory from a copy located on a USB Key.",1); + 0x8026 = @("Sure Start has repaired machine specific data that was corrupted.",1); + 0x8028 = @("Sure Start has determined that the BIOS settings policy store has been corrupted. Recovery of the BIOS setting policy store resulted in all BIOS settings reverting to factory defaults.",2); + 0x802a = @("The BIOS received a Manual Recovery command.",1); + 0x802b = @("Sure Start detected corrupted security critical BIOS policy/data settings and recovered from the backup copy in the Sure Start private flash.",1); + 0x802c = @("HP Sure Start detected a BIOS update operation completed.",1); + 0x802d = @("Sure Start detected a problem with and corrected part of the data storage overhead related to BIOS settings. No BIOS settings were changed.",1); + 0x802e = @("Sure Start has captured a back-up copy of the boot drive partition sector (Master Boot Record or GUID Partition Table).",0); + 0x802f = @("Sure Start has recovered the boot drive partition sector (Master Boot Record or GUID Partition Table) from the Sure Start back-up copy.",1); + + 0x821e = @("Sure Start 'HP Firmware Runtime Intrusion Detection' has detected an unauthorized attempt to modify HP runtime firmware or disable HP runtime firmware protection mechanisms. System may be unstable until restarted.",1); + 0x821f = @("Sure Start 'HP Firmware Runtime Intrusion Detection' has detected an unauthorized attempt to modify HP runtime Firmware within main (DRAM) memory. System may be unstable until restarted.",1); + 0x8220 = @("Sure Start 'HP Firmware Runtime Intrusion Detection' has detected an attempt to execute unauthorized code within the HP System Management Mode portion of main (DRAM) memory. System may be unstable until restarted.",1); + 0x8221 = @("Sure Start 'HP Firmware Runtime Intrusion Detection' has detected an attempt to access unauthorized data outside of the HP System Management Mode portion of main (DRAM) memory. System may be unstable until restarted.",1); + 0x8222 = @("Sure Start 'HP Firmware Runtime Intrusion Detection' has detected an attempt to execute unauthorized code outside of the HP System Management Mode portion of main (DRAM) memory. System may be unstable until restarted.",1); + 0x8223 = @("Sure Start 'HP Firmware Runtime Intrusion Detection' test/demo more has been enabled.",1); + 0x8224 = @("Sure Start 'HP Firmware Runtime Intrusion Detection' test/demo more has been disabled.",0); + 0x8225 = @("Sure Start 'HP Firmware Runtime Intrusion Detection' has detected a problem which may indicate a security problem. System may be unstable until restarted.",1); + + 0x831e = @("Sure Start 'HP Firmware Runtime Intrusion Detection' has detected an unauthorized change to HP runtime Firmware within main (DRAM) memory. System may be unstable until restarted.",1); + 0x831f = @("Sure Start 'HP Firmware Runtime Intrusion Detection' has detected an unauthorized change to the System Management Mode Base Address (SMBASE) configuration of the CPU. System may be unstable until restarted.",1); + 0x8320 = @("Sure Start 'HP Firmware Runtime Intrusion Detection' has detected an unauthorized change to critical Peripheral Component Interconnect (PCI) configuration settings within the core logic. System may be unstable until restarted.",1); + 0x8321 = @("Sure Start 'HP Firmware Runtime Intrusion Detection' stopped receiving status messages from the monitoring application. System may be unstable until restarted.",1); + 0x8322 = @("Sure Start 'HP Firmware Runtime Intrusion Detection' received an invalid manifest describing the memory space to be monitored during runtime. Runtime Intrusion Detection is disabled for this boot.",1); + 0x8323 = @("Sure Start 'HP Firmware Runtime Intrusion Detection' has experienced a general failure of the monitoring application. System may be unstable until restarted.",1); + 0x8324 = @("Sure Start 'HP Firmware Runtime Intrusion Detection' has detected an unauthorized change to critical Memory Mapped IO configuration settings within the core logic. System may be unstable until restarted.",1); + + 0x841e = @("HP Secure Platform Management successfully initialized.",0); + 0x841f = @("An HP Secure Platform Management command was received that was rejected.",1); + 0x8420 = @("HP Secure Platform Management has been unconfigured.",0); + 0x8421 = @("The HP Secure Platform Management signing key was updated.",0); + 0x8422 = @("HP Hardware Enforced Protection has been activated via an HP Secure Platform Management command.",0); + 0x8423 = @("HP Hardware Enforced Protection has been deactivated via an HP Secure Platform Management command.",0); + 0x8424 = @("A problem has been detected with the HP Hardware Enforced Protection Agent and there is no assurance that the system remains in compliance with the guidelines that were set. The system may be unstable until restarted.",1); + 0x8425 = @("An HP Secure Platform Management command has been received instructing the HP Hardware Enforced Protection Agent to suspend compliance checking and enforcement.",1); + 0x8426 = @("An HP Secure Platform Management command has been received instructing the HP Hardware Enforced Protection Agent to resume compliance checking and enforcement.",1); + 0x8427 = @("An HP Secure Platform Management command has been received instructing the HP Hardware Enforced Protection Agent to enter recovery mode.",1); + 0x8428 = @("The platform OS recovery process was started by the firmware.",0); + 0x8429 = @("The platform OS recovery process has successfully completed.",0); + 0x842a = @("The platform OS recovery process failed to complete successfully.",0); + 0x842b = @("The OS reported that HP Hardware Enforced Protection was not reinstalled.",0); + 0x842c = @("The system processed a service event which took action.",0); + 0x842d = @("HP Sure Run detected a problem.",1); + + 0x851e = @("The Sure Start Secure Boot Keys Protection feature has been enabled.",0); + 0x851f = @("The Sure Start Secure Boot Keys Protection feature has been disabled.",0); + 0x8520 = @("Sure Start determined that the Secure Boot Keys were invalid and based on the recovery policy they have NOT been repaired.",2); + 0x8521 = @("The Secure Boot Keys have been repaired at the request of the user.",0); + 0x8522 = @("Sure Start determined that the Secure Boot Keys were invalid and they have been repaired automatically based on policy.",1); + 0x8523 = @("The BIOS has been configured to globally suppress the boot time prompts used by the BIOS to prevent remote entities from performing actions without user consent.",0); + 0x8524 = @("The BIOS has been configured to allow boot time prompts used to prevent remote entities from performing actions without user consent.",0); + 0x8525 = @("Sure Start has detected the Intel Management Engine (ME) is unable to start and has initiated the recovery process using an ME recovery firmware image stored on local disk or external recovery media.",1); + 0x8526 = @("Sure Start successfully recovered the Intel Management Engine firmware.",1); + 0x8527 = @("Sure Start was unable to recover the Intel Management Engine firmware.",1); + 0x8528 = @("Intel management engine firmware update failed.",1); + 0x8529 = @("Intel management engine firmware update succeeded.",0); + 0x852A = @("BIOS was unable to locate Intel management engine firmware binary needed to restore Intel management engine firmware ",1); + + 0x861E = @("The HP Sure Start EpSC has found an integrity problem with the backup copy of Intel CSME bootloader firmware; the Intel CSME bootloader firmware integrity checking / recovery capability is no longer available.",2); + 0x861F = @("The HP Sure Start EpSC has found an integrity issue with the Intel CSME bootloader firmware.",1); + 0x8620 = @("The HP Sure Start EpSC has successfully captured a new backup of the most recent version of Intel CSME bootloader firmware and Intel CSME configuration.",0); + 0x8621 = @("The HP Sure Start EpSC has performed a recovery of the Intel CSME bootloader firmware and Intel CSME factory configuration. Administrative action may be required to ensure that all Intel CSME provided services are configured as desired.",2); + 0x8622 = @("The HP Sure Start EpSC detected that the system was unable to boot successfully after an Intel CSME firmware update; an attempt will be made to restore Intel CSME firmware.",2); + 0x8623 = @("HP Sure Start detected that the Intel CSME firmware file system (Intel CSME configuration) is corrupted; an attempt will be made to restore Intel CSME firmware and configuration to last known good state.",2); + 0x8624 = @("HP Sure Start detected that the Intel CSME failed to complete the boot initialization sequence immediately after the Intel CSME firmware update operation; an attempt will be made to restore Intel CSME firmware and configuration to last known good state.",2); + 0x8625 = @("Sure Start has detected the Intel Management Engine (ME) is unable to start and has initiated the recovery process using an ME recovery firmware image stored on local disk or external recovery media.",1); + 0x8626 = @("HP Sure Start has detected that the Intel CSME is in a disabled state due to corruption within the Intel CSME data region.",2); + 0x8627 = @("HP Sure Start unable to recover the Intel CSME firmware.",1); + 0x8628 = @("Intel CSME firmware update operation attempted by HP Sure Start failed due to error returned by Intel CSME firmware update interface.",1); + 0x8629 = @("HP Sure Start successfully updated primary Intel CSME firmware.",0); + 0x862A = @("HP Sure Start was unable to locate Intel CSME firmware binary needed to restore Intel CSME firmware.",1); + 0x862B = @("Intel CSME capsule update firmware package that was provided to HP Sure Start has failed the digital signature verification.",1); + 0x862D = @("HP Sure Start has detected an unexpected platform reset during an Intel CSME firmware update attempt.",1); + 0x862e = @("HP Sure Start EpSC detected an unauthorized Intel CSME state transition to manufacturing mode.",1); + + 0x871E = @("HP BIOSSphere was unable to activate protection against malicious hardware impacting system operation.",2); + 0x871F = @("A device attempted to access memory that it was not allowed to access.",1); + 0x8720 = @("A device was given unrestricted access to memory.",0); + 0x8721 = @("A device was removed from the list of devices having unrestricted access to memory.",0); + + 0x881E = @("An attempt was made to access the system locally and an incorrect PIN was entered multiple times resulting in the system forcing a reboot.",2); + 0x881F = @("An attempt to change a firmware setting was made with an invalid signature.",1); + 0x8820 = @("The local access key was changed.",0); + 0x8821 = @("HP Sure Admin - Enhanced BIOS Authentication Mode Local Access Key 1 was set.",0); + 0x8822 = @("HP Sure Admin - Enhanced BIOS Authentication Mode Local Access Key 1 was cleared.",0); + 0x8823 = @("Enhanced BIOS Authentication Mode was enabled.",0); + 0x8824 = @("Enhanced BIOS Authentication Mode was disabled.",0); + 0x8825 = @("The users Secure Platform Management PIN reminder was set.",0); + 0x8826 = @("The users Secure Platform Management PIN reminder was cleared.",0); + 0x8827 = @("The users Secure Platform Management PIN was requested.",0); + + 0x891E = @("HP EpSC runtime intrusion detection - HP BIOS detected/blocked an illegal attempt to access the HP EpSC trusted interface from the OS.",1); + 0x891F = @("HP EpSC runtime intrusion detection - HP EpSC detected/blocked an illegal attempt to access the HP EpSC trusted interface from the OS.",1); + 0x8920 = @("HP EpSC runtime intrusion detection - An illegal attempt to write to EpSC code region of memory was detected and blocked.",2); + 0x8921 = @("HP EpSC runtime intrusion detection - An illegal attempt to execute from an EpSC data region of memory was detected and blocked.",2); + 0x8922 = @("Threat Hunter - A hidden process was found running in the OS.",1); + + 0x8A1E = @("HP Tamper Lock - The system detected that the cover was opened.",1); + 0x8A1F = @("HP Tamper Lock - The user acknowledged a BIOS POST notification that the cover had been opened.",0); + 0x8A20 = @("HP Tamper Lock - The TPM was cleared due to cover removal based on current HP Tamper Lock policy settings.",0); + + 0x8B1E = @("Cloud Management Infrastructure - A key was set.",0); + 0x8B1F = @("Cloud Management Infrastructure - A key was changed.",0); + 0x8B20 = @("Cloud Management Infrastructure - A key was removed.",0); + 0x8B21 = @("Cloud Management Infrastructure - This capability has been permanently disabled.",0); + 0x8C1E = @("Remote Device Management - Command was received to lock the system.",0); + 0x8C1F = @("Remote Device Management - Command was received to wipe the system.",0); + 0x8C20 = @("Remote Device Management - The system was successfully unlocked subsequent to being locked.",0); + 0x8C21 = @("Remote Device Management - This capability has been permanently disabled.",0); + 0x8D1E = @("Virtualization Based BIOS Protection - This capability has been disabled.",0); + 0x8D1F = @("Virtualization Based BIOS Protection - Detected and blocked an attempted access to protected resources.",1); + 0x8D20 = @("Virtualization Based BIOS Protection - Manual recovery mode trigger received.",1); + 0x8E1E = @("Immutable settings protection - This capability has been enabled.",0); + 0x8E1F = @("Immutable settings protection - This capability has been enabled.",1); + 0x8E20 = @("Immutable settings protection - Detected that a protected setting was corrupted and recovered the setting.",1); +} + + +function checkBitlocker ($bitlocker) +{ + if ($bitlocker -eq "ignore") + { + Write-Verbose "Skipping BitLocker check because BitLocker action = IGNORE" + return $true + } + else { + ($r,$dr) = isBootDriveBitlockerEncrypted + Write-Verbose "Boot drive is BitLocker encrypted: $r" + if ($r -eq $true) + { + if ($bitlocker -eq 'stop') + { + Write-Verbose ("BitLocker is on and BitLocker action = STOP") + + Write-Host -ForegroundColor Cyan "This system has BitLocker enabled." + + Write-Host -ForegroundColor Cyan "Do you want to suspend BitLocker for one reboot?" + Write-Host -ForegroundColor Cyan "You can also specify '-BitLocker suspend' or '-BitLocker ignore' on the command line to skip this check." + $response = Read-Host -Prompt "Type 'Y' to suspend BitLocker and anything else to abort. " + if ($response -ne "Y") { + Write-Verbose "User did not confirm BitLocker suspension - aborting." + return $false + } + else { $bitlocker = 'suspend' } + } + + + if ($bitlocker -eq "suspend") + { + if (!$quiet) { Write-Host ("Suspending BitLocker on this system.") } + Write-Verbose ("BitLocker is on and BitLocker action = SUSPEND") + suspendBitlockerForOneReboot + return $true + } + else { + Write-Verbose ("Unknown BitLocker check option: $bitlocker") + return $false + } + + } + } +} + + +function getAuditLogEntries ([ref]$buffer_out,[ref]$buffer_size,[ref]$records_count,[ref]$mi_result) +{ + $bs = $buffer_size.Value + $rc = $records_count.Value + $r = $mi_result.Value + switch (Test-OSBitness) { + 32 { [DfmNativeBios]::get_audit_logs_32($buffer_out.Value,[ref]$bs,[ref]$rc,[ref]$r) } + 64 { [DfmNativeBios]::get_audit_logs_64($buffer_out.Value,[ref]$bs,[ref]$rc,[ref]$r) } + } + $buffer_size.Value = $bs + $records_count.Value = $rc + $mi_result.Value = $r +} + + + + +function isBootDriveBitlockerEncrypted () +{ + [CmdletBinding()] + param() + + $c = Get-BitLockerVolume | Where-Object VolumeType -EQ 'OperatingSystem' + if (!$c -or $c.ProtectionStatus -eq "Off") + { + Write-Verbose ("No operating system drive found or drive is not encrypted") + return ($false,$null) + } + Write-Verbose "Operating system $($c.MountPoint) is BitLocker encrypted." + return ($true,$c) +} + + +function suspendBitlockerForOneReboot () +{ + [CmdletBinding()] + param() + + ($isEncrypted,$drive) = isBootDriveBitlockerEncrypted + if ($isEncrypted) { + Write-Verbose "Suspending BitLocker on $($drive.MountPoint) for one reboot." + Suspend-BitLocker -MountPoint $drive.MountPoint -RebootCount 1 + } + else + { + Write-Verbose 'No BitLocker operating system drives found to suspend.' + } +} + + + + +<# +.SYNOPSIS + This is a private command for internal use only. Returns the runtime architecture (64-bit or 32-bit). + +.DESCRIPTION + This is a private command for internal use only. This command returns 32 or 64, indicating the architecture of the running process. + +.NOTES + - When running 32-bit PowerShell on 64-bit systems, this will return 32. + - This is a private command for internal use only +#> +function Test-OSBitness +{ + [CmdletBinding()] + param() + + if ([IntPtr]::Size -eq 4) + { 32 } else { 64 } +} + +function formatLogTimestamp ([timestamp_t]$ts) +{ + try { + Get-Date -Year $ts.Year -Month $ts.Month -Day $ts.Day -Hour $ts.hour -Minute $ts.minute -Second $ts.second -Millisecond 0 + } + catch { + return $null + } +} + +function formatLogEntryInHex ([int]$Status,[int]$MessageNumber,[timestamp_t]$TimeStamp,[int]$Source,[int]$Id,[int]$Severity,[int]$Data0,[int]$Data1,[int]$Data2,[int]$Data3,[int]$Data4) +{ + try { + $StatusHex = '{0:X2}' -f $Status + $MessageNumberHex = '{0:X2}' -f $MessageNumber + $ts = Get-FormattedTime ($TimeStamp) + $SourceHex = '{0:X2}' -f $Source + $IdHex = '{0:X2}' -f $Id + $SeverityHex = '{0:X2}' -f $Severity + $Data0Hex = '{0:X2}' -f $Data0 + $Data1Hex = '{0:X2}' -f $Data1 + $Data2Hex = '{0:X2}' -f $Data2 + $Data3Hex = '{0:X2}' -f $Data3 + $Data4Hex = '{0:X2}' -f $Data4 + return $StatusHex + ':' + $MessageNumberHex + ':' + $ts + ':' + $SourceHex + ':' + $IdHex + ':' + $SeverityHex + ':' + $Data0Hex + ':' + $Data1Hex + ':' + $Data2Hex + ':' + $Data3Hex + ':' + $Data4Hex + } + catch { + return $null + } +} + +function Get-FormattedTime ([timestamp_t]$ts) +{ + $second = [string]$ts.second + $second = $second.PadLeft(2,'0') + + $minute = [string]$ts.minute + $minute = $minute.PadLeft(2,'0') + + $hour = [string]$ts.hour + $hour = $hour.PadLeft(2,'0') + + $day = [string]$ts.Day + $day = $day.PadLeft(2,'0') + + $month = [string]$ts.Month + $month = $month.PadLeft(2,'0') + + $year = [string]$ts.Year + $year = $year.substring($year.Length - 2) + + return ($second + ':' + $minute + ':' + $hour + ':' + $day + ':' + $month + ':' + $year) +} + +function resolvePath ([string]$path) +{ + $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($path) +} + +function Test-HPPrivateBIOSUpdateOnlineModeIsSupported { + [CmdletBinding()] + param() + + try { + $mi_result = 0 + switch (Test-OSBitness) { + 32 { $result = [DfmNativeBios]::online_flash_supported32([ref]$mi_result) } + 64 { $result = [DfmNativeBios]::online_flash_supported64([ref]$mi_result) } + } + Test-HPPrivateCustomResult -result 0x80000711 -Category 0x02 -mi_result $mi_result + } + catch [System.Management.Automation.MethodInvocationException] + { + displayInvocationException ($_.Exception) + } + + return [bool]$result +} + +function displayInvocationException ($exception) +{ + $bitness = Test-OSBitness + Write-Verbose "Could not find support library for the current format: $($exception.Message)" + throw "Could not call the support library. Please make sure the library dfmbios$bitness.dll is in the path." +} + +function formatLogSeverity ([int]$severity) +{ + switch ($severity) { + 0 { "Info" } + 1 { "Warn" } + 2 { "Critical" } + 0xff { "Undefined" } + } +} + +function formatPowerstate ([powerstate_t]$state) +{ + switch ($state) { + S0 { "S0" } + S3 { "S3" } + S4S5 { "S4/S5" } + default { "Undefined" } + } +} + +function decodeLogData ($function,$byte1,$byte2,$byte3,$byte4,$byte5) +{ + switch ($function) { + 0x0323 {} + 0x0322 {} + 0x032f {} + default { return $null } + } +} + +function getAdditionalData ([int]$source,[int]$id,[byte]$byte1,[byte]$byte2,[byte]$byte3,[byte]$byte4,[byte]$byte5) +{ + $result = "Not significant" + switch ($source) + { + 0x03 { + switch ($id) { + (0x22 -or 0x23) { + $result = "Writing BIOS $byte1.$byte2.$byte3.$byte4 $byte5" + } + 0x2f { + $result = "Label: {0}{1}{2}{3}" -f [char]$byte2,[char]$byte3,[char]$byte4,[char]$byte5 + } + } + } + } + return $result +} + +function formatEventSource ([int]$source) { + switch ($source) { + 0x00 { "EC ROM ($source)" } + 0x01 { "RTOS ($source)" } + 0x02 { "EC Task ($source)" } # EC Task + 0x03 { "HP Sure Start ($source)" } # FB EC TASK + 0x80 { "General BIOS Messages ($source)" } + 0x81 { "Secure HDD Erase ($source)" } + 0x82 { "HP Sure Start Runtime Intrusion Detection for Intel ($source)" } # SS3 from BIOS + 0x83 { "HP Sure Start Runtime Intrusion Detection for AMD ($source)" } # SS3 from PCP + 0x84 { "HP Secure Platform Management ($source)" } + 0x85 { "HP Sure Start Gen4 ($source)" } + 0x86 { "HP Sure Start resilience for Intel CSME ($source)" } + 0x87 { "HP DMA Protection ($source)" } + 0x88 { "HP Sure Admin ($source)" } + 0x89 { "HP EpSC Runtime Intrusion Detection ($source)" } + 0x8A { "HP Tamper Lock ($source)" } + 0x8B { "Cloud Management Infrastructure ($source)" } + 0x8C { "Remote Device Management ($source)" } + 0x8D { "Virtualization Based BIOS Protection ($source)" } + 0x8E { "Immutable Settings Protection ($source)" } + default { + Write-Verbose ("An unknown source ID was found: $source") + "Reserved ($source)" + } + } +} + +function makeCredential ($data) +{ + + [bios_credential_t]$cred = New-Object bios_credential_t + + if (-not $data) { + $cred.authentication = [authentication_t]::auth_t_anonymous + } + else + { + $cred.authentication = [authentication_t]::auth_t_password + $c = New-Object authentication_data_t + $c.Password = $data + $c.password_size = $data.Length + $cred.Data = $c + } + $cred +} + + + +function getLogEntry ([uint32]$source,[uint32]$id,[int]$index) +{ + [int]$code = $id -bor ($source -shl 8) + $result = "Undefined log entry $id from source $source." + try { + $result = $msgs[$code][$index] } catch { + Write-Verbose ("No entry for source=$source and id=$id, using generic description"); + } + return [string]$result +} + +function getImageInformation ($filename) +{ + + if (Test-Path $filename) { $info = (Get-Item $filename) } + else { + throw "Logo bitmap file $file not found." + } + + [psobject]$result = New-Object PSOBJECT + try { + $image = New-Object -ComObject Wia.ImageFile + $image.LoadFile($info.FullName) + } + catch [System.ArgumentException]{ + Write-Verbose $_.Exception + throw "Could not load '$file' please make sure this is a valid JPEG file" + } + + Write-Verbose "This picture is $($image.width) x $($image.height)" + Write-Verbose "This picture is $($info.length) bytes" + + $result | + Add-Member -MemberType NoteProperty -Name FullName -Value $info.FullName -Passthru | + Add-Member -MemberType NoteProperty -Name Size -Value $info.Length -Passthru | + Add-Member -MemberType NoteProperty -Name Width -Value $image.Width -Passthru | + Add-Member -MemberType NoteProperty -Name Height -Value $image.Height -Passthru | + Add-Member -MemberType NoteProperty -Name Depth -Value $image.pixeldepth -Passthru | + Add-Member -MemberType NoteProperty -Name Xdpi -Value $image.horizontalresolution -Passthru | + Add-Member -MemberType NoteProperty -Name Ydpi -Value $image.verticalresolution -Passthru +} + + + +<# +.SYNOPSIS + Retrieves firmware log entries + +.DESCRIPTION + This command retrieves an array of firmware log entries. These logs are HP specific and are generated by various HP firmware subsystems. + +.PARAMETER Numeric + If specified, the output displays the log entries as raw values, which is often useful for debugging or communicating with HP. Otherwise, the script will attempt to interpret the logs and display friendly text. + +.EXAMPLE + $logs = Get-HPFirmwareAuditLog -numeric + +.NOTES + - Requires HP BIOS with firmware log support + - This command requires elevated privileges. +#> +function Get-HPFirmwareAuditLog { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPFirmwareAuditLog")] + param([switch]$Numeric) + + + if (-not (Test-IsElevatedAdmin)) { + throw [System.Security.AccessControl.PrivilegeNotHeldException]"elevated administrator" + } + + $buffer_size = 0 + $buffer_out = $null + $records_count = 0 + $mi_result = 0 + + Write-Verbose "Querying for number of records." + try { + $result = getAuditLogEntries -buffer_out ([ref]$buffer_out) -buffer_size ([ref]$buffer_size) -records_count ([ref]$records_count) -mi_result ([ref]$mi_result) + } + catch [System.Management.Automation.MethodInvocationException] + { + displayInvocationException ($_.Exception) + } + + Test-HPPrivateCustomResult -result $result -mi_result $mi_result -Category 0x01 + + if ($records_count -eq 0) + { + Write-Verbose "There are no records to retrieve." + return "No records." + } + Write-Verbose "Found $records_count records." + $buffer_out = [bios_log_entry_t[]]::new($records_count) + + try { + $result = getAuditLogEntries -buffer_out ([ref]$buffer_out) -buffer_size ([ref]$buffer_size) -records_count ([ref]$records_count) -mi_result ([ref]$mi_result) + + <# + switch (Test-OSBitness) { + 32 { $result = [DfmNativeBios]::get_audit_logs_32($buffer_out,[ref]$buffer_size,[ref]$records_count,[ref]$mi_result) } + 64 { $result = [DfmNativeBios]::get_audit_logs_64($buffer_out,[ref]$buffer_size,[ref]$records_count,[ref]$mi_result) } + } + #> + } + catch [System.Management.Automation.MethodInvocationException] + { + displayInvocationException ($_.Exception) + } + + Test-HPPrivateCustomResult -result $result -mi_result $mi_result -Category 0x01 + Write-Verbose "Received $records_count records" + + if (-not $numeric.IsPresent) { + $buffer_out | Select-Object -Property ` + message_number,` + @{ Name = "severity"; Expression = { formatLogSeverity (getLogEntry -Source $_.source_id -Id $_.event_id -Index 1) } },` + @{ Name = "system_state_at_event"; Expression = { formatPowerstate ($_.system_state_at_event) } },` + @{ Name = "source_id"; Expression = { formatEventSource ($_.source_id) } },` + event_id,` + timestamp_is_exact,` + @{ Name = "timestamp"; Expression = { formatLogTimestamp ($_.timestamp) } },` + @{ Name = "description"; Expression = { getLogEntry -Source $_.source_id -Id $_.event_id -Index 0 -Numeric $numeric.IsPresent } },` + @{ Name = "raw_event_data"; Expression = { (formatLogEntryInHex ` + -Status $_.Status ` + -MessageNumber $_.message_number ` + -timestamp $_.timestamp ` + -Source $_.source_id ` + -Id $_.event_id ` + -Severity $_.severity ` + -Data0 $_.data_0 ` + -Data1 $_.data_1 ` + -Data2 $_.data_2 ` + -Data3 $_.data_3 ` + -Data4 $_.data_4) } + } + } + else + { + $buffer_out | Select-Object -Property ` + message_number,` + @{ Name = "severity"; Expression = { [int]$_.severity } },` + @{ Name = "system_state_at_event"; Expression = { [int]$_.system_state_at_event } },` + source_id,` + event_id,` + timestamp_is_exact,` + @{ Name = "timestamp"; Expression = { formatLogTimestamp ($_.timestamp) } },` + @{ Name = "raw_event_data"; Expression = {(formatLogEntryInHex ` + -Status $_.Status ` + -MessageNumber $_.message_number ` + -timestamp $_.timestamp ` + -Source $_.source_id ` + -Id $_.event_id ` + -Severity $_.severity ` + -Data0 $_.data_0 ` + -Data1 $_.data_1 ` + -Data2 $_.data_2 ` + -Data3 $_.data_3 ` + -Data4 $_.data_4) } + } + } +} + + +<# +.SYNOPSIS + Sets the logo on reboot + +.DESCRIPTION + This command sets the boot logo that is seen after computer POST and before the OS takes over. The default logo is the HP logo, but companies may wish to customize it with their own enterprise or workgroup logo. + + Please note that the file format has specific restrictions. See the -File parameter for more information. + +.NOTES + - Requires HP BIOS. + - This command requires elevated privileges. + - Use single quotes around the password to prevent PowerShell from interpreting special characters in the string. + + +.PARAMETER File + Specifies the file to use as the logo. The file must follow the below restrictions: + 1. Must be JPEG + 2. Resolution may not be higher than 1024x768 + 3. File size may not be larger than 32751 bytes. + + +.PARAMETER Password + Specifies the BIOS setup password, if any + +.EXAMPLE + Set-HPFirmwareBootLogo -file myfile.jpg + +.LINK + [Clear-HPFirmwareBootLogo](https://developers.hp.com/hp-client-management/doc/Clear-HPFirmwareBootLogo) + +.LINK + [Get-HPFirmwareBootLogoIsActive](https://developers.hp.com/hp-client-management/doc/Get-HPFirmwareBootLogoIsActive) + +.NOTES + - Not currently supported in Windows PE. + - Requires HP BIOS + - This command requires elevated privileges. + - Due to a BIOS limitation, this command will not succeed if HP Sure Admin is enabled. +#> +function Set-HPFirmwareBootLogo +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Set-HPFirmwareBootLogo")] + + param( + [Parameter(Mandatory = $true,Position = 0)] [string]$File, + [Parameter(Mandatory = $false,Position = 1)] [string]$Password = $null) + + if (-not (Test-IsElevatedAdmin)) { + throw [System.Security.AccessControl.PrivilegeNotHeldException]"elevated administrator" + } + + [bios_credential_t]$cred = makeCredential ($password) + $max_size = (32768 - 16 - 1) + $mi_result = 0 + + if ($password -ne $null) + { + $cred.authentication = [authentication_t]::auth_t_password + $cred.Data.Password = $password + $cred.Data.password_size = $password.Length + } + + $info = getImageInformation ($file) + + if (($info.Width -gt 1024) -or ($info.Height -gt 768) -or ($info.Size -gt $max_size)) + { + Write-Verbose ("Validation error:") + Write-Verbose (" File size: $size") + Write-Verbose (" File resolution: $width x $height") + throw ("File is larger than $max_size or has a greater resolution than 1024x768") + } + + try { + switch (Test-OSBitness) { + 32 { $result = [DfmNativeBios]::set_enterprise_logo32($info.FullName,[ref]$cred,[ref]$mi_result) } + 64 { $result = [DfmNativeBios]::set_enterprise_logo64($info.FullName,[ref]$cred,[ref]$mi_result) } + } + } + catch [System.Management.Automation.MethodInvocationException] + { + displayInvocationException ($_.Exception) + } + Test-HPPrivateCustomResult -result $result -mi_result $mi_result -Category 0x02 + +} + + +<# +.SYNOPSIS + Checks if a custom logo is currently active + +.DESCRIPTION + This command returns $true if a custom logo was previously configured via the Set-HPFirmwareBootLogo command. Returns $false otherwise. + +.NOTES + - Requires HP BIOS + - This command requires elevated privileges. + +.EXAMPLE + $isactive = Get-HPFirmwareBootLogoIsActive + +.LINK + [Clear-HPFirmwareBootLogo](https://developers.hp.com/hp-client-management/doc/Clear-HPFirmwareBootLogo) + +.LINK + [Set-HPFirmwareBootLogo](https://developers.hp.com/hp-client-management/doc/Set-HPFirmwareBootLogo) + + + +#> +function Get-HPFirmwareBootLogoIsActive +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPFirmwareBootLogoIsActive")] + param() + if (-not (Test-IsElevatedAdmin)) { + throw [System.Security.AccessControl.PrivilegeNotHeldException]"elevated administrator" + } + $state = 0 + $installed = 0 + $mi_error = 0 + + try { + switch (Test-OSBitness) { + 32 { $result = [DfmNativeBios]::query_enterprise_logo32([ref]$installed,[ref]$state,[ref]$mi_error) } + 64 { $result = [DfmNativeBios]::query_enterprise_logo64([ref]$installed,[ref]$state,[ref]$mi_error) } + } + } + catch [System.Management.Automation.MethodInvocationException] + { + displayInvocationException ($_.Exception) + } + + Test-HPPrivateCustomResult -result $result -mi_result $mi_error -Category 0x02 + Write-Verbose ("Flash is in progress: $state") + Write-Verbose ("Logo in use: $installed") + $installed -eq 1 +} + +<# +.SYNOPSIS + Removes any active custom boot logo + +.DESCRIPTION + This command removes any custom boot logo and reverts the boot logo back to the HP logo. + +.PARAMETER password + Specifies the BIOS setup password, if any. Use single quotes around the password to prevent PowerShell from interpreting special characters in the string. + +.EXAMPLE + Clear-HPFirmwareBootLogo -file myfile.jpg + +.LINK + [Set-HPFirmwareBootLogo](https://developers.hp.com/hp-client-management/doc/Set-HPFirmwareBootLogo) + +.LINK + [Get-HPFirmwareBootLogoIsActive](https://developers.hp.com/hp-client-management/doc/Get-HPFirmwareBootLogoIsActive) + +.NOTES + - Requires HP BIOS + - This command requires elevated privileges. + - Due to a BIOS limitation, this command will not succeed when HP Sure Admin is enabled. + +#> +function Clear-HPFirmwareBootLogo +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Clear-HPFirmwareBootLogo")] + + param([Parameter(Mandatory = $false,Position = 0)] [string]$Password = $null) + if (-not (Test-IsElevatedAdmin)) { + throw [System.Security.AccessControl.PrivilegeNotHeldException]"elevated administrator" + } + + $mi_result = 0 + $cred = makeCredential ($password) + + try { + switch (Test-OSBitness) { + 32 { $result = [DfmNativeBios]::clear_enterprise_logo32([ref]$cred,[ref]$mi_result) } + 64 { $result = [DfmNativeBios]::clear_enterprise_logo64([ref]$cred,[ref]$mi_result) } + } + } + catch [System.Management.Automation.MethodInvocationException] + { + + displayInvocationException ($_.Exception) + } + + Test-HPPrivateCustomResult -result $result -mi_result $mi_result -Category 0x02 +} + + + +<# +.SYNOPSIS + Updates the system firmware from a capsule or BIOS binary file + +.DESCRIPTION + This command updates the system firmware on the current platform. The update must be provided as a BIN file and can be obtained via the [Get-HPBIOSUpdates](https://developers.hp.com/hp-client-management/doc/Get-HPBiosUpdates) command. + If HP Sure Admin is enabled, a payload file should be provided instead of a password. + + Online Mode uses Seamless Firmware Update Service. Seamless Firmware Update Service updates the BIOS in the background while the operating system is running (no authentication needed). 2022 and newer HP computers with Intel processors support Seamless Firmware Update Service. + Offline Mode updates the BIOS on reboot and requires authentication (password or payload). + +.PARAMETER File + Specifies the firmware update binary (.BIN) file. If the filename does not follow the pattern 'U70_010101.bin', the -FilenameHint parameter should be specified. + +.PARAMETER PayloadFile + Specifies the payload file to authorize firmware update. Refer to the New-HPSureAdminFirmwareUpdatePayload command for information on how to generate the payload file. + +.PARAMETER Payload + Specifies the payload to authorize firmware update. Refer to the New-HPSureAdminFirmwareUpdatePayload command for information on how to generate the payload. + +.PARAMETER Password + Specifies the BIOS setup password, if any. Use single quotes around the password to prevent PowerShell from interpreting special characters in the string. + +.PARAMETER Quiet + If specified, this command will suppress non-essential messages during execution. + +.PARAMETER BitLocker + Specifies the behavior to the BitLocker check prompt (if any). The value must be one of the following values: + - stop: (default option) stops execution if BitLocker is detected but not suspended, and prompts + - ignore: skips the BitLocker check + - suspend: suspends BitLocker if active and continues with execution + +.PARAMETER Force + If specified, this command will force the BIOS update even if the target BIOS is already installed. + +.PARAMETER FilenameHint + Specifies the original file name without the .bin extension if using a file name other than the original file name. Alias -filename_hint. Some older generations of platforms require that the filename of the BIOS update be in a specific format (e.g.: 'U70_010101'). + If this parameter is not specified, this command will extract the file name from the -File parameter. However, if it does not match the required format on platforms that require a specific format, this command may fail. + If the system does not require a specific format (not required on most recent systems), this parameter might be ignored. + +.PARAMETER Offline + If specified, this command selects the offline mode to flash the BIOS instead of the default online mode. If specified, the actual flash will only occur on reboot at pre-OS environment. Please note that offline mode is selected by default when downgrading the BIOS. Offline mode requires authentication, so either a Password or a PayloadFile should be specified. + +.PARAMETER NoWait + If specified, the script will not wait for the online flash background task to finish. If the user reboots the PC during the online flash, the update will complete only after reboot. + +.EXAMPLE + Update-HPFirmware -File bios.bin -Password 'mysecret' -FilenameHint 'U70_010101' + +.EXAMPLE + Update-HPFirmware -File U70_010101.bin -NoWait + +.EXAMPLE + Update-HPFirmware -File U70_010101.bin -Offline + +.EXAMPLE + Update-HPFirmware -File bios.bin -PayloadFile PayloadFile.dat -FilenameHint 'U70_010101' + +.NOTES + - Requires HP BIOS. + - Requires 64-bit PowerShell (not supported under 32-bit PowerShell). + - UEFI boot mode is required; legacy mode is not supported. + - This command requires elevated privileges. + + **WinPE notes** + + - Use '-BitLocker ignore' when using this command in WinPE because BitLocker checks are not applicable in Windows PE. + - Requires that the WInPE image is built with the WinPE-SecureBootCmdlets.cab component. + +#> +function Update-HPFirmware { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Update-HPFirmware")] + param( + [Parameter(ParameterSetName = "Password",Mandatory = $false,Position = 0)] + [string]$Password, + + [Parameter(ParameterSetName = "PayloadFile",Mandatory = $true,Position = 0)] + [System.IO.FileInfo]$PayloadFile, + + [Parameter(ParameterSetName = "Payload",Mandatory = $true,Position = 0)] + [string]$Payload, + + [ValidateScript({ if (-not ($_ | Test-Path)) { throw "Firmware file '$_' cannot be accessed." } return $true })] + [Parameter(ParameterSetName = "Password",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "PayloadFile",Mandatory = $true,Position = 1)] + [Parameter(ParameterSetName = "Payload",Mandatory = $true,Position = 1)] + [System.IO.FileInfo]$File, + + [Parameter(ParameterSetName = "Password",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "PayloadFile",Mandatory = $false,Position = 2)] + [Parameter(ParameterSetName = "Payload",Mandatory = $false,Position = 2)] + [switch]$Quiet, + + [ValidateSet('stop','ignore','suspend')] + [Parameter(ParameterSetName = "Password",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "PayloadFile",Mandatory = $false,Position = 3)] + [Parameter(ParameterSetName = "Payload",Mandatory = $false,Position = 3)] + [string]$BitLocker = 'stop', + + [Alias("filename_hint")] + [ValidateScript({ + if (($PSItem -match '^[A-Z][0-9]{2}_[0-9]{4}$') -or ($PSItem -match '^[A-Z][0-9]{2}_[0-9]{6}$') -or ($PSItem -match '^[A-Z][0-9]{2}_[0-9]{8}$')) + { return $true } + throw "Filename hint '$_' does not match expected format of '_' where targetBiosVersion must have 4 or 6 or 8 digits."})] + [Parameter(ParameterSetName = "Password",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "PayloadFile",Mandatory = $false,Position = 4)] + [Parameter(ParameterSetName = "Payload",Mandatory = $false,Position = 4)] + [string]$FilenameHint, + + [Parameter(ParameterSetName = "Password",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "PayloadFile",Mandatory = $false,Position = 5)] + [Parameter(ParameterSetName = "Payload",Mandatory = $false,Position = 5)] + [switch]$Force, + + [Parameter(ParameterSetName = "Password",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "PayloadFile",Mandatory = $false,Position = 6)] + [Parameter(ParameterSetName = "Payload",Mandatory = $false,Position = 6)] + [switch]$Offline, + + [Parameter(ParameterSetName = "Password",Mandatory = $false,Position = 7)] + [Parameter(ParameterSetName = "PayloadFile",Mandatory = $false,Position = 7)] + [Parameter(ParameterSetName = "Payload",Mandatory = $false,Position = 7)] + [switch]$NoWait + ) + + Test-HPFirmwareFlashSupported -CheckPlatform + $resolvedFile = resolvePath ($file) + + Write-Verbose 'Preparing BIOS update' + Write-Verbose "Update file is: $resolvedFile" + + [byte[]]$authorization = $null + $authorizationLength = 0 + if ($PSCmdlet.ParameterSetName -eq 'PayloadFile' -Or $PSCmdlet.ParameterSetName -eq 'Payload') { + if ($PSCmdlet.ParameterSetName -eq 'PayloadFile') { + $payload = Get-Content -Path $PayloadFile -Encoding UTF8 + } + [PortableFileFormat]$portable = ConvertFrom-Json -InputObject $payload + + if ($portable.purpose -ne "hp:sureadmin:firmwareupdate") { + throw "The payload should be generated by New-HPSureAdminFirmwareUpdatePayload function" + } + + $data = [System.Text.Encoding]::UTF8.GetString($portable.Data) | ConvertFrom-Json + [byte[]]$authorization = $data.Authorization | ConvertFrom-Json + $authorizationLength = $authorization.Length + } + + $blenabled = checkBitlocker ($bitlocker) + if ($blenabled -eq $false) { + Write-Verbose "Aborting due to BitLocker issue" + return + } + + $cred = makeCredential ($password) + + if (-not $FilenameHint) { + $filenameHintInternal = [io.path]::GetFileNameWithoutExtension($file) + + # if two extra digits are found in the -File parameter, remove them from the filenameHintInternal variable + if ($filenameHintInternal.Length -eq 12) { + $filenameHintInternal = $filenameHintInternal.substring(0, 10) + } + + Write-Verbose "Extracting filenameHint from file: '$filenameHintInternal'" + } + else { + $filenameHintInternal = $FilenameHint + Write-Verbose "Caller gives a filename hint of '$filenameHintInternal'" + } + + try { + # Reconstruct the file name for the current BIOS and use it to compare + # with the target BIOS file name. This is used as a 'best effort' check. + $ver,$fam = (Get-HPBIOSVersion -IncludeFamily).Replace(".","").Split() + $ver = $ver.Replace(".","").PadLeft(6,'0') + $biosVersion = "$($fam)_$($ver)" + } + catch { + Write-Verbose "Could not construct file name for the currently installed BIOS: $($_.Exception.Message)" + $biosVersion = "" + $ver = $null + } + + $isValidBiosVersion = $biosVersion -match '^[A-Z][0-9]{2}_[0-9]{4,6}$' + if (-not $isValidBiosVersion) { + throw "Could not construct file name for the currently installed BIOS: $biosVersion" + } + + if (-not $Force.IsPresent -and ($filenameHintInternal -eq $biosVersion)) { + Write-Host "This system is already running BIOS version $(Get-HPBIOSVersion)" + Write-Host -ForegroundColor Cyan "Use '-Force' on the command line to proceed anyway." + return + } + + $Callback = { + param( + [int32]$Location, + [int32]$Value1, + [int32]$Value2, + [int32]$Status + ) + + if (-not $quiet.IsPresent) { + $activityTitle = "Updating system firmware" + switch ($location) + { + 1 { Write-Progress -Activity $activityTitle -CurrentOperation "Beginning flash process" -PercentComplete 0 } + 2 { + $progress = ($Value1 * 100) / $Value2 + Write-Progress -Activity $activityTitle -CurrentOperation "Copying firmware" -PercentComplete $progress + } + 3 { Write-Progress -Activity $activityTitle -CurrentOperation "Completing operation" -PercentComplete 100 } + 4 { + $progress = ($Value1 * 100) / $Value2 + Write-Progress -Activity $activityTitle -CurrentOperation "Waiting for the BIOS to process the file" -PercentComplete $progress + } + 10 { Write-Progress -Activity $activityTitle -CurrentOperation "Operation complete" -PercentComplete 100 -Completed } + default { Write-Verbose "Unknown status received $location" } + } + } + } -as [ProgressCallback] + + $efi_path = Get-EFIPartitionPath -FixedOnly + + # Online mode isn't supported when downgrading the BIOS + # Using filenameHint to determine if it is a downgrade or not + $offlineMode = $false + + # some bin file names have an extra two zeroes at the end of the BIOS version number i.e. S02_02160000.bin instead of S02_021600.bin or S02_0216.bin + # workaround: if 8 digit version was given in the -FilenameHint parameter, drop the last two digits in filenameHintInternal just like we do if no -FilenameHint parameter was given and two extra digits were found in the filename for the BIOS version + # warning: this is a weak workaround, but it is the best we can do to not confuse the user if they give a filename hint that is exactly the same as the name of the bin file + if($filenameHintInternal -match '^[A-Z][0-9]{2}_[0-9]{8}$'){ + $filenameHintInternal = $filenameHintInternal.Substring(0, $filenameHintInternal.Length - 2) + } + + # note: if filename hint given through FileNameHint parameter has 5 digits or 7 digits, bios version comparison might not be valid. In theory, 5 digits or 7 digits target bios versions should never get through to here + # because of the ValidateScript() for the FilenameHint parameter. + # If it does, the command will continue with a warning just like how it does if filename hint (determined from -File parameter or given in -FilenameHint parameter) does not match regex pattern '^[A-Z][0-9]{2}_[0-9]{4}$' or '^[A-Z][0-9]{2}_[0-9]{6}$' + # Set-HPPrivateFlashHPDevice should fail if a valid filename hint was necessary for the update to be successful (some platforms require a specific format to be given in the filenamehint). + $isValidHint = $filenameHintInternal -match '^[A-Z][0-9]{2}_[0-9]{4}$' -or $filenameHintInternal -match '^[A-Z][0-9]{2}_[0-9]{6}$' + if ($isValidHint) { + $targetVer = $filenameHintInternal.Split('_')[1] + + if ($targetVer -and $ver) { + # if the current BIOS version is greater than or equal to the target BIOS version, then offline mode is selected + if ($ver.TrimStart('0') -ge $targetVer.TrimStart('0')) { + Write-Verbose "Offline mode selected based on the filename hint." + $offlineMode = $true + } + } + else { + $isValidHint = $false + } + } + + if (-not $isValidHint) { + Write-Warning "Cannot parse the filename $filenameHintInternal. This parameter is used to determine if it is a BIOS downgrade or upgrade." + } + + $onlineModeIsSupported = Test-HPPrivateBIOSUpdateOnlineModeIsSupported + if ($Offline.IsPresent -or -not $onlineModeIsSupported) { + Write-Verbose "Online mode supported: $onlineModeIsSupported." + $offlineMode = $true + } + + if ($offlineMode -and ((Get-HPBIOSSetupPasswordIsSet) -or (Get-HPPrivateSecurePlatformIsProvisioned)) -and -not $Password -and -not $PayloadFile -and -not $Payload) { + throw "Offline mode is selected. This mode requires authentication so either a Password or PayloadFile should be specified." + } + + Set-HPPrivateFlashHPDevice -ResolvedFile $resolvedFile -Cred $cred -Callback $Callback -FilenameHint $filenameHintInternal -Efi_path $efi_path -Authorization $authorization -AuthorizationLength $authorizationLength -Offline $offlineMode -NoWait $NoWait.IsPresent -Verbose:$VerbosePreference + + if (-not $quiet.IsPresent) { + Write-Host -ForegroundColor Cyan "Firmware image has been deployed. The process will continue after reboot." + } +} + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Set-HPPrivateFlashHPDevice { + [CmdletBinding()] + param( + $ResolvedFile, + $Cred, + $Callback, + $FilenameHint, + $Efi_path, + $Authorization, + $AuthorizationLength, + $Offline, + $NoWait + ) + + try { + $mi_result = 0 + switch (Test-OSBitness) { + 32 { $result = [DfmNativeBios]::flash_hp_device32([string]$ResolvedFile,[ref]$Cred,[ref]$mi_result,$Callback,$FilenameHint,$Efi_path,$Authorization,$AuthorizationLength,[bool]$Offline,[bool]$NoWait) } + 64 { $result = [DfmNativeBios]::flash_hp_device64([string]$ResolvedFile,[ref]$Cred,[ref]$mi_result,$Callback,$FilenameHint,$Efi_path,$Authorization,$AuthorizationLength,[bool]$Offline,[bool]$NoWait) } + } + Test-HPPrivateCustomResult -result $result -Category 0x02 -mi_result $mi_result + } + catch [System.Management.Automation.MethodInvocationException] + { + displayInvocationException ($_.Exception) + } + + Test-HPPrivateCustomResult -result 0x80000711 -mi_result $result -Category 0x02 +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Set-HPPrivateFirmwareUpdatePayload { + [CmdletBinding()] + param( + [Parameter(ParameterSetName = 'Payload',Position = 0,Mandatory = $true,ValueFromPipeline = $true)] + [string]$Payload + ) + + [PortableFileFormat]$portable = ConvertFrom-Json -InputObject $payload + if ($portable.purpose -ne "hp:sureadmin:firmwareupdate") { + throw "The payload should be generated by New-HPSureAdminFirmwareUpdatePayload function" + } + + $data = [System.Text.Encoding]::UTF8.GetString($portable.Data) | ConvertFrom-Json + $params = @{ + File = resolvePath ($data.FileName) + Payload = $Payload + } + if ($data.Quiet -eq $True) { + $params.Quiet = $data.Quiet + } + if ($data.Force -eq $True) { + $params.Force = $data.Force + } + if ($data.bitlocker) { + $params.BitLocker = $data.bitlocker + } + + if ([System.IO.File]::Exists($params.file) -eq $true) { + Write-Verbose "File $($params.File) was found, calling Update-HPFirmware" + Update-HPFirmware @params + } + else { + Write-Verbose "File $($params.File) was not found, you can call Update-HPFirmware manually" + } +} + +<# +.SYNOPSIS + Checks if firmware updates via UEFI mode are supported on the current platform + +.DESCRIPTION + This command checks if firmware updates in UEFI mode are supported on the current platform and throws an exception if the current platform does not meet the minimum requirements for flashing. + +.EXAMPLE + Test-HPFirmwareFlashSupported + +.NOTES + - This command requires elevated privileges. + - UEFI Mode and proper flash support in the BIOS (normally 2017 or later platforms) are required for flashing. +#> +function Test-HPFirmwareFlashSupported +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Test-HPFirmwareFlashSupported")] + param( + [Parameter(Mandatory = $false,Position = 1)] [switch]$CheckPlatform + ) + [int]$major = [environment]::OSVersion.Version.Major + [int]$release = (Get-ItemProperty -Path Registry::"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ReleaseId + [int]$result = 0 + + if (-not (Test-IsElevatedAdmin)) { + throw [System.Security.AccessControl.PrivilegeNotHeldException]"elevated administrator" + } + + if ($checkplatform.IsPresent) { + Write-Verbose "Checking UEFI mode" + if ((Get-HPDeviceBootInformation).Mode -ne "UEFI") + { + Write-Verbose "Mode $((Get-HPDeviceBootInformation).Mode) is not supported." + throw [System.Management.Automation.RuntimeException]"This cmdlet only supported Windows 10 UEFI mode." + } + + Write-Verbose "Making sure BIOS update is not locked" + try { + if ((Get-HPBIOSSettingValue "Lock BIOS Version") -ne "Disable") + { + Write-Verbose "Lock BIOS Version is set; flash will probably fail" + throw [System.Management.Automation.RuntimeException]"You cannot flash while 'Lock BIOS Version' is enabled." + } + } catch [System.InvalidOperationException],[System.Management.Automation.ItemNotFoundException]{ + Write-Verbose "This system does not appear to have a Lock BIOS Version setting - ignoring." + } + } + + Write-Verbose "All flash checks passed" + +} + + +<# +.SYNOPSIS + Creates a password file compatible with HP BIOS Configuration Utility (BCU) + +.DESCRIPTION + This command creates a password file that is compatible with the HP BIOS Configuration Utility (BCU). The command is roughly equivalent to running the HpqPswd tool with the following arguments: + + hpqpswd /s /p"password" /f"outfile" + + +.PARAMETER password + Specifies the password to encode into the target file + +.PARAMETER outfile + Specifies the file to create. If not specified, this command will attempt to create a file in the current directory named 'password.bin'. + +.EXAMPLE + Write-HPFirmwarePasswordFile -password 'mysecret' -outfile mysecret.bin + +.NOTES + - Use single quotes around the password to prevent PowerShell from interpreting special characters in the string. + + +#> +function Write-HPFirmwarePasswordFile +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Write-HPFirmwarePasswordFile")] + param( + [Parameter(Mandatory = $true,Position = 0)] [string]$Password, + [Parameter(Mandatory = $false,Position = 1)] [System.IO.FileInfo]$Outfile = "password.bin" + ) + Write-Verbose "Creating password file $outfile..." + [bios_credential_t]$cred = New-Object bios_credential_t + $cred.authentication = [authentication_t]::auth_t_password; + $c = New-Object authentication_data_t + $c.Password = $password + $c.password_size = $password.Length + $cred.Data = $c + + $outFile = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($outFile) + Write-Verbose ("Writing password to file $outfile") + try { + switch (Test-OSBitness) { + 32 { $result = [DfmNativeBios]::encrypt_password_to_file32([ref]$cred,$outFile) } + 64 { $result = [DfmNativeBios]::encrypt_password_to_file64([ref]$cred,$outFile) } + } + Test-HPPrivateCustomResult -result $result -Category -1 } + catch [ArgumentException] + { + $err = "Failed to process file with path $($_)" + Write-Verbose $err + throw $err + } + catch [System.Management.Automation.MethodInvocationException] + { + displayInvocationException ($_.Exception) + } + Write-Verbose "Ok." +} + +function createTemporaryDirectory { + $parent = [System.IO.Path]::GetTempPath() + [string]$name = [System.Guid]::NewGuid() + New-Item -ItemType Directory -Path (Join-Path $parent $name) +} + + + + +<# +.SYNOPSIS + This is a private command for internal use only. Retrieves the EFI partition path. + +.DESCRIPTION + This is a private command for internal use only. This command retrieves the path of the EFI partition. + +.PARAMETER FixedOnly + If specified, this command ignores removable drives during search. + +.EXAMPLE + Get-EFIPartitionPath + +.NOTES + - This command requires elevated privileges. + - This is a private command for internal use only +#> +function Get-EFIPartitionPath +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-EFIPartitionPath")] + param([Parameter(Mandatory = $false,Position = 1)] [switch]$FixedOnly) + + if (-not (Test-IsElevatedAdmin)) { + throw [System.Security.AccessControl.PrivilegeNotHeldException]"elevated administrator" + } + + $volumes = Get-Partition | Select-Object ` + @{ Name = "Path"; Expression = { (Get-Volume -Partition $_).Path } },` + @{ Name = "Mount"; Expression = {(Get-Volume -Partition $_).DriveType } },` + @{ Name = "Type"; Expression = { $_.Type } },` + @{ Name = "Disk"; Expression = { $_.DiskNumber } } + + if ($fixedOnly) { $volumes = $volumes | Where-Object Mount -EQ "Fixed" } + [array]$efi = $volumes | Where-Object { $_.type -eq "System" } + + if (-not $efi) { + throw [System.Management.Automation.ItemNotFoundException]"Could not locate EFI partition. " + } + + # ignore EFI partitions that may be offline + [array]$efi = $efi | Where-Object { (Get-Disk -Number $_.Disk).OperationalStatus -eq "Online" } + + if (-not $efi) { + throw [System.Management.Automation.ItemNotFoundException]"Could not locate EFI partition. " + } + + # try to match the EFI partition to the boot disk, if we find multiple + if ($efi.Count -gt 1 -and -not (Test-WinPE)) + { + Write-Verbose "Found multiple ($($efi.Count)) EFI fixed partitions, trying to trim them down." + [array]$efi = $efi | Where-Object { (Get-Disk -Number $_.Disk).IsBoot -eq $true } + } + + + if ($efi.Count -gt 1) { + throw [System.Management.Automation.ItemNotFoundException]"Could not locate EFI partition, too many candidates." + } + + + $efi[0].Path +} + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateRetailConfiguration +{ + [CmdletBinding()] + param() + $configuration = New-Object RetailInformation + $mi_result = 0 + $cmd = '[DfmNativeRetail]::get_retail_dock_configuration_' + (Test-OSBitness) + '([ref]$configuration, [ref]$mi_result)'; + $result = Invoke-Expression -Command $cmd + Test-HPPrivateCustomResult -result $result -mi_result $mi_result -Category 0x04 + return $configuration +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Set-HPPrivateRetailConfiguration +{ + [CmdletBinding()] + param( + [RetailInformation]$configuration + ) + $cfg = $configuration + $mi_result = 0 + $cmd = '[DfmNativeRetail]::set_retail_dock_configuration_' + (Test-OSBitness) + '([ref]$cfg, [ref]$mi_result)'; + $result = Invoke-Expression -Command $cmd + Test-HPPrivateCustomResult -result $result -mi_result $mi_result -Category 0x04 +} + +# SIG # Begin signature block +# MIIoHgYJKoZIhvcNAQcCoIIoDzCCKAsCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDYgMaolzmZ0qyE +# tWzqmlzCEwqxnzyhnkBF/WEn1g3AXqCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6jCCGeYCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIIGUtnWM +# mMr+657tWH6hWOBQlZdPngx3Rsn4jgwIykv2MA0GCSqGSIb3DQEBAQUABIIBgEeh +# tT4MPsC9m41RMqoh/8OarxovPmTwrGBJjiZEyZYXug6Qu5gJRmY0nRcOX5spu2++ +# hB1xP1hkmrrRTLMeFJrnCxxIzsmNwF8r6GTp4moOEHJ3cmXHDIB563Iiz35nMKkZ +# WT+kbClGvT6NsuGtRQrF0X2D+ZST8prLFxmG/eFlwwYprpGwc3ix0jwtCHanAkUG +# 99/Yd3JGRVco58PnOCn7/mm3fCgOl/rQf5juUPOwWKnTJZkAxgw7lU9+/EZhScSK +# IqDsDMHEKfjXWIKFzWRJgmodXFg+ZT0pFUzwWTzOA+AbxCvB1mdwc+rdcQAtBd9a +# sY/262kgEFCrepDyLXq1WefCSMMrTyzPDha2ym55lV4KekmLwyq+3So1oITeBZAx +# 57+OrADgg+nnVCA3JuRXuiZfsd+0Pvd7gitTaF3ezT4MW0FnVW+Acl60n+WDib3B +# iwPvZTFyLArueRbobc9vAZq7JbJeMMie9mD0WPIAjxhiPpRqXbV5PeJY2+9/s6GC +# F0Awghc8BgorBgEEAYI3AwMBMYIXLDCCFygGCSqGSIb3DQEHAqCCFxkwghcVAgED +# MQ8wDQYJYIZIAWUDBAIBBQAweAYLKoZIhvcNAQkQAQSgaQRnMGUCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCDOsRd2ZnyDi9GDM6Zey4y9pI+MQu17N0+s +# jMwK5i2ONwIRAPGMUfrxUoRYAgLKB//wIlEYDzIwMjQwODI3MTY1NTUwWqCCEwkw +# ggbCMIIEqqADAgECAhAFRK/zlJ0IOaa/2z9f5WEWMA0GCSqGSIb3DQEBCwUAMGMx +# CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMy +# RGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcg +# Q0EwHhcNMjMwNzE0MDAwMDAwWhcNMzQxMDEzMjM1OTU5WjBIMQswCQYDVQQGEwJV +# UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xIDAeBgNVBAMTF0RpZ2lDZXJ0IFRp +# bWVzdGFtcCAyMDIzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo1NF +# hx2DjlusPlSzI+DPn9fl0uddoQ4J3C9Io5d6OyqcZ9xiFVjBqZMRp82qsmrdECmK +# HmJjadNYnDVxvzqX65RQjxwg6seaOy+WZuNp52n+W8PWKyAcwZeUtKVQgfLPywem +# MGjKg0La/H8JJJSkghraarrYO8pd3hkYhftF6g1hbJ3+cV7EBpo88MUueQ8bZlLj +# yNY+X9pD04T10Mf2SC1eRXWWdf7dEKEbg8G45lKVtUfXeCk5a+B4WZfjRCtK1ZXO +# 7wgX6oJkTf8j48qG7rSkIWRw69XloNpjsy7pBe6q9iT1HbybHLK3X9/w7nZ9MZll +# R1WdSiQvrCuXvp/k/XtzPjLuUjT71Lvr1KAsNJvj3m5kGQc3AZEPHLVRzapMZoOI +# aGK7vEEbeBlt5NkP4FhB+9ixLOFRr7StFQYU6mIIE9NpHnxkTZ0P387RXoyqq1AV +# ybPKvNfEO2hEo6U7Qv1zfe7dCv95NBB+plwKWEwAPoVpdceDZNZ1zY8SdlalJPrX +# xGshuugfNJgvOuprAbD3+yqG7HtSOKmYCaFxsmxxrz64b5bV4RAT/mFHCoz+8LbH +# 1cfebCTwv0KCyqBxPZySkwS0aXAnDU+3tTbRyV8IpHCj7ArxES5k4MsiK8rxKBMh +# SVF+BmbTO77665E42FEHypS34lCh8zrTioPLQHsCAwEAAaOCAYswggGHMA4GA1Ud +# DwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATAfBgNVHSMEGDAWgBS6 +# FtltTYUvcyl2mi91jGogj57IbzAdBgNVHQ4EFgQUpbbvE+fvzdBkodVWqWUxo97V +# 40kwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp +# Z2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNybDCB +# kAYIKwYBBQUHAQEEgYMwgYAwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj +# ZXJ0LmNvbTBYBggrBgEFBQcwAoZMaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t +# L0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNy +# dDANBgkqhkiG9w0BAQsFAAOCAgEAgRrW3qCptZgXvHCNT4o8aJzYJf/LLOTN6l0i +# kuyMIgKpuM+AqNnn48XtJoKKcS8Y3U623mzX4WCcK+3tPUiOuGu6fF29wmE3aEl3 +# o+uQqhLXJ4Xzjh6S2sJAOJ9dyKAuJXglnSoFeoQpmLZXeY/bJlYrsPOnvTcM2Jh2 +# T1a5UsK2nTipgedtQVyMadG5K8TGe8+c+njikxp2oml101DkRBK+IA2eqUTQ+OVJ +# dwhaIcW0z5iVGlS6ubzBaRm6zxbygzc0brBBJt3eWpdPM43UjXd9dUWhpVgmagNF +# 3tlQtVCMr1a9TMXhRsUo063nQwBw3syYnhmJA+rUkTfvTVLzyWAhxFZH7doRS4wy +# w4jmWOK22z75X7BC1o/jF5HRqsBV44a/rCcsQdCaM0qoNtS5cpZ+l3k4SF/Kwtw9 +# Mt911jZnWon49qfH5U81PAC9vpwqbHkB3NpE5jreODsHXjlY9HxzMVWggBHLFAx+ +# rrz+pOt5Zapo1iLKO+uagjVXKBbLafIymrLS2Dq4sUaGa7oX/cR3bBVsrquvczro +# SUa31X/MtjjA2Owc9bahuEMs305MfR5ocMB3CtQC4Fxguyj/OOVSWtasFyIjTvTs +# 0xf7UGv/B3cfcZdEQcm4RtNsMnxYL2dHZeUbc7aZ+WssBkbvQR7w8F/g29mtkIBE +# r4AQQYowggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqGSIb3DQEB +# CwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNV +# BAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQg +# Um9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMxCzAJBgNV +# BAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNl +# cnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggIi +# MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXHJQPE8pE3 +# qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMfUBMLJnOW +# bfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w1lbU5ygt +# 69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRktFLydkf3 +# YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYbqMFkdECn +# wHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUmcJgmf6Aa +# RyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP65x9abJTy +# UpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzKQtwYSH8U +# NM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo80VgvCON +# WPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjBJgj5FBAS +# A31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXcheMBK9Rp61 +# 03a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAd +# BgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF +# BwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln +# aWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJo +# dHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy +# bDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQEL +# BQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd4ksp+3CK +# Daopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiCqBa9qVbP +# FXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl/Yy8ZCaH +# bJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeCRK6ZJxur +# JB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYTgAnEtp/N +# h4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/a6fxZsNB +# zU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37xJV77Qpf +# MzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmLNriT1Oby +# F5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0YgkPCr2B +# 2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJRyvmfxqk +# hQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIFjTCCBHWg +# AwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +# EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +# cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcN +# MjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEVMBMG +# A1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +# HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqGSIb3DQEB +# AQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +# pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+ +# n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYykt +# zuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw +# 2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6Qu +# BX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC +# 5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK +# 3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3 +# IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEP +# lAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98 +# THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t9dmpsh3l +# GwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8w +# DgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0 +# cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0 +# cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MEUGA1Ud +# HwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz +# c3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAowCDAGBgRVHSAAMA0GCSqGSIb3DQEB +# DAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9mqyhhyzshV6pGrsi+IcaaVQi +# 7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxSA8hO0Cre+i1Wz/n096wwepqL +# sl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE1Od/6Fmo8L8vC6bp8jQ87PcDx4eo +# 0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSMb++hUD38dglohJ9vytsgjTVg +# HAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbObyMt9H5xaiNrIv8SuFQtJ37YOtnw +# toeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMYIDdjCCA3ICAQEwdzBjMQswCQYDVQQG +# EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0 +# IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAFRK/z +# lJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUAoIHRMBoGCSqGSIb3DQEJAzENBgsq +# hkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwODI3MTY1NTUwWjArBgsqhkiG +# 9w0BCRACDDEcMBowGDAWBBRm8CsywsLJD4JdzqqKycZPGZzPQDAvBgkqhkiG9w0B +# CQQxIgQg+oBJGU/AKqeUPfvxKDzBsI1F+NI2lWDcI3p8tGtCNugwNwYLKoZIhvcN +# AQkQAi8xKDAmMCQwIgQg0vbkbe10IszR1EBXaEE2b4KK2lWarjMWr00amtQMeCgw +# DQYJKoZIhvcNAQEBBQAEggIAUdWAyL5NiwsEf7gwRmLwtjl4g9/fstCHslya/RAo +# h/00XPq0ea2bACgaVWjKNu1kyuNCqMrgnjhSfRoxf+M4VspPJOvg6HxiT7PGeU3c +# Tj1MpB8LrFC+DAqK2yBZgYNVE5b70OsCKo0gNIR4YtKV6jDccB7HZaoF1R/Cq8c3 +# 0a0wl/U97Kw4zBjvtpf/ufYIInUCDknISN2FPhAMr7dU3FdubKRMsvYOkQwGhR6U +# 4OIrZEEKrhxb6l7V04ut95ciiklZvOQz4hsORHQYAeRXHFB2bBBPrwDLxxbD58G7 +# BWfl6yZevrAkHNQmg6TN7K327cBh+Fb//mLzirECUS4KwXlYLqvC/PvGRdJrMHXi +# 5ABpvuYKouw6Y/A6nCuSil9uzq9+77tLLTxyOUQsdRGPjCdd3XHPKNyA+f4Kgbos +# UF/9VCJXiCo2aNrP+VhPczPVFUInPyvldXE/6K8XEEX9eRGvQPrhpksrKeQNhOUW +# 4t5kCU+PWWtCvv0U7oTIom2v1CXHoTeXmrM3dipbV9Z0FK3AjKjiyneJh9C19zyd +# NMU4RGmHrYiy/HI+aD7lI6ROpwSaNNSr7cpPhMMFxnrRmyuHvSo0XpWoR3SEGuVP +# DpmfCZssSDDXURy/H8TlMUIC1IlUf/sVwpg/cfCvVR7KLCD0Lw0ZUyvy6X7pRQVH +# c6A= +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Firmware/MSAL_4.36.2/net45/Microsoft.Identity.Client.dll b/Bios-Update-HP-v2.0/module/HP.Firmware/MSAL_4.36.2/net45/Microsoft.Identity.Client.dll new file mode 100644 index 0000000..a4a194f Binary files /dev/null and b/Bios-Update-HP-v2.0/module/HP.Firmware/MSAL_4.36.2/net45/Microsoft.Identity.Client.dll differ diff --git a/Bios-Update-HP-v2.0/module/HP.Firmware/MSAL_4.36.2/netcoreapp2.1/Microsoft.Identity.Client.dll b/Bios-Update-HP-v2.0/module/HP.Firmware/MSAL_4.36.2/netcoreapp2.1/Microsoft.Identity.Client.dll new file mode 100644 index 0000000..71a3947 Binary files /dev/null and b/Bios-Update-HP-v2.0/module/HP.Firmware/MSAL_4.36.2/netcoreapp2.1/Microsoft.Identity.Client.dll differ diff --git a/Bios-Update-HP-v2.0/module/HP.Firmware/license.txt b/Bios-Update-HP-v2.0/module/HP.Firmware/license.txt new file mode 100644 index 0000000..b93ca37 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Firmware/license.txt @@ -0,0 +1,248 @@ +End-User License Agreement + +READ CAREFULLY BEFORE USING THIS SOFTWARE + +This End-User license Agreement ("EULA") is a legal agreement +between (a) you (either an individual or a single entity) and (b) HP Inc. +("HP") that governs your use of any Software Product, installed on or +made available by HP for use with your HP product ("HP Product"), that +is not otherwise subject to a separate license agreement between you +and HP or its suppliers. Other software may contain a EULA in its online +documentation. The term "Software Product" means computer software +and may include associated media, printed materials and "online" or +electronic documentation. + +An amendment or addendum to this EULA may accompany the HP +Product. + +RIGHTS IN THE SOFTWARE PRODUCT ARE OFFERED ONLY ON THE +CONDITION THAT YOU AGREE TO ALL TERMS AND CONDITIONS OF +THIS EULA. BY INSTALLING, COPYING, DOWNLOADING, OR +OTHERWISE USING THE SOFTWARE PRODUCT, YOU AGREE TO BE +BOUND BY THE TERMS OF THIS EULA. IF YOU DO NOT ACCEPT THESE +LICENSE TERMS, YOUR SOLE REMEDY IS TO RETURN THE ENTIRE +UNUSED PRODUCT (HARDWARE AND SOFTWARE) WITHIN 14 DAYS +FOR A REFUND SUBJECT TO THE REFUND POLICY OF YOUR PLACE OF +PURCHASE. + +1. GRANT OF LICENSE. HP grants you the following rights provided +you comply with all terms and conditions of this EULA: + +a. Use. You may use the Software Product on a single computer ("Your +Computer"). If the Software Product is provided to you via the internet +and was originally licensed for use on more than one computer, you +may install and use the Software Product only on those computers. You +may not separate component parts of the Software Product for use on +more than one computer. You do not have the right to distribute the +Software Product. You may load the Software Product into Your +Computer's temporary memory (RAM) for purposes of using the +Software Product. + +b. Storage. You may copy the Software Product into the local memory +or storage device of the HP Product. + +c. Copying. You may make archival or back-up copies of the Software +Product, provided the copy contains all of the original Software +Product's proprietary notices and that it is used only for back-up +purposes. + +d. Reservation of Rights. HP and its suppliers reserve all rights not +expressly granted to you in this EULA. + +e. Freeware. Notwithstanding the terms and conditions of this EULA, all +or any portion of the Software Product which constitutes non- +proprietary HP software or software provided under public license by +third parties ("Freeware"), is licensed to you subject to the terms and +conditions of the software license agreement accompanying such +Freeware whether in the form of a discrete agreement, shrink wrap +license or electronic license terms accepted at time of download. Use of +the Freeware by you shall be governed entirely by the terms and +conditions of such license. + +f. Recovery Solution. Any software recovery solution provided with/for +your HP Product, whether in the form of a hard disk drive-based +solution, an external media-based recovery solution (e.g. floppy disk, +CD or DVD) or an equivalent solution delivered in any other form, may +only be used for restoring the hard disk of the HP Product with/for +which the recovery solution was originally purchased. The use of any +Microsoft operating system software contained in such recovery +solution shall be governed by the Microsoft License Agreement. + +2. UPGRADES. To use a Software Product identified as an upgrade, +you must first be licensed for the original Software Product identified +by HP as eligible for the upgrade. After upgrading, you may no longer +use the original Software Product that formed the basis for your +upgrade eligibility. By using the Software Product, you also agree that +HP may automatically access your HP Product when connected to the +internet to check the version or status of certain Software Products and +may automatically download and install upgrades or updates to such +Software Products on to your HP Product to provide new versions or +updates required to maintain the functionality, performance, or security +of the HP Software and your HP Product and facilitate the provision of +support or other services provided to you. In certain cases, and +depending on the type of upgrade or update, notifications will be +provided to you (via pop-up or other means), which may require you to +initiate the upgrade or update. + +3. ADDITIONAL SOFTWARE. This EULA applies to updates or +supplements to the original Software Product provided by HP unless +HP provides other terms along with the update or supplement. In case +of a conflict between such terms, the other terms will prevail. + +4. TRANSFER. + +a. Third Party. The initial user of the Software Product may make a +one-time transfer of the Software Product to another end user. Any +transfer must include all component parts, media, printed materials, +this EULA, and if applicable, the Certificate of Authenticity. The transfer +may not be an indirect transfer, such as a consignment. Prior to the +transfer, the end user receiving the transferred product must agree to +all the EULA terms. Upon transfer of the Software Product, your license +is automatically terminated. + +b. Restrictions. You may not rent, lease or lend the Software Product or +use the Software Product for commercial timesharing or bureau use. +You may not sublicense, assign or transfer the license or Software +Product except as expressly provided in this EULA. + +5. PROPRIETARY RIGHTS. All intellectual property rights in the +Software Product and user documentation are owned by HP or its +suppliers and are protected by law, including but not limited to United +States copyright, trade secret, and trademark law, as well as other +applicable laws and international treaty provisions. You shall not +remove any product identification, copyright notices or proprietary +restrictions from the Software Product. + +6. LIMITATION ON REVERSE ENGINEERING. You may not reverse +engineer, decompile, or disassemble the Software Product, except and +only to the extent that the right to do so is mandated under applicable +law notwithstanding this limitation or it is expressly provided for in this +EULA. + +7. TERM. This EULA is effective unless terminated or rejected. This +EULA will also terminate upon conditions set forth elsewhere in this +EULA or if you fail to comply with any term or condition of this EULA. + +8. CONSENT TO COLLECTION/USE OF DATA. + +a. HP will use cookies and other web technology tools to collect +anonymous technical information related to HP Software and your HP +Product. This data will be used to provide the upgrades and related +support or other services described in Section 2. HP will also collect +personal information including your Internet Protocol address or other +unique identifier information associated with your HP Product and data +provided by you on registration of your HP Product. As well as +providing the upgrades and related support or other services, this data +will be used for sending marketing communications to you (in each +case with your express consent where required by applicable law). +To the extent permitted by applicable law, by accepting these terms +and conditions you consent to the collection and use of anonymous +and personal data by HP, its subsidiaries, and affiliates as described in +this EULA and as further described in HP�s privacy policy +www.hp.com/go/privacy + +b. Collection/Use by Third Parties. Certain software programs included +in your HP Product are provided and separately licensed to you by third +party providers (�Third Party Software�). Third Party Software may be +installed and operational on your HP Product even if you choose not to +activate/purchase such software. Third Party Software may collect and +transmit technical information about your system (i.e., IP address, +unique device identifier, software version installed, etc.) and other +system data. This information is used by the third party to identify +technical system attributes and ensure that the most current version of +the software has been installed on your system. If you do not want the +Third Party Software to collect this technical information or +automatically send you version updates, you should uninstall the +software prior to connecting to the Internet. + +9. DISCLAIMER OF WARRANTIES. TO THE MAXIMUM EXTENT +PERMITTED BY APPLICABLE LAW, HP AND ITS SUPPLIERS PROVIDE THE +SOFTWARE PRODUCT �AS IS� AND WITH ALL FAULTS, AND HEREBY +DISCLAIM ALL OTHER WARRANTIES, GUARANTEES, AND CONDITIONS, +EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT +LIMITED TO, WARRANTIES OF TITLE AND NON-INFRINGEMENT, ANY +IMPLIED WARRANTIES, DUTIES, GUARANTEES, OR CONDITIONS OF +MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A +PARTICULAR PURPOSE, AND OF LACK OF VIRUSES ALL WITH REGARD +TO THE SOFTWARE PRODUCT. Some states/jurisdictions do not allow +exclusion of implied warranties or limitations on the duration of implied +warranties, so the above disclaimer may not apply to you in its entirety. +IN AUSTRALIA AND NEW ZEALAND, THE SOFTWARE COMES WITH +GUARANTEES THAT CANNOT BE EXCLUDED UNDER AUSTRALIAN AND +NEW ZEALAND CONSUMER LAWS. AUSTRALIAN CONSUMERS ARE +ENTITLED TO A REPLACEMENT OR A REFUND FOR A MAJOR FAILURE +AND COMPENSATION FOR OTHER REASONABLY FORESEEABLE LOSS +OR DAMAGE. AUSTRALIAN CONSUMERS ARE ALSO ENTITLED TO +HAVE THE SOFTWARE REPAIRED OR REPLACED IF IT FAILS TO BE OF +ACCEPTABLE QUALITY AND THE FAILURE DOES NOT AMOUNT TO A +MAJOR FAILURE. NEW ZEALAND CONSUMERS WHO ARE PURCHASING +GOODS FOR PERSONAL, DOMESTIC OR HOUSEHOLD USE OR +CONSUMPTION AND NOT FOR THE PURPOSE OF A BUSINESS (�NEW +ZEALAND CONSUMERS�) ARE ENTITLED TO REPAIR, REPLACEMENT OR +REFUND FOR A FAILURE AND COMPENSATION FOR OTHER +REASONABLY FORESEEABLE LOSS OR DAMAGE. + +10. LIMITATION OF LIABILITY. Subject to local law, notwithstanding +any damages that you might incur, the entire liability of HP and any of +its suppliers under any provision of this EULA and your exclusive +remedy for all of the foregoing shall be limited to the greater of the +amount actually paid by you separately for the Software Product or U.S. +$5.00. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN +NO EVENT SHALL HP OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, +INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES +WHATSOEVER, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR +LOSS OF PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR +BUSINESS INTERRUPTION, FOR PERSONAL INJURY, FOR LOSS OF +PRIVACY ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF +OR INABILITY TO USE THE SOFTWARE PRODUCT, OR OTHERWISE IN +CONNECTION WITH ANY PROVISION OF THIS EULA, EVEN IF HP OR +ANY SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES AND EVEN IF THE REMEDY FAILS OF ITS ESSENTIAL +PURPOSE. Some states/jurisdictions do not allow the exclusion or +limitation of incidental or consequential damages, so the above +limitation or exclusion may not apply to you. + +11. U.S. GOVERNMENT CUSTOMERS. Consistent with FAR 12.211 +and 12.212, Commercial Computer Software, Computer Software +Documentation, and Technical Data for Commercial Items are licensed +to the U.S. Government under HP's standard commercial license. + +12. COMPLIANCE WITH EXPORT LAWS. You shall comply with all +laws and regulations of the United States and other countries ("Export +Laws") to assure that the Software Product is not (1) exported, directly +or indirectly, in violation of Export Laws, or (2) used for any purpose +prohibited by Export Laws, including, without limitation, nuclear, +chemical, or biological weapons proliferation. + +13. CAPACITY AND AUTHORITY TO CONTRACT. You represent that +you are of the legal age of majority in your state of residence and, if +applicable, you are duly authorized by your employer to enter into this +contract. + +14. APPLICABLE LAW. This EULA is governed by the laws of the +country in which the equipment was purchased. + +15. ENTIRE AGREEMENT. This EULA (including any addendum or +amendment to this EULA which is included with the HP Product) is the +entire agreement between you and HP relating to the Software Product +and it supersedes all prior or contemporaneous oral or written +communications, proposals and representations with respect to the +Software Product or any other subject matter covered by this EULA. To +the extent the terms of any HP policies or programs for support +services conflict with the terms of this EULA, the terms of this EULA +shall control. + +�Copyright 2018-2024 HP Development Company, L.P.. + +The information contained herein is subject to change without notice. +All other product names mentioned herein may be trademarks of their +respective companies. To the extent permitted by applicable law, the +only warranties for HP products and services are set forth in the express +warranty statements accompanying such products and services. +Nothing herein should be construed as constituting an additional +warranty. To the extent permitted by applicable law, HP shall not be +liable for technical or editorial errors or omissions contained herein. + +First Edition: August 2015 +817678-001 + diff --git a/Bios-Update-HP-v2.0/module/HP.Notifications/HP.Notifications.psd1 b/Bios-Update-HP-v2.0/module/HP.Notifications/HP.Notifications.psd1 new file mode 100644 index 0000000..933436f --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Notifications/HP.Notifications.psd1 @@ -0,0 +1,259 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + +@{ + + RootModule = 'HP.Notifications.psm1' + #FullModuleVersion = '1.7.2.774' + ModuleVersion = '1.7.2' + GUID = 'b066583c-1b04-40d7-86a6-196dfd22dfbb' + Author = 'HP Development Company, L.P.' + CompanyName = 'HP Inc' + Copyright = '(C) Copyright 2018-2024 HP Development Company, L.P.' + Description = 'Notifications utility module' + PowerShellVersion = '5.1' + + FunctionsToExport = + 'Invoke-HPNotification', + 'Invoke-HPNotificationFromXML', + 'Invoke-HPRebootNotification', + 'Invoke-RebootNotification', + 'Invoke-HPPrivateNotificationAsUser', + 'Invoke-HPPrivateRebootNotificationAsUser', + 'Register-NotificationApplication', + 'Unregister-NotificationApplication' + + PrivateData = @{ + PSData = @{ + LicenseUri = 'https://developers.hp.com/node/11493' + RequireLicenseAcceptance = $true + } # End of PSData hashtable + } # End of PrivateData hashtable + + +} +# SIG # Begin signature block +# MIIoHgYJKoZIhvcNAQcCoIIoDzCCKAsCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAE0kE5LSKTTZPj +# 18oahiZOrmRnOOX0HMhkd/igdfqs2qCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6jCCGeYCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIIOTGLqF +# c0TZypyft+TaNWcY+B7Q216TJ9tX/xxxbOsjMA0GCSqGSIb3DQEBAQUABIIBgJek +# QhHPKUWN6Qw8yBiPRMb0KUaqp9gkPdX2UPM92AjtSRFkMGEOWdGWtqWYA7F+2GBW +# EX1qCAzsVt7vc6P5rw8rsTjEUudDS4SKP7MD3Z5AxmgUu58gYIvHJNjM6lexPq9a +# nHJIILH2sC130d1Kps8hbtOT+v+Fxpxxd0JK2PmwN1cXeQRTySdaYaq96YJx/BfF +# bsBNOAmHcfb9Wx4OJoiTM0M0Bh2LEme/yMirbq3w1Vqn5fIHmdSgm6trn53dD50I +# 422q5j5gTS7/FbtXhCODJBgCdg9plvPJzP4nzN+u9c5vz+VSbgv4AWzcf4g5kqRn +# pjCz1WAhrPLUsPI96IwKtT2HQQfAh29Rx/CzOHzlWA5OjohfPz4rO4mAJvgtR63x +# Z3m/bNvdBM2T4Pe16gu28ES64lhpTRu8SWsqHU+gCI09AG6sOg35AHO2B+pqkeXI +# r4ARUEBq/CVndrEuOGXDHUr7/HMVUNPWNNAwijX0PL8MpGR0qriQMXBuhLsrD6GC +# F0Awghc8BgorBgEEAYI3AwMBMYIXLDCCFygGCSqGSIb3DQEHAqCCFxkwghcVAgED +# MQ8wDQYJYIZIAWUDBAIBBQAweAYLKoZIhvcNAQkQAQSgaQRnMGUCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCBFyuZUkxVQylMa4xqIOTry0hL5CH5FcHwj +# arYuiRS/3gIRAPQE/78NT9kbGPWXkthMdfAYDzIwMjQwODI3MTY1NTUwWqCCEwkw +# ggbCMIIEqqADAgECAhAFRK/zlJ0IOaa/2z9f5WEWMA0GCSqGSIb3DQEBCwUAMGMx +# CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMy +# RGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcg +# Q0EwHhcNMjMwNzE0MDAwMDAwWhcNMzQxMDEzMjM1OTU5WjBIMQswCQYDVQQGEwJV +# UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xIDAeBgNVBAMTF0RpZ2lDZXJ0IFRp +# bWVzdGFtcCAyMDIzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo1NF +# hx2DjlusPlSzI+DPn9fl0uddoQ4J3C9Io5d6OyqcZ9xiFVjBqZMRp82qsmrdECmK +# HmJjadNYnDVxvzqX65RQjxwg6seaOy+WZuNp52n+W8PWKyAcwZeUtKVQgfLPywem +# MGjKg0La/H8JJJSkghraarrYO8pd3hkYhftF6g1hbJ3+cV7EBpo88MUueQ8bZlLj +# yNY+X9pD04T10Mf2SC1eRXWWdf7dEKEbg8G45lKVtUfXeCk5a+B4WZfjRCtK1ZXO +# 7wgX6oJkTf8j48qG7rSkIWRw69XloNpjsy7pBe6q9iT1HbybHLK3X9/w7nZ9MZll +# R1WdSiQvrCuXvp/k/XtzPjLuUjT71Lvr1KAsNJvj3m5kGQc3AZEPHLVRzapMZoOI +# aGK7vEEbeBlt5NkP4FhB+9ixLOFRr7StFQYU6mIIE9NpHnxkTZ0P387RXoyqq1AV +# ybPKvNfEO2hEo6U7Qv1zfe7dCv95NBB+plwKWEwAPoVpdceDZNZ1zY8SdlalJPrX +# xGshuugfNJgvOuprAbD3+yqG7HtSOKmYCaFxsmxxrz64b5bV4RAT/mFHCoz+8LbH +# 1cfebCTwv0KCyqBxPZySkwS0aXAnDU+3tTbRyV8IpHCj7ArxES5k4MsiK8rxKBMh +# SVF+BmbTO77665E42FEHypS34lCh8zrTioPLQHsCAwEAAaOCAYswggGHMA4GA1Ud +# DwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATAfBgNVHSMEGDAWgBS6 +# FtltTYUvcyl2mi91jGogj57IbzAdBgNVHQ4EFgQUpbbvE+fvzdBkodVWqWUxo97V +# 40kwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp +# Z2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNybDCB +# kAYIKwYBBQUHAQEEgYMwgYAwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj +# ZXJ0LmNvbTBYBggrBgEFBQcwAoZMaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t +# L0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNy +# dDANBgkqhkiG9w0BAQsFAAOCAgEAgRrW3qCptZgXvHCNT4o8aJzYJf/LLOTN6l0i +# kuyMIgKpuM+AqNnn48XtJoKKcS8Y3U623mzX4WCcK+3tPUiOuGu6fF29wmE3aEl3 +# o+uQqhLXJ4Xzjh6S2sJAOJ9dyKAuJXglnSoFeoQpmLZXeY/bJlYrsPOnvTcM2Jh2 +# T1a5UsK2nTipgedtQVyMadG5K8TGe8+c+njikxp2oml101DkRBK+IA2eqUTQ+OVJ +# dwhaIcW0z5iVGlS6ubzBaRm6zxbygzc0brBBJt3eWpdPM43UjXd9dUWhpVgmagNF +# 3tlQtVCMr1a9TMXhRsUo063nQwBw3syYnhmJA+rUkTfvTVLzyWAhxFZH7doRS4wy +# w4jmWOK22z75X7BC1o/jF5HRqsBV44a/rCcsQdCaM0qoNtS5cpZ+l3k4SF/Kwtw9 +# Mt911jZnWon49qfH5U81PAC9vpwqbHkB3NpE5jreODsHXjlY9HxzMVWggBHLFAx+ +# rrz+pOt5Zapo1iLKO+uagjVXKBbLafIymrLS2Dq4sUaGa7oX/cR3bBVsrquvczro +# SUa31X/MtjjA2Owc9bahuEMs305MfR5ocMB3CtQC4Fxguyj/OOVSWtasFyIjTvTs +# 0xf7UGv/B3cfcZdEQcm4RtNsMnxYL2dHZeUbc7aZ+WssBkbvQR7w8F/g29mtkIBE +# r4AQQYowggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqGSIb3DQEB +# CwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNV +# BAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQg +# Um9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMxCzAJBgNV +# BAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNl +# cnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggIi +# MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXHJQPE8pE3 +# qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMfUBMLJnOW +# bfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w1lbU5ygt +# 69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRktFLydkf3 +# YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYbqMFkdECn +# wHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUmcJgmf6Aa +# RyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP65x9abJTy +# UpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzKQtwYSH8U +# NM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo80VgvCON +# WPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjBJgj5FBAS +# A31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXcheMBK9Rp61 +# 03a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAd +# BgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF +# BwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln +# aWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJo +# dHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy +# bDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQEL +# BQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd4ksp+3CK +# Daopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiCqBa9qVbP +# FXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl/Yy8ZCaH +# bJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeCRK6ZJxur +# JB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYTgAnEtp/N +# h4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/a6fxZsNB +# zU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37xJV77Qpf +# MzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmLNriT1Oby +# F5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0YgkPCr2B +# 2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJRyvmfxqk +# hQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIFjTCCBHWg +# AwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +# EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +# cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcN +# MjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEVMBMG +# A1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +# HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqGSIb3DQEB +# AQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +# pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+ +# n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYykt +# zuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw +# 2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6Qu +# BX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC +# 5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK +# 3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3 +# IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEP +# lAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98 +# THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t9dmpsh3l +# GwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8w +# DgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0 +# cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0 +# cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MEUGA1Ud +# HwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz +# c3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAowCDAGBgRVHSAAMA0GCSqGSIb3DQEB +# DAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9mqyhhyzshV6pGrsi+IcaaVQi +# 7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxSA8hO0Cre+i1Wz/n096wwepqL +# sl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE1Od/6Fmo8L8vC6bp8jQ87PcDx4eo +# 0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSMb++hUD38dglohJ9vytsgjTVg +# HAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbObyMt9H5xaiNrIv8SuFQtJ37YOtnw +# toeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMYIDdjCCA3ICAQEwdzBjMQswCQYDVQQG +# EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0 +# IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAFRK/z +# lJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUAoIHRMBoGCSqGSIb3DQEJAzENBgsq +# hkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwODI3MTY1NTUwWjArBgsqhkiG +# 9w0BCRACDDEcMBowGDAWBBRm8CsywsLJD4JdzqqKycZPGZzPQDAvBgkqhkiG9w0B +# CQQxIgQgn8JRqem+dx09cO1ecWl8Ks5W2F2BerEO1jfK21J/a1swNwYLKoZIhvcN +# AQkQAi8xKDAmMCQwIgQg0vbkbe10IszR1EBXaEE2b4KK2lWarjMWr00amtQMeCgw +# DQYJKoZIhvcNAQEBBQAEggIAkhpE7xhNp3C9QFi9dHSP1IzePabuqGWs9fx7svB0 +# vmPHc0wU56ycJhb948MA8JFdRFdeQZJ3/3DNuLurwDYCSBu9Pf4upSIoVHFtIG6T +# QpXb/F8BbvggDbz9zoWPlyGiQpfE9fz+dQXdF8+XheUcPZQ6KvX+e5L90qjdZyse +# lRRrgJN08tIt20yeOHE6UBlZQUOdQAlTq/V4IEgTvOPQ1871hQ5FqWT/ToJUdIVl +# 8lvw/XjlLn248EaxU83KwdW2tN7oO6GJAjMvoD7XJFsoZM9U3Rg4EtEms8ZJpwNH +# AcWYAPKNkDwuYw03j1KQbl3zkotwtKl4od8PzvyyAvQ28NOx68EDpMovA0fOqhKr +# Ldz+SvKuWbvObxJxSeCPm08kytV48yVD/2YV5gE5oXQbf/hVVUpWVHRpXjpoNg58 +# Q0iHiM4Gnvt+s+ync3+4WzTTdv4ldhg0OAE16JWKED3vteZ0bZoJBKea9CzQknlL +# gn7MV7ktTVYW/p941fzBr8Q7D17GH2p8Qm9ikbWSHAPsnqqQ7YISTuq1WMkegZBK +# mA4GLA8HSZYhakKRtLphuiHqikGrRK9AQsxnBL1Eu2id7FExWfMVoUW79snPVo8i +# VEZOSZI+U9zaqgy2oHJHhGQjipW701bF+9DeMToPdEXfTm7jM1CIwdkEtWNg/Vk6 +# Wnw= +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Notifications/HP.Notifications.psm1 b/Bios-Update-HP-v2.0/module/HP.Notifications/HP.Notifications.psm1 new file mode 100644 index 0000000..70126ff --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Notifications/HP.Notifications.psm1 @@ -0,0 +1,1489 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + +using namespace HP.CMSLHelper + +# For PS7, PSEdition is Core and for PS5.1, PSEdition is Desktop +if ($PSEdition -eq "Core") { + Add-Type -Assembly $PSScriptRoot\refs\WinRT.Runtime.dll + Add-Type -Assembly $PSScriptRoot\refs\Microsoft.Windows.SDK.NET.dll +} +else { + [void][Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] + [void][Windows.UI.Notifications.ToastNotification, Windows.UI.Notifications, ContentType = WindowsRuntime] + [void][Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] +} + +# CMSL is normally installed in C:\Program Files\WindowsPowerShell\Modules +# but if installed via PSGallery and via PS7, it is installed in a different location +if (Test-Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll") { + Add-Type -Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll" +} +else{ + Add-Type -Path "$PSScriptRoot\..\..\HP.Private\1.7.2\HP.CMSLHelper.dll" +} + +<# + .SYNOPSIS + Creates a logo object + .DESCRIPTION + This command creates a toaster logo from a file image. + .PARAMETER Image + Specifies the URL to the image.Http images must be 200 KB or less in size. Not all URL formats are supported in all scenarios. + .PARAMETER Crop + Specifies how you would like the image to be cropped. + .EXAMPLE + PS> $logo = New-HPPrivateToastNotificationLogo .\logo.png + .OUTPUTS + This command returns the object representing the logo image. +#> +function New-HPPrivateToastNotificationLogo +{ + param( + [Parameter(Position = 0,Mandatory = $True,ValueFromPipeline = $True)] + [System.IO.FileInfo]$Image, + + [Parameter(Position = 1,Mandatory = $False)] + [ValidateSet('None','Default','Circle')] + [string]$Crop + ) + + [xml]$xml = New-Object System.Xml.XmlDocument + $child = $xml.CreateElement("image") + $child.SetAttribute('src',$Image.FullName) + $child.SetAttribute('placement','appLogoOverride') + if ($Crop) { $child.SetAttribute('hint-crop',$Crop.ToLower()) } + $child +} + +<# + .SYNOPSIS + Creates a toast image object + .DESCRIPTION + This command creates a toaster image from a file image. This image may be shown in the body of a toast message. + .PARAMETER Image + Specifies the URL to the image. Http images must be 200 KB or less in size. Not all URL formats are supported in all scenarios. + .PARAMETER Position + Specifies that toasts can display a 'fixed' image, which is a featured ToastGenericHeroImage displayed prominently within the toast banner and while inside Action Center. Image dimensions are 364x180 pixels at 100% scaling. + Alternately, use 'inline' to display a full-width inline-image that appears when you expand the toast. + + .EXAMPLE + PS> $logo = New-HPPrivateToastNotificationLogo .\hero.png + .OUTPUTS + This function returns the object representing the image. + .LINK + [ToastGenericHeroImage](https://docs.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/toast-schema#toastgenericheroimage) +#> +function New-HPPrivateToastNotificationImage +{ + param( + [Parameter(Position = 0,Mandatory = $True,ValueFromPipeline = $True)] + [string]$Image, + [Parameter(Position = 1,Mandatory = $False)] + [ValidateSet('Inline','Fixed')] + [string]$Position = 'Fixed' + ) + [xml]$xml = New-Object System.Xml.XmlDocument + $child = $xml.CreateElement("image") + $child.SetAttribute('src',$Image) + #$child.SetAttribute('placement','appLogoOverride') is this needed? + + if ($Position -eq 'Fixed') { + $child.SetAttribute('placement','hero') + } + else + { + $child.SetAttribute('placement','inline') + } + $child +} + +<# + .SYNOPSIS + Specifies the toast message alert sound + .DESCRIPTION + This command allows defining the sound to play on toast notification. + .PARAMETER Sound + Specifies the sound to play + .PARAMETER Loop + If specified, the sound will be looped + + .EXAMPLE + PS> $logo = New-HPPrivateToastSoundPreference -Sound "Alarm6" -Loop + .OUTPUTS + This function returns the object representing the sound preference. + .LINK + [ToastAudio](https://docs.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/toast-schema#ToastAudio) +#> +function New-HPPrivateToastSoundPreference +{ + param( + [Parameter(Position = 1,Mandatory = $False)] + [ValidateSet('None','Default','IM','Mail','Reminder','SMS', + 'Alarm','Alarm2','Alarm3','Alarm4','Alarm5','Alarm6','Alarm7','Alarm8','Alarm9','Alarm10', + 'Call','Call2','Call3','Call4','Call5','Call6','Call7','Call8','Call9','Call10')] + [string]$Sound = "Default", + [Parameter(Position = 2,Mandatory = $False)] + [switch]$Loop + ) + [xml]$xml = New-Object System.Xml.XmlDocument + $child = $xml.CreateElement("audio") + if ($Sound -eq "None") { + $child.SetAttribute('silent',"$true".ToLower()) + Write-Verbose "Setting audio notification to Muted" + } + else + { + $soundPath = "ms-winsoundevent:Notification.$Sound" + if ($Sound.StartsWith('Alarm') -or $Sound.StartsWith('Call')) + { + $soundPath = 'winsoundevent:Notification.Looping.' + $Sound + } + Write-Verbose "Setting audio notification to: $soundPath" + $child.SetAttribute('src',$soundPath) + $child.SetAttribute('loop',([string]$Loop.IsPresent).ToLower()) + Write-Verbose "Looping audio: $($Loop.IsPresent)" + } + $child +} + +<# + .SYNOPSIS + Creates a toast button + .DESCRIPTION + Creates a toast button for the toast + .PARAMETER Sound + Specifies the sound to play + .PARAMETER Image + Specifies the button image for a graphical button + .PARAMETER Arguments + Specifies app-defined string of arguments that the app will later receive if the user clicks this button. + .OUTPUTS + This command returns the object representing the button + .LINK + [ToastButton](https://docs.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/toast-schema#ToastButton) +#> +function New-HPPrivateToastButton +{ + [Cmdletbinding()] + param( + [string]$Caption, + [string]$Image, # leave out for normal button + [string]$Arguments, + [ValidateSet('Background','Protocol','System')] + [string]$ActivationType = 'background' + ) + + Write-Verbose "Creating new toast button with caption $Caption" + if ($Image) { + ([xml]"").DocumentElement + } else { + ([xml]"").DocumentElement + + } +} + +<# + .SYNOPSIS + Create a toast action + + .DESCRIPTION + Create a toast action for the toast + + .PARAMETER SnoozeOrDismiss + Automatically constructs a selection box for snooze intervals, and snooze/dismiss buttons, all automatically localized, and snoozing logic is automatically handled by the system. + + .PARAMETER Image + For a graphical button, specify the button image + + .PARAMETER Arguments + App-defined string of arguments that the app will later receive if the user clicks this button. + + .OUTPUTS + This function returns the object representing the button +#> +function New-HPPrivateToastActions +{ + [CmdletBinding()] + param( + [Parameter(ParameterSetName = 'DismissSuppress',Position = 1,Mandatory = $True)] + [switch]$SnoozeOrDismiss, + + [Parameter(ParameterSetName = 'DismissSuppress',Position = 2,Mandatory = $True)] + [int]$SnoozeMinutesDefault, + + [Parameter(ParameterSetName = 'DismissSuppress',Position = 3,Mandatory = $True)] + [int[]]$SnoozeMinutesOptions, + + [Parameter(ParameterSetName = 'CustomButtons',Position = 1,Mandatory = $True)] + [switch]$CustomButtons, + + [Parameter(ParameterSetName = 'CustomButtons',Position = 2,Mandatory = $false)] + [System.Xml.XmlElement[]]$Buttons, + + [Parameter(ParameterSetName = 'CustomButtons',Position = 3,Mandatory = $false)] + [switch]$NoDismiss + + ) + [xml]$xml = New-Object System.Xml.XmlDocument + $child = $xml.CreateElement("actions") + + switch ($PSCmdlet.ParameterSetName) { + 'DismissSuppress' { + Write-Verbose "Creating system-handled snoozable notification" + + $i = $xml.CreateElement("input") + [void]$child.AppendChild($i) + + $i.SetAttribute('id',"snoozeTime") + $i.SetAttribute('type','selection') + $i.SetAttribute('defaultInput',$SnoozeMinutesDefault) + + Write-Verbose "Notification snooze default: SnoozeMinutesDefault" + $SnoozeMinutesOptions | ForEach-Object { + $s = $xml.CreateElement("selection") + $s.SetAttribute('id',"$_") + $s.SetAttribute('content',"$_ minute") + [void]$i.AppendChild($s) + } + + $action = $xml.CreateElement("action") + $action.SetAttribute('activationType','system') + $action.SetAttribute('arguments','snooze') + $action.SetAttribute('hint-inputId','snoozeTime') + $action.SetAttribute('content','Snooze') + [void]$child.AppendChild($action) + + Write-Verbose "Creating custom buttons toast" + if ($Buttons) { + $Buttons | ForEach-Object { + $node = $xml.ImportNode($_,$true) + [void]$child.AppendChild($node) + } + } + + $action = $xml.CreateElement("action") + $action.SetAttribute('activationType','system') + $action.SetAttribute('arguments','dismiss') + $action.SetAttribute('content','Dismiss') + [void]$child.AppendChild($action) + } + + 'CustomButtons' { # customized buttons + Write-Verbose "Creating custom buttons toast" + + if($Buttons) { + $Buttons | ForEach-Object { + $node = $xml.ImportNode($_,$true) + [void]$child.AppendChild($node) + } + } + + if (-not $NoDismiss.IsPresent) { + $action = $xml.CreateElement("action") + $action.SetAttribute('activationType','system') + $action.SetAttribute('arguments','dismiss') + $action.SetAttribute('content','Dismiss') + [void]$child.AppendChild($action) + } + } + + default { + + } + } + + $child +} + +<# + .SYNOPSIS + Shows a toast message + .DESCRIPTION + This command shows a toast message, and optionally registers a response handler. + .PARAMETER Message + Specifies the message to show + .PARAMETER Title + Specifies title of the message to show + .PARAMETER Logo + Specifies a logo object created with New-HPPrivateToastNotificationLogo + .PARAMETER Image + Specifies a logo object created with New-HPPrivateToastNotificationImage + .PARAMETER Expiration + Specifies a timeout in minutes for the toast to remove itself + .PARAMETER Tag + Specifies a tag value for the toast. Please note that if a toast with the same tag already exists, it will be replaced by this one. + .PARAMETER Group + Specifies a group value for the toast + .PARAMETER Attribution + Specifies toast owner + .PARAMETER Sound + Specifies a sound notification preference created with New-HPPrivateToastSoundPreference + .PARAMETER Actions + .PARAMETER Persist +#> +function New-HPPrivateToastNotification +{ + [CmdletBinding()] + param( + [Parameter(ParameterSetName = 'TextOnly',Position = 0,Mandatory = $False,ValueFromPipeline = $True)] + [string]$Message, + + [Parameter(Position = 1,Mandatory = $False)] + [string]$Title, + + [Parameter(Position = 3,Mandatory = $False)] + [System.Xml.XmlElement]$Logo, + + [Parameter(Position = 4,Mandatory = $False)] + [int]$Expiration, + + [Parameter(Position = 5,Mandatory = $False)] + [string]$Tag, + + [Parameter(Position = 6,Mandatory = $False)] + [string]$Group = "hp-cmsl", + + [Parameter(Position = 8,Mandatory = $False)] + [System.Xml.XmlElement]$Sound, + + # Apparently can't do URLs with non-uwp + [Parameter(Position = 11,Mandatory = $False)] + [System.Xml.XmlElement]$Image, + + [Parameter(Position = 13,Mandatory = $False)] + [System.Xml.XmlElement]$Actions, + + [Parameter(Position = 14,Mandatory = $False)] + [switch]$Persist, + + [Parameter(Position = 15 , Mandatory = $False)] + [string]$Signature, + + [Parameter(Position = 16,Mandatory = $False)] + [System.IO.FileInfo]$Xml + ) + # if $Xml is given, load the xml instead of manually creating it + if ($Xml) { + Write-Verbose "Loading XML from $Xml" + try { + [xml]$xml = Get-Content $Xml + } catch { + Write-Error "Failed to load schema XML from $Xml" + return + } + } else { + + # In order for signature text to be smaller, we have to add placement="attribution" to the text node. + # When using placement="attribution", Signature text will always be displayed at the bottom of the toast notification, + # along with the app's identity or the notification's timestamp if we were to customize the notification to provide these as well. + # On older versions of Windows that don't support attribution text, the text will simply be displayed as another text element + # (assuming we don't already have the maximum of three text elements, + # but we currently only have Invoke-HPNotification showing up to 3 text elements with the 3rd for $Signature being smallest) + [xml]$xml = '' + + $binding = $xml.GetElementsByTagName("toast") + if ($Sound) { + $node = $xml.ImportNode($Sound,$true) + [void]$binding.AppendChild($node) + } + + if ($Persist.IsPresent) + { + $binding.SetAttribute('scenario','reminder') + } + + if ($Actions) { + $node = $xml.ImportNode($Actions,$true) + [void]$binding.AppendChild($node) + } + + $binding = $xml.GetElementsByTagName("binding") + if ($Logo) { + $node = $xml.ImportNode($Logo,$true) + [void]$binding.AppendChild($node) + } + + if ($Image) { + $node = $xml.ImportNode($Image,$true) + [void]$binding.AppendChild($node) + } + + $binding = $xml.GetElementsByTagName("text") + if ($Title) { + [void]$binding[0].AppendChild($xml.CreateTextNode($Title.trim())) + } + + [void]$binding[1].AppendChild($xml.CreateTextNode($Message.trim())) + + if ($Signature){ + [void]$binding[2].AppendChild($xml.CreateTextNode($Signature.trim())) + } + } + + Write-Verbose "Submitting toast with XML: $($xml.OuterXml)" + $toast = [Windows.Data.Xml.Dom.XmlDocument]::new() + $toast.LoadXml($xml.OuterXml) + + $toast = [Windows.UI.Notifications.ToastNotification]::new($toast) + + # if you specify a non-unique tag, it will replace the previous toast with the same non-unique tag + if($Tag) { + $toast.Tag = $Tag + } + + $toast.Group = $Group + + if ($Expiration) { + $toast.ExpirationTime = [DateTimeOffset]::Now.AddMinutes($Expiration) + } + + return $toast +} + +function Show-ToastNotification { + [CmdletBinding()] + param( + [Parameter(Position = 0,Mandatory = $False,ValueFromPipeline = $true)] + $Toast, + + [Parameter(Position = 1,Mandatory = $False)] + [string]$Attribution = '{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe' + ) + + $notifier = [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($Attribution) + $notifier.Show($toast) +} + +function Register-HPPrivateScriptProtocol { + [CmdletBinding()] + param( + [string]$ScriptPath, + [string]$Name + ) + + try { + New-Item "HKCU:\Software\Classes\$($Name)\shell\open\command" -Force -ErrorAction SilentlyContinue | Out-Null + New-ItemProperty -LiteralPath "HKCU:\Software\Classes\$($Name)" -Name 'URL Protocol' -Value '' -PropertyType String -Force -ErrorAction SilentlyContinue | Out-Null + New-ItemProperty -LiteralPath "HKCU:\Software\Classes\$($Name)" -Name '(default)' -Value "url:$($Name)" -PropertyType String -Force -ErrorAction SilentlyContinue | Out-Null + New-ItemProperty -LiteralPath "HKCU:\Software\Classes\$($Name)" -Name 'EditFlags' -Value 2162688 -PropertyType Dword -Force -ErrorAction SilentlyContinue | Out-Null + New-ItemProperty -LiteralPath "HKCU:\Software\Classes\$($Name)\shell\open\command" -Name '(default)' -Value $ScriptPath -PropertyType String -Force -ErrorAction SilentlyContinue | Out-Null + } + catch { + Write-Host $_.Exception.Message + } +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Invoke-HPPrivateRebootNotificationAsUser { + [CmdletBinding()] + param( + [Parameter(Position = 0,Mandatory = $false)] + [string]$Title = "A System Reboot is Required", + + [Parameter(Position = 1,Mandatory = $false)] + [string]$Message = "Please reboot now to keep your device compliant with the security policies.", + + [Parameter(Position = 2,Mandatory = $false)] + [System.IO.FileInfo]$LogoImage, + + [Parameter(Position = 4,Mandatory = $false)] + [int]$Expiration = 0, + + [Parameter(Position = 4,Mandatory = $False)] + [string]$Attribution + ) + + # Use System Root instead of hardcoded path to C:\Windows + Register-HPPrivateScriptProtocol -ScriptPath "$env:SystemRoot\System32\shutdown.exe -r -t 0 -f" -Name "rebootnow" + + $rebootButton = New-HPPrivateToastButton -Caption "Reboot now" -Image $null -Arguments "rebootnow:" -ActivationType "Protocol" + + $params = @{ + Message = $Message + Title = $Title + Expiration = $Expiration + Actions = New-HPPrivateToastActions -CustomButtons -Buttons $rebootButton + Sound = New-HPPrivateToastSoundPreference -Sound IM + } + + if ($LogoImage) { + $params.Logo = New-HPPrivateToastNotificationLogo -Image $LogoImage -Crop Circle + } + + $toast = New-HPPrivateToastNotification @params -Persist + + if ($toast) { + if ([string]::IsNullOrEmpty($Attribution)) { + Show-ToastNotification -Toast $toast + } + else { + Show-ToastNotification -Toast $toast -Attribution $Attribution + } + } + + return +} + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Invoke-HPPrivateNotificationAsUser { + [CmdletBinding()] + param( + [Parameter(Position = 0,Mandatory = $false)] + [string]$Title, + + [Parameter(Position = 1,Mandatory = $false)] + [string]$Message, + + [Parameter(Position = 2,Mandatory = $false)] + [System.IO.FileInfo]$LogoImage, + + [Parameter(Position = 4,Mandatory = $false)] + [int]$Expiration = 0, + + [Parameter(Position = 4,Mandatory = $False)] + [string]$Attribution, + + [Parameter(Position = 5,Mandatory = $false)] + [string]$NoDismiss = "false", # environment variables can only be strings, so Dismiss parameter is a string + + [Parameter(Position = 6,Mandatory = $false)] + [string]$Signature, + + [Parameter(Position = 7,Mandatory = $false)] + [System.IO.FileInfo]$Xml, + + [Parameter(Position = 8,Mandatory = $false)] + [System.IO.FileInfo]$Actions + ) + + if ($Xml){ + if($Actions){ + # parse the file of Actions to get the actions to register + try { + $listOfActions = Get-Content $Actions | ConvertFrom-Json + } + catch { + Write-Error "Failed to parse the file of actions: $($_.Exception.Message). Will not proceed with invoking notification." + return + } + + # register every action in list of actions + foreach ($action in $listOfActions) { + Register-HPPrivateScriptProtocol -ScriptPath $action.cmd -Name $action.id + } + + Write-Verbose "Done registering actions" + } + + $toast = New-HPPrivateToastNotification -Expiration $Expiration -Xml $Xml -Persist + + if ($toast) { + if ([string]::IsNullOrEmpty($Attribution)) { + Show-ToastNotification -Toast $toast + } + else { + Show-ToastNotification -Toast $toast -Attribution $Attribution + } + } + } + else{ + $params = @{ + Message = $Message + Title = $Title + Expiration = $Expiration + Signature = $Signature + Sound = New-HPPrivateToastSoundPreference -Sound IM + } + + # environment variables can only be strings, so Dismiss parameter is a string + if ($NoDismiss -eq "false") { + $params.Actions = New-HPPrivateToastActions -CustomButtons + } + else { + $params.Actions = New-HPPrivateToastActions -CustomButtons -NoDismiss + } + + if ($LogoImage) { + $params.Logo = New-HPPrivateToastNotificationLogo -Image $LogoImage -Crop Circle + } + + $toast = New-HPPrivateToastNotification @params -Persist + + if ([string]::IsNullOrEmpty($Attribution)) { + Show-ToastNotification -Toast $toast + } + else { + Show-ToastNotification -Toast $toast -Attribution $Attribution + } + } + + return +} + +<# +.SYNOPSIS + Register-NotificationApplication + +.DESCRIPTION + This function registers toast notification applications + +.PARAMETER Id + Specifies the application id + +.PARAMETER DisplayName + Specifies the application name to display on the toast notification + +.EXAMPLE + Register-NotificationApplication -Id 'hp.cmsl.12345' -DisplayName 'HP CMSL' +#> +function Register-NotificationApplication { + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + [string]$Id, + + [Parameter(Mandatory=$true)] + [string]$DisplayName, + + [Parameter(Mandatory=$false)] + [System.IO.FileInfo]$IconPath + ) + if (-not (Test-IsElevatedAdmin)) { + throw [System.Security.AccessControl.PrivilegeNotHeldException]"elevated administrator" + } + + Write-Verbose "Registering notification application with id: $Id and display name: $DisplayName and icon path: $IconPath" + + $drive = Get-PSDrive -Name HKCR -ErrorAction SilentlyContinue + if (-not $drive) { + $drive = New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT -Scope Script + } + $appRegPath = Join-Path -Path "$($drive):" -ChildPath 'AppUserModelId' + $regPath = Join-Path -Path $appRegPath -ChildPath $Id + if (-not (Test-Path $regPath)) + { + New-Item -Path $appRegPath -Name $Id -Force | Out-Null + } + $currentDisplayName = Get-ItemProperty -Path $regPath -Name DisplayName -ErrorAction SilentlyContinue | Select-Object -ExpandProperty DisplayName -ErrorAction SilentlyContinue + if ($currentDisplayName -ne $DisplayName) { + New-ItemProperty -Path $regPath -Name DisplayName -Value $DisplayName -PropertyType String -Force | Out-Null + } + + New-ItemProperty -Path $regPath -Name IconUri -Value $IconPath -PropertyType ExpandString -Force | Out-Null + New-ItemProperty -Path $regPath -Name IconBackgroundColor -Value 0 -PropertyType ExpandString -Force | Out-Null + Remove-PSDrive -Name HKCR -Force + + Write-Verbose "Registered toast notification application: $DisplayName" +} + +<# +.SYNOPSIS + Unregister-NotificationApplication + +.DESCRIPTION + This function unregisters toast notification applications. Do not unregister the application if you want to snooze the notification. + +.PARAMETER Id + Specifies the application ID to unregister + +.EXAMPLE + Unregister-NotificationApplication -Id 'hp.cmsl.12345' +#> +function Unregister-NotificationApplication { + [CmdletBinding()] + param( + [Parameter(Mandatory=$true)] + $Id + ) + if (-not (Test-IsElevatedAdmin)) { + throw [System.Security.AccessControl.PrivilegeNotHeldException]"elevated administrator" + } + + $drive = Get-PSDrive -Name HKCR -ErrorAction SilentlyContinue + if (-not $drive) { + $drive = New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT -Scope Script + } + $appRegPath = Join-Path -Path "$($drive):" -ChildPath 'AppUserModelId' + $regPath = Join-Path -Path $appRegPath -ChildPath $Id + if (Test-Path $regPath) { + Remove-Item -Path $regPath + } + else { + Write-Verbose "Application not found at $regPath" + } + Remove-PSDrive -Name HKCR -Force + + Write-Verbose "Unregistered toast notification application: $Id" +} + +<# +.SYNOPSIS + Invoke-HPRebootNotification + +.DESCRIPTION + This command shows a toast message asking the user to reboot the system. + +.PARAMETER Message + Specifies the message to show + +.PARAMETER Title + Specifies the title of the message to show + +.PARAMETER LogoImage + Specifies the image file path to be displayed + +.PARAMETER Expiration + Specifies the timeout in minutes for the toast to remove itself. If not specified, the toast remains until dismissed. + +.PARAMETER TitleBarHeader + Specifies the text of the toast notification in the title bar. If not specified, the text will default to "HP System Update". + +.PARAMETER TitleBarIcon + Specifies the icon of the toast notification in the title bar. If not specified, the icon will default to the HP logo. Please note that the color of the icon might be inverted depending on the background color of the title bar. + + +.EXAMPLE + Invoke-HPRebootNotification -Title "My title" -Message "My message" +#> +function Invoke-HPRebootNotification { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Invoke-RebootNotification")] + [Alias("Invoke-RebootNotification")] # we can deprecate Invoke-RebootNotification later + param( + [Parameter(Position = 0,Mandatory = $False)] + [string]$Title = "A System Reboot Is Required", + + [Parameter(Position = 1,Mandatory = $False)] + [string]$Message = "Please reboot now to keep your device compliant with organizational policies.", + + [Parameter(Position = 2,Mandatory = $false)] + [System.IO.FileInfo]$LogoImage, + + [Parameter(Position = 3,Mandatory = $false)] + [int]$Expiration = 0, + + [Parameter(Position = 4,Mandatory = $false)] + [string]$TitleBarHeader = "HP System Update", # we don't want to display "Windows PowerShell" in the title bar + + [Parameter(Position = 5,Mandatory = $false)] + [System.IO.FileInfo]$TitleBarIcon = (Join-Path -Path $PSScriptRoot -ChildPath 'assets\hp_black_logo.png') # default to HP logo + ) + + # Create a unique Id to distinguish this notification application from others using "hp.cmsl" and the current time + $Id = "hp.cmsl.$([DateTime]::Now.Ticks)" + + # Convert the relative path for TitleBarIcon into absolute path + $TitleBarIcon = (Get-Item -Path $TitleBarIcon).FullName + + # An app registration is needed to set the issuer name and icon in the title bar + Register-NotificationApplication -Id $Id -DisplayName $TitleBarHeader -IconPath $TitleBarIcon + + # When using system privileges, the block executes in a different context, + # so the relative path for LogoImage must be converted to an absolute path. + # On another note, System.IO.FileInfo.FullName property isn't updated when you change your working directory in PowerShell, + # so in the case for user privileges, + # using Get-Item here to avoid getting wrong absolute path later + # when using System.IO.FileInfo.FullName property in New-HPPrivateToastNotificationLogo. + if ($LogoImage) { + $LogoImage = (Get-Item -Path $LogoImage).FullName + } + + $privs = whoami /priv /fo csv | ConvertFrom-Csv | Where-Object { $_. 'Privilege Name' -eq 'SeDelegateSessionUserImpersonatePrivilege' } + if ($privs.State -eq "Disabled") { + Write-Verbose "Running with user privileges" + Invoke-HPPrivateRebootNotificationAsUser -Title $Title -Message $Message -LogoImage $LogoImage -Expiration $Expiration -Attribution $Id + } + else { + Write-Verbose "Running with system privileges" + + try { + $psPath = (Get-Process -Id $pid).Path + # Passing the parameters as environment variable because the following block executes in a different context + [System.Environment]::SetEnvironmentVariable('HPRebootTitle',$Title,[System.EnvironmentVariableTarget]::Machine) + [System.Environment]::SetEnvironmentVariable('HPRebootMessage',$Message,[System.EnvironmentVariableTarget]::Machine) + [System.Environment]::SetEnvironmentVariable('HPRebootAttribution',$Id,[System.EnvironmentVariableTarget]::Machine) + + if ($LogoImage) { + [System.Environment]::SetEnvironmentVariable('HPRebootLogoImage',$LogoImage,[System.EnvironmentVariableTarget]::Machine) + } + if ($Expiration) { + [System.Environment]::SetEnvironmentVariable('HPRebootExpiration',$Expiration,[System.EnvironmentVariableTarget]::Machine) + } + + [scriptblock]$scriptBlock = { + $path = $pwd.Path + Import-Module -Force $path\HP.Notifications.psd1 + $params = @{ + Title = $env:HPRebootTitle + Message = $env:HPRebootMessage + Attribution = $env:HPRebootAttribution + } + + if ($env:HPRebootLogoImage) { + $params.LogoImage = $env:HPRebootLogoImage + } + + if ($env:HPRebootExpiration) { + $params.Expiration = $env:HPRebootExpiration + } + + Invoke-HPPrivateRebootNotificationAsUser @params + } + + $encodedCommand = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($scriptBlock)) + $psCommand = "-ExecutionPolicy Bypass -Window Normal -EncodedCommand $($encodedCommand)" + [ProcessExtensions]::StartProcessAsCurrentUser($psPath,"`"$psPath`" $psCommand",$PSScriptRoot) + [System.Environment]::SetEnvironmentVariable('HPRebootTitle',$null,[System.EnvironmentVariableTarget]::Machine) + [System.Environment]::SetEnvironmentVariable('HPRebootMessage',$null,[System.EnvironmentVariableTarget]::Machine) + [System.Environment]::SetEnvironmentVariable('HPRebootAttribution',$null,[System.EnvironmentVariableTarget]::Machine) + + if ($LogoImage) { + [System.Environment]::SetEnvironmentVariable('HPRebootLogoImage',$null,[System.EnvironmentVariableTarget]::Machine) + } + if ($Expiration) { + [System.Environment]::SetEnvironmentVariable('HPRebootExpiration',$null,[System.EnvironmentVariableTarget]::Machine) + } + + } + catch { + Write-Error -Message "Could not execute as currently logged on user: $($_.Exception.Message)" -Exception $_.Exception + } + } + + # add a delay before unregistering the app because if you unregister the app right away, toast notification won't pop up + Start-Sleep -Seconds 5 + Unregister-NotificationApplication -Id $Id + + return +} + + +<# +.SYNOPSIS + Triggers a toast notification from XML + +.DESCRIPTION + This command triggers a toast notification from XML. Similar to the Invoke-HPNotification command, this command triggers toast notifications, but this command is more flexible and allows for more customization. + +.PARAMETER Xml + Specifies the schema XML content of the toast notification. Please specify either Xml or XmlPath, but not both. + +.PARAMETER XmlPath + Specifies the file path to the schema XML content of the toast notification. Please specify either Xml or XmlPath, but not both. + +.PARAMETER ActionsJson + Specifies the actions that should be map the button id(s) (if any specified in XML) to the command(s) to call upon clicking the corresponding button. You can specify either ActionsJson or ActionsJsonPath, but not both. + + Please note that button actions are registered in HKEY_CURRENT_USER in the registry. Button actions will persist until the user logs off. + + Example to reboot the system upon clicking the button: + [ + { + "id":"rebootnow", + "cmd":"C:\\Windows\\System32\\shutdown.exe -r -t 0 -f" + } + ] + +.PARAMETER ActionsJsonPath + Specifies the file path to the actions that should be map the button id(s) (if any specified in XML) to the command(s) to call upon clicking the corresponding button. You can specify either ActionsJson or ActionsJsonPath, but not both. + + Please note that button actions are registered in HKEY_CURRENT_USER in the registry. Button actions will persist until the user logs off. + +.PARAMETER Expiration + Specifies the life of the toast notification in minutes whether toast notification is on the screen or in the Action Center. If not specified, the invoked toast notification remains on screen until dismissed. + +.PARAMETER TitleBarHeader + Specifies the text of the toast notification in the title bar. If not specified, the text will default to "HP System Notification". + +.PARAMETER TitleBarIcon + Specifies the icon of the toast notification in the title bar. If not specified, the icon will default to the HP logo. Please note that the color of the icon might be inverted depending on the background color of the title bar. + + +.EXAMPLE + Invoke-HPNotificationFromXML -XmlPath 'C:\path\to\schema.xml' -ActionsJsonPath 'C:\path\to\actions.json' + +.EXAMPLE + Invoke-HPNotificationFromXML -XmlPath 'C:\path\to\schema.xml' -ActionsJson '[ + { + "id":"rebootnow", + "cmd":"C:\\Windows\\System32\\shutdown.exe -r -t 0 -f" + } + ]' + +.EXAMPLE + Invoke-HPNotificationFromXML -XmlPath 'C:\path\to\schema.xml' + +#> +function Invoke-HPNotificationFromXML { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Invoke-HPNotificationFromXML")] + param( + [Parameter(ParameterSetName = 'XmlAJ',Mandatory = $false)] + [Parameter(ParameterSetName = 'XmlAJP',Mandatory = $false)] + [Parameter(ParameterSetName = 'XmlPathAJ',Mandatory = $false)] + [Parameter(ParameterSetName = 'XmlPathAJP',Mandatory = $false)] + [int]$Expiration = 0, + + [Parameter(ParameterSetName = 'XmlAJ',Mandatory = $false)] + [Parameter(ParameterSetName = 'XmlAJP',Mandatory = $false)] + [Parameter(ParameterSetName = 'XmlPathAJ',Mandatory = $false)] + [Parameter(ParameterSetName = 'XmlPathAJP',Mandatory = $false)] + [string]$TitleBarHeader = "HP System Notification", # we don't want to display "Windows PowerShell" in the title bar + + [Parameter(ParameterSetName = 'XmlAJ',Mandatory = $false)] + [Parameter(ParameterSetName = 'XmlAJP',Mandatory = $false)] + [Parameter(ParameterSetName = 'XmlPathAJ',Mandatory = $false)] + [Parameter(ParameterSetName = 'XmlPathAJP',Mandatory = $false)] + [System.IO.FileInfo]$TitleBarIcon = (Join-Path -Path $PSScriptRoot -ChildPath 'assets\hp_black_logo.png'), # default to HP logo + + [Parameter(ParameterSetName = 'XmlAJ',Mandatory = $true)] + [Parameter(ParameterSetName = 'XmlAJP', Mandatory = $true)] + [string]$Xml, # both $Xml and $XmlPath cannot be specified + + [Parameter(ParameterSetName = 'XmlPathAJ', Mandatory = $true)] + [Parameter(ParameterSetName = 'XmlPathAJP', Mandatory = $true)] + [System.IO.FileInfo]$XmlPath, # both $Xml and $XmlPath cannot be specified + + [Parameter(ParameterSetName = 'XmlAJ',Mandatory = $false)] + [Parameter(ParameterSetName = 'XmlPathAJ',Mandatory = $false)] + [string]$ActionsJson, # list of actions that should align with the buttons in the schema Xml file. If no buttons, this field is not needed + + # both $ActionsJson and $ActionsJsonPath cannot be specified, so making one mandatory to resolve ambiguity + [Parameter(ParameterSetName = 'XmlAJP',Mandatory = $true)] + [Parameter(ParameterSetName = 'XmlPathAJP',Mandatory = $true)] + [System.IO.FileInfo]$ActionsJsonPath + ) + + # if Xml, save the contents to a file and set file path to $XmlPath + if ($Xml) { + # create a unique file name for the schema XML file to avoid conflicts + $XmlPath = Join-Path -Path $PSScriptRoot -ChildPath "HPNotificationSchema$([DateTime]::Now.Ticks).xml" + $Xml | Out-File -FilePath $XmlPath -Force + Write-Verbose "Created schema XML file at $XmlPath" + } + + # if ActionsJson, save the contents to a file and set file path to $ActionsJsonPath + if ($ActionsJson) { + # create a unique file name for the actions JSON file to avoid conflicts + $ActionsJsonPath = Join-Path -Path $PSScriptRoot -ChildPath "HPNotificationActions$([DateTime]::Now.Ticks).json" + $ActionsJson | Out-File -FilePath $ActionsJsonPath -Force + Write-Verbose "Created actions JSON file at $ActionsJsonPath" + } + + # Create a unique Id to distinguish this notification application from others using "hp.cmsl" and the current time + $Id = "hp.cmsl.$([DateTime]::Now.Ticks)" + + # Convert the relative path for TitleBarIcon into absolute path + $TitleBarIcon = (Get-Item -Path $TitleBarIcon).FullName + + # An app registration is needed to set the issuer name and icon in the title bar + Register-NotificationApplication -Id $Id -DisplayName $TitleBarHeader -IconPath $TitleBarIcon + + $privs = whoami /priv /fo csv | ConvertFrom-Csv | Where-Object { $_. 'Privilege Name' -eq 'SeDelegateSessionUserImpersonatePrivilege' } + if ($privs.State -eq "Disabled") { + Write-Verbose "Running with user privileges" + Invoke-HPPrivateNotificationAsUser -Xml $XmlPath -Actions $ActionsJsonPath -Expiration $Expiration -Attribution $Id + } + else { + Write-Verbose "Running with system privileges" + + # XmlPath and ActionsJsonPath do not work with system privileges if a relative file path is passed in + # because the following block executes in a different context + # If a relative path is passed in, convert the relative path into absolute path + if ($XmlPath) { + $XmlPath = (Get-Item -Path $XmlPath).FullName + } + + if ($ActionsJsonPath) { + $ActionsJsonPath = (Get-Item -Path $ActionsJsonPath).FullName + } + + try { + $psPath = (Get-Process -Id $pid).Path + + # Passing the parameters as environment variable because the following block executes in a different context + [System.Environment]::SetEnvironmentVariable('HPNotificationFromXmlAttribution',$Id,[System.EnvironmentVariableTarget]::Machine) + [System.Environment]::SetEnvironmentVariable('HPNotificationFromXmlXml',$XmlPath,[System.EnvironmentVariableTarget]::Machine) + + if($ActionsJsonPath){ + [System.Environment]::SetEnvironmentVariable('HPNotificationFromXmlActions',$ActionsJsonPath,[System.EnvironmentVariableTarget]::Machine) + } + + if ($Expiration) { + [System.Environment]::SetEnvironmentVariable('HPNotificationFromXmlExpiration',$Expiration,[System.EnvironmentVariableTarget]::Machine) + } + + [scriptblock]$scriptBlock = { + $path = $pwd.Path + Import-Module -Force $path\HP.Notifications.psd1 + $params = @{ + Xml = $env:HPNotificationFromXmlXml + Actions = $env:HPNotificationFromXmlActions + Attribution = $env:HPNotificationFromXmlAttribution + } + + if ($env:HPNotificationFromXmlExpiration) { + $params.Expiration = $env:HPNotificationFromXmlExpiration + } + + Invoke-HPPrivateNotificationAsUser @params + } + + $encodedCommand = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($scriptBlock)) + $psCommand = "-ExecutionPolicy Bypass -Window Normal -EncodedCommand $($encodedCommand)" + [ProcessExtensions]::StartProcessAsCurrentUser($psPath,"`"$psPath`" $psCommand",$PSScriptRoot) + + [System.Environment]::SetEnvironmentVariable('HPNotificationFromXmlAttribution',$null,[System.EnvironmentVariableTarget]::Machine) + [System.Environment]::SetEnvironmentVariable('HPNotificationFromXmlXml',$null,[System.EnvironmentVariableTarget]::Machine) + + if($ActionsJsonPath){ + [System.Environment]::SetEnvironmentVariable('HPNotificationFromXmlActions',$null,[System.EnvironmentVariableTarget]::Machine) + } + if ($Expiration) { + [System.Environment]::SetEnvironmentVariable('HPNotificationFromXmlExpiration',$null,[System.EnvironmentVariableTarget]::Machine) + } + } + catch { + Write-Error -Message "Could not execute as currently logged on user: $($_.Exception.Message)" -Exception $_.Exception + } + } + + # if temporary XML file was created, remove it + if($Xml) { + Remove-Item -Path $XmlPath -Force + Write-Verbose "Removed temporary schema XML file at $XmlPath" + } + + # if temporary Actions JSON file was created, remove it + if($ActionsJson) { + Remove-Item -Path $ActionsJsonPath -Force + Write-Verbose "Removed temporary actions JSON file at $ActionsJsonPath" + } + + # do not unregister the app because we want to allow the user to snooze the notification + return +} + +<# +.SYNOPSIS + Triggers a toast notification + +.DESCRIPTION + This command triggers a toast notification. + +.PARAMETER Message + Specifies the message to display. This parameter is mandatory. Please note, an empty string is not allowed. + +.PARAMETER Title + Specifies the title to display. This parameter is mandatory. Please note, an empty string is not allowed. + +.PARAMETER LogoImage + Specifies the image file path to be displayed + +.PARAMETER Expiration + Specifies the life of the toast notification in minutes whether toast notification is on the screen or in the Action Center. If not specified, the invoked toast notification remains on screen until dismissed. + +.PARAMETER TitleBarHeader + Specifies the text of the toast notification in the title bar. If not specified, the text will default to "HP System Notification". + +.PARAMETER TitleBarIcon + Specifies the icon of the toast notification in the title bar. If not specified, the icon will default to the HP logo. Please note that the color of the icon might be inverted depending on the background color of the title bar. + +.PARAMETER Signature + Specifies the text to display below the message at the bottom of the toast notification in a smaller font. Please note that on older versions of Windows that don't support attribution text, the signature will just be displayed as another text element in the same font as the message. + +.PARAMETER Dismiss + If set to true or not specified, the toast notification will show a Dismiss button to dismiss the notification. If set to false, the toast notification will not show a Dismiss button and will disappear from the screen and go to the Action Center after 5-7 seconds of invocation. Please note that dismissing the notification overrides any specified Expiration time as the notification will not go to the Action Center once dismissed. + + +.EXAMPLE + Invoke-HPNotification -Title "My title" -Message "My message" -Dismiss $false + +.EXAMPLE + Invoke-HPNotificataion -Title "My title" -Message "My message" -Signature "Foo Bar" -Expiration 5 +#> +function Invoke-HPNotification { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Invoke-HPNotification")] + param( + [Parameter(Position = 0,Mandatory = $true)] + [string]$Title, + + [Parameter(Position = 1,Mandatory = $true)] + [string]$Message, + + [Parameter(Position = 2,Mandatory = $false)] + [System.IO.FileInfo]$LogoImage, + + [Parameter(Position = 3,Mandatory = $false)] + [int]$Expiration = 0, + + [Parameter(Position = 4,Mandatory = $false)] + [string]$TitleBarHeader = "HP System Notification", # we don't want to display "Windows PowerShell" in the title bar + + [Parameter(Position = 5,Mandatory = $false)] + [System.IO.FileInfo]$TitleBarIcon = (Join-Path -Path $PSScriptRoot -ChildPath 'assets\hp_black_logo.png'), # default to HP logo + + [Parameter(Position = 6,Mandatory = $false)] + [string]$Signature, # text in smaller font under Title and Message at the bottom of the toast notification + + [Parameter(Position = 7,Mandatory = $false)] + [bool]$Dismiss = $true # if not specified, default to showing the Dismiss button + ) + + # Create a unique Id to distinguish this notification application from others using "hp.cmsl" and the current time + $Id = "hp.cmsl.$([DateTime]::Now.Ticks)" + + # Convert the relative path for TitleBarIcon into absolute path + $TitleBarIcon = (Get-Item -Path $TitleBarIcon).FullName + + # An app registration is needed to set the issuer name and icon in the title bar + Register-NotificationApplication -Id $Id -DisplayName $TitleBarHeader -IconPath $TitleBarIcon + + # When using system privileges, the block executes in a different context, + # so the relative path for LogoImage must be converted to an absolute path. + # On another note, System.IO.FileInfo.FullName property isn't updated when you change your working directory in PowerShell, + # so in the case for user privileges, + # using Get-Item here to avoid getting wrong absolute path later + # when using System.IO.FileInfo.FullName property in New-HPPrivateToastNotificationLogo. + if ($LogoImage) { + $LogoImage = (Get-Item -Path $LogoImage).FullName + } + + $privs = whoami /priv /fo csv | ConvertFrom-Csv | Where-Object { $_. 'Privilege Name' -eq 'SeDelegateSessionUserImpersonatePrivilege' } + if ($privs.State -eq "Disabled") { + Write-Verbose "Running with user privileges" + + # Invoke-HPPrivateNotificationAsUser is modeled after Invoke-HPPrivateRebootNotificationAsUser so using -NoDismiss instead of -Dismiss for consistency + if($Dismiss) { + Invoke-HPPrivateNotificationAsUser -Title $Title -Message $Message -LogoImage $LogoImage -Expiration $Expiration -Attribution $Id -Signature $Signature -NoDismiss "false" + } + else { + Invoke-HPPrivateNotificationAsUser -Title $Title -Message $Message -LogoImage $LogoImage -Expiration $Expiration -Attribution $Id -Signature $Signature -NoDismiss "true" + } + } + else { + Write-Verbose "Running with system privileges" + + try { + $psPath = (Get-Process -Id $pid).Path + + # Passing the parameters as environment variable because the following block executes in a different context + [System.Environment]::SetEnvironmentVariable('HPNotificationTitle',$Title,[System.EnvironmentVariableTarget]::Machine) + [System.Environment]::SetEnvironmentVariable('HPNotificationMessage',$Message,[System.EnvironmentVariableTarget]::Machine) + [System.Environment]::SetEnvironmentVariable('HPNotificationSignature',$Signature,[System.EnvironmentVariableTarget]::Machine) + [System.Environment]::SetEnvironmentVariable('HPNotificationAttribution',$Id,[System.EnvironmentVariableTarget]::Machine) + + if ($LogoImage) { + [System.Environment]::SetEnvironmentVariable('HPNotificationLogoImage',$LogoImage,[System.EnvironmentVariableTarget]::Machine) + } + if ($Expiration) { + [System.Environment]::SetEnvironmentVariable('HPNotificationExpiration',$Expiration,[System.EnvironmentVariableTarget]::Machine) + } + + # environment variables can only be strings, so we need to convert the Dismiss boolean to a string + if($Dismiss) { + [System.Environment]::SetEnvironmentVariable('HPNotificationNoDismiss', "false",[System.EnvironmentVariableTarget]::Machine) + } + else { + [System.Environment]::SetEnvironmentVariable('HPNotificationNoDismiss', "true",[System.EnvironmentVariableTarget]::Machine) + } + + [scriptblock]$scriptBlock = { + $path = $pwd.Path + Import-Module -Force $path\HP.Notifications.psd1 + $params = @{ + Title = $env:HPNotificationTitle + Message = $env:HPNotificationMessage + Signature = $env:HPNotificationSignature + Attribution = $env:HPNotificationAttribution + NoDismiss = $env:HPNotificationNoDismiss + } + + if ($env:HPNotificationLogoImage) { + $params.LogoImage = $env:HPNotificationLogoImage + } + + if ($env:HPNotificationExpiration) { + $params.Expiration = $env:HPNotificationExpiration + } + + Invoke-HPPrivateNotificationAsUser @params + } + + $encodedCommand = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($scriptBlock)) + $psCommand = "-ExecutionPolicy Bypass -Window Normal -EncodedCommand $($encodedCommand)" + [ProcessExtensions]::StartProcessAsCurrentUser($psPath,"`"$psPath`" $psCommand",$PSScriptRoot) + + [System.Environment]::SetEnvironmentVariable('HPNotificationTitle',$null,[System.EnvironmentVariableTarget]::Machine) + [System.Environment]::SetEnvironmentVariable('HPNotificationMessage',$null,[System.EnvironmentVariableTarget]::Machine) + [System.Environment]::SetEnvironmentVariable('HPNotificationSignature',$null,[System.EnvironmentVariableTarget]::Machine) + [System.Environment]::SetEnvironmentVariable('HPNotificationAttribution',$null,[System.EnvironmentVariableTarget]::Machine) + [System.Environment]::SetEnvironmentVariable('HPNotificationNoDismiss',$null,[System.EnvironmentVariableTarget]::Machine) + + if ($LogoImage) { + [System.Environment]::SetEnvironmentVariable('HPNotificationLogoImage',$null,[System.EnvironmentVariableTarget]::Machine) + } + if ($Expiration) { + [System.Environment]::SetEnvironmentVariable('HPNotificationExpiration',$null,[System.EnvironmentVariableTarget]::Machine) + } + } + catch { + Write-Error -Message "Could not execute as currently logged on user: $($_.Exception.Message)" -Exception $_.Exception + } + } + + # add a delay before unregistering the app because if you unregister the app right away, toast notification won't pop up + Start-Sleep -Seconds 5 + Unregister-NotificationApplication -Id $Id + + return +} + + +# SIG # Begin signature block +# MIIoHgYJKoZIhvcNAQcCoIIoDzCCKAsCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBjAuiLBzgochl5 +# X+OcY0oMEXMhVII4S4RxTv8+cOGCQKCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6jCCGeYCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEID3YSgLp +# aiOsr5a3MeCJqrMqdkgepBOlieiYYej4fVOQMA0GCSqGSIb3DQEBAQUABIIBgC9H +# ZXdULTgJ3251vDlmKd53inCED3gFr7ZonPfOFAcAE8ZpJHOxPRv8GFcK2jp0FGwr +# Zc5VCICiatl3jZ9KXltoqhvK1sV26RTo9MgAtbcchSmZNCrfMgXCIUh+hdaSJ2Y6 +# bvfVjwahl2286xuaXJNKHh8RviLjb8+/9OHVXOXU7tNDFZk37WX3HmZnEg2fGou4 +# fGNKir8E3iawGytPrhOd3dSUeQwN+wF79a8svwMs8NVD/lrURRHEj2Nw8Rbj3ZyG +# 14PDtXpT/ZS/yAOJAm36hHH8ApQmFNZT5ViAyqBsoctpochkWZCZxG75n9I1B/oz +# ES0URbrIQphnyYrK0A2JosqO3lCb7Ocl5a5RVgaEYYIMhbgbPRp0tsUd27d8cLLn +# JhbZOc1+hHnZgb01c6X/WPNUY5SkKhCBymhyMZ2PzujNFIwNKDmR1akjFc/dp7oX +# acA5khzrC45P84c3EKIpir5+QoEUx+5XaZ9McXqxo72VTjoVOyd32iXtm/2PiKGC +# F0Awghc8BgorBgEEAYI3AwMBMYIXLDCCFygGCSqGSIb3DQEHAqCCFxkwghcVAgED +# MQ8wDQYJYIZIAWUDBAIBBQAweAYLKoZIhvcNAQkQAQSgaQRnMGUCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCACblAuZEB+VgglPYUGtFSE+QCCpk7Fka3H +# NkkbOCjoWQIRAMb9GGI3ueowreDUujZ1kCMYDzIwMjQwODI3MTY1NTUwWqCCEwkw +# ggbCMIIEqqADAgECAhAFRK/zlJ0IOaa/2z9f5WEWMA0GCSqGSIb3DQEBCwUAMGMx +# CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMy +# RGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcg +# Q0EwHhcNMjMwNzE0MDAwMDAwWhcNMzQxMDEzMjM1OTU5WjBIMQswCQYDVQQGEwJV +# UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xIDAeBgNVBAMTF0RpZ2lDZXJ0IFRp +# bWVzdGFtcCAyMDIzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo1NF +# hx2DjlusPlSzI+DPn9fl0uddoQ4J3C9Io5d6OyqcZ9xiFVjBqZMRp82qsmrdECmK +# HmJjadNYnDVxvzqX65RQjxwg6seaOy+WZuNp52n+W8PWKyAcwZeUtKVQgfLPywem +# MGjKg0La/H8JJJSkghraarrYO8pd3hkYhftF6g1hbJ3+cV7EBpo88MUueQ8bZlLj +# yNY+X9pD04T10Mf2SC1eRXWWdf7dEKEbg8G45lKVtUfXeCk5a+B4WZfjRCtK1ZXO +# 7wgX6oJkTf8j48qG7rSkIWRw69XloNpjsy7pBe6q9iT1HbybHLK3X9/w7nZ9MZll +# R1WdSiQvrCuXvp/k/XtzPjLuUjT71Lvr1KAsNJvj3m5kGQc3AZEPHLVRzapMZoOI +# aGK7vEEbeBlt5NkP4FhB+9ixLOFRr7StFQYU6mIIE9NpHnxkTZ0P387RXoyqq1AV +# ybPKvNfEO2hEo6U7Qv1zfe7dCv95NBB+plwKWEwAPoVpdceDZNZ1zY8SdlalJPrX +# xGshuugfNJgvOuprAbD3+yqG7HtSOKmYCaFxsmxxrz64b5bV4RAT/mFHCoz+8LbH +# 1cfebCTwv0KCyqBxPZySkwS0aXAnDU+3tTbRyV8IpHCj7ArxES5k4MsiK8rxKBMh +# SVF+BmbTO77665E42FEHypS34lCh8zrTioPLQHsCAwEAAaOCAYswggGHMA4GA1Ud +# DwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATAfBgNVHSMEGDAWgBS6 +# FtltTYUvcyl2mi91jGogj57IbzAdBgNVHQ4EFgQUpbbvE+fvzdBkodVWqWUxo97V +# 40kwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp +# Z2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNybDCB +# kAYIKwYBBQUHAQEEgYMwgYAwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj +# ZXJ0LmNvbTBYBggrBgEFBQcwAoZMaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t +# L0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNy +# dDANBgkqhkiG9w0BAQsFAAOCAgEAgRrW3qCptZgXvHCNT4o8aJzYJf/LLOTN6l0i +# kuyMIgKpuM+AqNnn48XtJoKKcS8Y3U623mzX4WCcK+3tPUiOuGu6fF29wmE3aEl3 +# o+uQqhLXJ4Xzjh6S2sJAOJ9dyKAuJXglnSoFeoQpmLZXeY/bJlYrsPOnvTcM2Jh2 +# T1a5UsK2nTipgedtQVyMadG5K8TGe8+c+njikxp2oml101DkRBK+IA2eqUTQ+OVJ +# dwhaIcW0z5iVGlS6ubzBaRm6zxbygzc0brBBJt3eWpdPM43UjXd9dUWhpVgmagNF +# 3tlQtVCMr1a9TMXhRsUo063nQwBw3syYnhmJA+rUkTfvTVLzyWAhxFZH7doRS4wy +# w4jmWOK22z75X7BC1o/jF5HRqsBV44a/rCcsQdCaM0qoNtS5cpZ+l3k4SF/Kwtw9 +# Mt911jZnWon49qfH5U81PAC9vpwqbHkB3NpE5jreODsHXjlY9HxzMVWggBHLFAx+ +# rrz+pOt5Zapo1iLKO+uagjVXKBbLafIymrLS2Dq4sUaGa7oX/cR3bBVsrquvczro +# SUa31X/MtjjA2Owc9bahuEMs305MfR5ocMB3CtQC4Fxguyj/OOVSWtasFyIjTvTs +# 0xf7UGv/B3cfcZdEQcm4RtNsMnxYL2dHZeUbc7aZ+WssBkbvQR7w8F/g29mtkIBE +# r4AQQYowggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqGSIb3DQEB +# CwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNV +# BAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQg +# Um9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMxCzAJBgNV +# BAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNl +# cnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggIi +# MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXHJQPE8pE3 +# qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMfUBMLJnOW +# bfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w1lbU5ygt +# 69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRktFLydkf3 +# YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYbqMFkdECn +# wHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUmcJgmf6Aa +# RyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP65x9abJTy +# UpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzKQtwYSH8U +# NM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo80VgvCON +# WPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjBJgj5FBAS +# A31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXcheMBK9Rp61 +# 03a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAd +# BgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF +# BwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln +# aWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJo +# dHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy +# bDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQEL +# BQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd4ksp+3CK +# Daopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiCqBa9qVbP +# FXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl/Yy8ZCaH +# bJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeCRK6ZJxur +# JB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYTgAnEtp/N +# h4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/a6fxZsNB +# zU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37xJV77Qpf +# MzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmLNriT1Oby +# F5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0YgkPCr2B +# 2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJRyvmfxqk +# hQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIFjTCCBHWg +# AwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +# EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +# cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcN +# MjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEVMBMG +# A1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +# HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqGSIb3DQEB +# AQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +# pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+ +# n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYykt +# zuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw +# 2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6Qu +# BX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC +# 5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK +# 3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3 +# IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEP +# lAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98 +# THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t9dmpsh3l +# GwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8w +# DgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0 +# cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0 +# cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MEUGA1Ud +# HwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz +# c3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAowCDAGBgRVHSAAMA0GCSqGSIb3DQEB +# DAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9mqyhhyzshV6pGrsi+IcaaVQi +# 7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxSA8hO0Cre+i1Wz/n096wwepqL +# sl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE1Od/6Fmo8L8vC6bp8jQ87PcDx4eo +# 0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSMb++hUD38dglohJ9vytsgjTVg +# HAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbObyMt9H5xaiNrIv8SuFQtJ37YOtnw +# toeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMYIDdjCCA3ICAQEwdzBjMQswCQYDVQQG +# EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0 +# IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAFRK/z +# lJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUAoIHRMBoGCSqGSIb3DQEJAzENBgsq +# hkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwODI3MTY1NTUwWjArBgsqhkiG +# 9w0BCRACDDEcMBowGDAWBBRm8CsywsLJD4JdzqqKycZPGZzPQDAvBgkqhkiG9w0B +# CQQxIgQgrNL/BELOIDwLIjCf0y6f5ZB7f044MZK201lyUD+IDHcwNwYLKoZIhvcN +# AQkQAi8xKDAmMCQwIgQg0vbkbe10IszR1EBXaEE2b4KK2lWarjMWr00amtQMeCgw +# DQYJKoZIhvcNAQEBBQAEggIAUfRBlKp1d2SWzzV2fFZrAcmsJzuaJ6SyS7jp/Lzo +# yZGQEPh1ldhawreqJtUygRAvbmLx0UUvekiwigAAysWQsW1yQ5U2bhIvtTElUVWp +# EsYoXHg2yDgsJvNZK0bn3otJle03XFq4A2t8N6nhKaTG19RyOCs7RzQz23RlnUwa +# ZPhDzu4ur/O2jA1WNi19uCdXppJZWGb5ItawqTP4YFy43bU7cVcd+bDAL7nrpoA2 +# l/gIP4FBGwt6m7N0hF8F6stqJ48kEX4kIbd8BlAmuAwuRq+GczBw6BvD4RBudDp5 +# R4y/MeU7d8mtEasrk3rK9l/gZNFIIvgIYyoYZDzb8IK92XFxgbjLS84dLPZo+aOF +# QXDVMDxqVxTknl5hdIWbRZTJlBjAk5/GuSTHZrVUpsXpCRCYqMS9U7HWyMmsaG8L +# q0idbNH8+UUjKuOtsDWUylrkIXegCjpazzOn1VepBjaPFb10uh+scXYcylK98gId +# lDIFV/GhnlwATVV/HrpvK5QY0ZUf15sR+KiL6oG9odRXJUppI0jeLhBZhRpIVsnt +# tHCe+eH8I/h2FVtz4ZOqjABHtZGpNPtt3DxNmvDtDEWFp28rHt+KBwrEfvND0OAG +# 7YHta2rJCr5kLRcu1atx/Mm3Jy0dSljMAbVR8yiXMvsT2OH0A+n1Ha2yxkwiqxBJ +# KUI= +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Notifications/assets/hp_black_logo.png b/Bios-Update-HP-v2.0/module/HP.Notifications/assets/hp_black_logo.png new file mode 100644 index 0000000..3158f33 Binary files /dev/null and b/Bios-Update-HP-v2.0/module/HP.Notifications/assets/hp_black_logo.png differ diff --git a/Bios-Update-HP-v2.0/module/HP.Notifications/license.txt b/Bios-Update-HP-v2.0/module/HP.Notifications/license.txt new file mode 100644 index 0000000..b93ca37 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Notifications/license.txt @@ -0,0 +1,248 @@ +End-User License Agreement + +READ CAREFULLY BEFORE USING THIS SOFTWARE + +This End-User license Agreement ("EULA") is a legal agreement +between (a) you (either an individual or a single entity) and (b) HP Inc. +("HP") that governs your use of any Software Product, installed on or +made available by HP for use with your HP product ("HP Product"), that +is not otherwise subject to a separate license agreement between you +and HP or its suppliers. Other software may contain a EULA in its online +documentation. The term "Software Product" means computer software +and may include associated media, printed materials and "online" or +electronic documentation. + +An amendment or addendum to this EULA may accompany the HP +Product. + +RIGHTS IN THE SOFTWARE PRODUCT ARE OFFERED ONLY ON THE +CONDITION THAT YOU AGREE TO ALL TERMS AND CONDITIONS OF +THIS EULA. BY INSTALLING, COPYING, DOWNLOADING, OR +OTHERWISE USING THE SOFTWARE PRODUCT, YOU AGREE TO BE +BOUND BY THE TERMS OF THIS EULA. IF YOU DO NOT ACCEPT THESE +LICENSE TERMS, YOUR SOLE REMEDY IS TO RETURN THE ENTIRE +UNUSED PRODUCT (HARDWARE AND SOFTWARE) WITHIN 14 DAYS +FOR A REFUND SUBJECT TO THE REFUND POLICY OF YOUR PLACE OF +PURCHASE. + +1. GRANT OF LICENSE. HP grants you the following rights provided +you comply with all terms and conditions of this EULA: + +a. Use. You may use the Software Product on a single computer ("Your +Computer"). If the Software Product is provided to you via the internet +and was originally licensed for use on more than one computer, you +may install and use the Software Product only on those computers. You +may not separate component parts of the Software Product for use on +more than one computer. You do not have the right to distribute the +Software Product. You may load the Software Product into Your +Computer's temporary memory (RAM) for purposes of using the +Software Product. + +b. Storage. You may copy the Software Product into the local memory +or storage device of the HP Product. + +c. Copying. You may make archival or back-up copies of the Software +Product, provided the copy contains all of the original Software +Product's proprietary notices and that it is used only for back-up +purposes. + +d. Reservation of Rights. HP and its suppliers reserve all rights not +expressly granted to you in this EULA. + +e. Freeware. Notwithstanding the terms and conditions of this EULA, all +or any portion of the Software Product which constitutes non- +proprietary HP software or software provided under public license by +third parties ("Freeware"), is licensed to you subject to the terms and +conditions of the software license agreement accompanying such +Freeware whether in the form of a discrete agreement, shrink wrap +license or electronic license terms accepted at time of download. Use of +the Freeware by you shall be governed entirely by the terms and +conditions of such license. + +f. Recovery Solution. Any software recovery solution provided with/for +your HP Product, whether in the form of a hard disk drive-based +solution, an external media-based recovery solution (e.g. floppy disk, +CD or DVD) or an equivalent solution delivered in any other form, may +only be used for restoring the hard disk of the HP Product with/for +which the recovery solution was originally purchased. The use of any +Microsoft operating system software contained in such recovery +solution shall be governed by the Microsoft License Agreement. + +2. UPGRADES. To use a Software Product identified as an upgrade, +you must first be licensed for the original Software Product identified +by HP as eligible for the upgrade. After upgrading, you may no longer +use the original Software Product that formed the basis for your +upgrade eligibility. By using the Software Product, you also agree that +HP may automatically access your HP Product when connected to the +internet to check the version or status of certain Software Products and +may automatically download and install upgrades or updates to such +Software Products on to your HP Product to provide new versions or +updates required to maintain the functionality, performance, or security +of the HP Software and your HP Product and facilitate the provision of +support or other services provided to you. In certain cases, and +depending on the type of upgrade or update, notifications will be +provided to you (via pop-up or other means), which may require you to +initiate the upgrade or update. + +3. ADDITIONAL SOFTWARE. This EULA applies to updates or +supplements to the original Software Product provided by HP unless +HP provides other terms along with the update or supplement. In case +of a conflict between such terms, the other terms will prevail. + +4. TRANSFER. + +a. Third Party. The initial user of the Software Product may make a +one-time transfer of the Software Product to another end user. Any +transfer must include all component parts, media, printed materials, +this EULA, and if applicable, the Certificate of Authenticity. The transfer +may not be an indirect transfer, such as a consignment. Prior to the +transfer, the end user receiving the transferred product must agree to +all the EULA terms. Upon transfer of the Software Product, your license +is automatically terminated. + +b. Restrictions. You may not rent, lease or lend the Software Product or +use the Software Product for commercial timesharing or bureau use. +You may not sublicense, assign or transfer the license or Software +Product except as expressly provided in this EULA. + +5. PROPRIETARY RIGHTS. All intellectual property rights in the +Software Product and user documentation are owned by HP or its +suppliers and are protected by law, including but not limited to United +States copyright, trade secret, and trademark law, as well as other +applicable laws and international treaty provisions. You shall not +remove any product identification, copyright notices or proprietary +restrictions from the Software Product. + +6. LIMITATION ON REVERSE ENGINEERING. You may not reverse +engineer, decompile, or disassemble the Software Product, except and +only to the extent that the right to do so is mandated under applicable +law notwithstanding this limitation or it is expressly provided for in this +EULA. + +7. TERM. This EULA is effective unless terminated or rejected. This +EULA will also terminate upon conditions set forth elsewhere in this +EULA or if you fail to comply with any term or condition of this EULA. + +8. CONSENT TO COLLECTION/USE OF DATA. + +a. HP will use cookies and other web technology tools to collect +anonymous technical information related to HP Software and your HP +Product. This data will be used to provide the upgrades and related +support or other services described in Section 2. HP will also collect +personal information including your Internet Protocol address or other +unique identifier information associated with your HP Product and data +provided by you on registration of your HP Product. As well as +providing the upgrades and related support or other services, this data +will be used for sending marketing communications to you (in each +case with your express consent where required by applicable law). +To the extent permitted by applicable law, by accepting these terms +and conditions you consent to the collection and use of anonymous +and personal data by HP, its subsidiaries, and affiliates as described in +this EULA and as further described in HP�s privacy policy +www.hp.com/go/privacy + +b. Collection/Use by Third Parties. Certain software programs included +in your HP Product are provided and separately licensed to you by third +party providers (�Third Party Software�). Third Party Software may be +installed and operational on your HP Product even if you choose not to +activate/purchase such software. Third Party Software may collect and +transmit technical information about your system (i.e., IP address, +unique device identifier, software version installed, etc.) and other +system data. This information is used by the third party to identify +technical system attributes and ensure that the most current version of +the software has been installed on your system. If you do not want the +Third Party Software to collect this technical information or +automatically send you version updates, you should uninstall the +software prior to connecting to the Internet. + +9. DISCLAIMER OF WARRANTIES. TO THE MAXIMUM EXTENT +PERMITTED BY APPLICABLE LAW, HP AND ITS SUPPLIERS PROVIDE THE +SOFTWARE PRODUCT �AS IS� AND WITH ALL FAULTS, AND HEREBY +DISCLAIM ALL OTHER WARRANTIES, GUARANTEES, AND CONDITIONS, +EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT +LIMITED TO, WARRANTIES OF TITLE AND NON-INFRINGEMENT, ANY +IMPLIED WARRANTIES, DUTIES, GUARANTEES, OR CONDITIONS OF +MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A +PARTICULAR PURPOSE, AND OF LACK OF VIRUSES ALL WITH REGARD +TO THE SOFTWARE PRODUCT. Some states/jurisdictions do not allow +exclusion of implied warranties or limitations on the duration of implied +warranties, so the above disclaimer may not apply to you in its entirety. +IN AUSTRALIA AND NEW ZEALAND, THE SOFTWARE COMES WITH +GUARANTEES THAT CANNOT BE EXCLUDED UNDER AUSTRALIAN AND +NEW ZEALAND CONSUMER LAWS. AUSTRALIAN CONSUMERS ARE +ENTITLED TO A REPLACEMENT OR A REFUND FOR A MAJOR FAILURE +AND COMPENSATION FOR OTHER REASONABLY FORESEEABLE LOSS +OR DAMAGE. AUSTRALIAN CONSUMERS ARE ALSO ENTITLED TO +HAVE THE SOFTWARE REPAIRED OR REPLACED IF IT FAILS TO BE OF +ACCEPTABLE QUALITY AND THE FAILURE DOES NOT AMOUNT TO A +MAJOR FAILURE. NEW ZEALAND CONSUMERS WHO ARE PURCHASING +GOODS FOR PERSONAL, DOMESTIC OR HOUSEHOLD USE OR +CONSUMPTION AND NOT FOR THE PURPOSE OF A BUSINESS (�NEW +ZEALAND CONSUMERS�) ARE ENTITLED TO REPAIR, REPLACEMENT OR +REFUND FOR A FAILURE AND COMPENSATION FOR OTHER +REASONABLY FORESEEABLE LOSS OR DAMAGE. + +10. LIMITATION OF LIABILITY. Subject to local law, notwithstanding +any damages that you might incur, the entire liability of HP and any of +its suppliers under any provision of this EULA and your exclusive +remedy for all of the foregoing shall be limited to the greater of the +amount actually paid by you separately for the Software Product or U.S. +$5.00. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN +NO EVENT SHALL HP OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, +INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES +WHATSOEVER, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR +LOSS OF PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR +BUSINESS INTERRUPTION, FOR PERSONAL INJURY, FOR LOSS OF +PRIVACY ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF +OR INABILITY TO USE THE SOFTWARE PRODUCT, OR OTHERWISE IN +CONNECTION WITH ANY PROVISION OF THIS EULA, EVEN IF HP OR +ANY SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES AND EVEN IF THE REMEDY FAILS OF ITS ESSENTIAL +PURPOSE. Some states/jurisdictions do not allow the exclusion or +limitation of incidental or consequential damages, so the above +limitation or exclusion may not apply to you. + +11. U.S. GOVERNMENT CUSTOMERS. Consistent with FAR 12.211 +and 12.212, Commercial Computer Software, Computer Software +Documentation, and Technical Data for Commercial Items are licensed +to the U.S. Government under HP's standard commercial license. + +12. COMPLIANCE WITH EXPORT LAWS. You shall comply with all +laws and regulations of the United States and other countries ("Export +Laws") to assure that the Software Product is not (1) exported, directly +or indirectly, in violation of Export Laws, or (2) used for any purpose +prohibited by Export Laws, including, without limitation, nuclear, +chemical, or biological weapons proliferation. + +13. CAPACITY AND AUTHORITY TO CONTRACT. You represent that +you are of the legal age of majority in your state of residence and, if +applicable, you are duly authorized by your employer to enter into this +contract. + +14. APPLICABLE LAW. This EULA is governed by the laws of the +country in which the equipment was purchased. + +15. ENTIRE AGREEMENT. This EULA (including any addendum or +amendment to this EULA which is included with the HP Product) is the +entire agreement between you and HP relating to the Software Product +and it supersedes all prior or contemporaneous oral or written +communications, proposals and representations with respect to the +Software Product or any other subject matter covered by this EULA. To +the extent the terms of any HP policies or programs for support +services conflict with the terms of this EULA, the terms of this EULA +shall control. + +�Copyright 2018-2024 HP Development Company, L.P.. + +The information contained herein is subject to change without notice. +All other product names mentioned herein may be trademarks of their +respective companies. To the extent permitted by applicable law, the +only warranties for HP products and services are set forth in the express +warranty statements accompanying such products and services. +Nothing herein should be construed as constituting an additional +warranty. To the extent permitted by applicable law, HP shall not be +liable for technical or editorial errors or omissions contained herein. + +First Edition: August 2015 +817678-001 + diff --git a/Bios-Update-HP-v2.0/module/HP.Notifications/refs/Microsoft.Windows.SDK.NET.dll b/Bios-Update-HP-v2.0/module/HP.Notifications/refs/Microsoft.Windows.SDK.NET.dll new file mode 100644 index 0000000..c3ac4a2 Binary files /dev/null and b/Bios-Update-HP-v2.0/module/HP.Notifications/refs/Microsoft.Windows.SDK.NET.dll differ diff --git a/Bios-Update-HP-v2.0/module/HP.Notifications/refs/WinRT.Runtime.dll b/Bios-Update-HP-v2.0/module/HP.Notifications/refs/WinRT.Runtime.dll new file mode 100644 index 0000000..3632a2e Binary files /dev/null and b/Bios-Update-HP-v2.0/module/HP.Notifications/refs/WinRT.Runtime.dll differ diff --git a/Bios-Update-HP-v2.0/module/HP.Private/HP.CMSLHelper.dll b/Bios-Update-HP-v2.0/module/HP.Private/HP.CMSLHelper.dll new file mode 100644 index 0000000..610c40a Binary files /dev/null and b/Bios-Update-HP-v2.0/module/HP.Private/HP.CMSLHelper.dll differ diff --git a/Bios-Update-HP-v2.0/module/HP.Private/HP.CMSLHelper.dll.config b/Bios-Update-HP-v2.0/module/HP.Private/HP.CMSLHelper.dll.config new file mode 100644 index 0000000..1696df6 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Private/HP.CMSLHelper.dll.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Bios-Update-HP-v2.0/module/HP.Private/HP.Private.psd1 b/Bios-Update-HP-v2.0/module/HP.Private/HP.Private.psd1 new file mode 100644 index 0000000..bf8dcd4 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Private/HP.Private.psd1 @@ -0,0 +1,251 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + +@{ + + RootModule = 'HP.Private.psm1' + #FullModuleVersion = '1.7.2.774' + ModuleVersion = '1.7.2' + GUID = '9F47EFBC-1124-46F3-87AB-F2D15D169CE7' + Author = 'HP Development Company, L.P.' + CompanyName = 'HP Inc' + Copyright = '(C) Copyright 2018-2024 HP Development Company, L.P.' + Description = 'Private utility module for HP Client Management Script Library' + PowerShellVersion = '5.1' + + PrivateData = @{ + PSData = @{ + LicenseUri = 'https://developers.hp.com/node/11493' + RequireLicenseAcceptance = $true + } # End of PSData hashtable + } # End of PrivateData hashtable + + +} + + +# SIG # Begin signature block +# MIIoHgYJKoZIhvcNAQcCoIIoDzCCKAsCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDIAIMSCbJwThw6 +# ysLiwvoRHMtn1UkwJ/pq8iGmfDXbE6CCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6jCCGeYCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIKz3Envh +# RO4OUQqnHV0UQAK4WLEe0YzGRzF3lFLQ/xA5MA0GCSqGSIb3DQEBAQUABIIBgBv7 +# NXqNvXpJYOGMIwpZI84asviWtKF8BbdAp6JIZUHEAmn+tB4L9pudwLfWjJyRqow0 +# dWonMLZARpIKKv+Ft4czKPodS5VhmwUuy2gHYGr2bbJVwKqZNzB2Y4PNhlmS4Lc9 +# i8oiZ0YzbP2mtMZXvRRPgO5gzwDeOoJbvLpECudFekvIlKzIWFYOyvzS69pWHFiu +# cgAL8Y77r1TKfCNIdfG5zNnXRj9XKjUjyfKJ9sXQ2Tz4yCuIGbERlR+10h90ZO1/ +# vE3wIHwCsqUwB7kwcp0sKjVy4fzWe304KFFfbQb0ApKv2uZLKLWJ0Y3ETPpobsFE +# HKb3T/UK4wivrVQ9dtxpiESfMb4VPtUEo8X4tBjhh+1/4j1QUsMRKamfbpcuOUEK +# js++b0WNRQWOjOktbOczDgLpHm0v1uaNSOBJkVDANQCen6RVUvBcfs+zqwTz09w/ +# bKABISsgKbRbsVqjZfPfizXKYtwfCI9VYVvnbPxq9jQ8PtmmQpT62BDy6euE2aGC +# F0Awghc8BgorBgEEAYI3AwMBMYIXLDCCFygGCSqGSIb3DQEHAqCCFxkwghcVAgED +# MQ8wDQYJYIZIAWUDBAIBBQAweAYLKoZIhvcNAQkQAQSgaQRnMGUCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCB3NTTzX6sC3i1afq++5My0F56p+NiIyV2Y +# geBO/IM2ywIRAMDAnBk8gq5uBkqHVxlocQcYDzIwMjQwODI3MTY1NTQ4WqCCEwkw +# ggbCMIIEqqADAgECAhAFRK/zlJ0IOaa/2z9f5WEWMA0GCSqGSIb3DQEBCwUAMGMx +# CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMy +# RGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcg +# Q0EwHhcNMjMwNzE0MDAwMDAwWhcNMzQxMDEzMjM1OTU5WjBIMQswCQYDVQQGEwJV +# UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xIDAeBgNVBAMTF0RpZ2lDZXJ0IFRp +# bWVzdGFtcCAyMDIzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo1NF +# hx2DjlusPlSzI+DPn9fl0uddoQ4J3C9Io5d6OyqcZ9xiFVjBqZMRp82qsmrdECmK +# HmJjadNYnDVxvzqX65RQjxwg6seaOy+WZuNp52n+W8PWKyAcwZeUtKVQgfLPywem +# MGjKg0La/H8JJJSkghraarrYO8pd3hkYhftF6g1hbJ3+cV7EBpo88MUueQ8bZlLj +# yNY+X9pD04T10Mf2SC1eRXWWdf7dEKEbg8G45lKVtUfXeCk5a+B4WZfjRCtK1ZXO +# 7wgX6oJkTf8j48qG7rSkIWRw69XloNpjsy7pBe6q9iT1HbybHLK3X9/w7nZ9MZll +# R1WdSiQvrCuXvp/k/XtzPjLuUjT71Lvr1KAsNJvj3m5kGQc3AZEPHLVRzapMZoOI +# aGK7vEEbeBlt5NkP4FhB+9ixLOFRr7StFQYU6mIIE9NpHnxkTZ0P387RXoyqq1AV +# ybPKvNfEO2hEo6U7Qv1zfe7dCv95NBB+plwKWEwAPoVpdceDZNZ1zY8SdlalJPrX +# xGshuugfNJgvOuprAbD3+yqG7HtSOKmYCaFxsmxxrz64b5bV4RAT/mFHCoz+8LbH +# 1cfebCTwv0KCyqBxPZySkwS0aXAnDU+3tTbRyV8IpHCj7ArxES5k4MsiK8rxKBMh +# SVF+BmbTO77665E42FEHypS34lCh8zrTioPLQHsCAwEAAaOCAYswggGHMA4GA1Ud +# DwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATAfBgNVHSMEGDAWgBS6 +# FtltTYUvcyl2mi91jGogj57IbzAdBgNVHQ4EFgQUpbbvE+fvzdBkodVWqWUxo97V +# 40kwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp +# Z2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNybDCB +# kAYIKwYBBQUHAQEEgYMwgYAwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj +# ZXJ0LmNvbTBYBggrBgEFBQcwAoZMaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t +# L0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNy +# dDANBgkqhkiG9w0BAQsFAAOCAgEAgRrW3qCptZgXvHCNT4o8aJzYJf/LLOTN6l0i +# kuyMIgKpuM+AqNnn48XtJoKKcS8Y3U623mzX4WCcK+3tPUiOuGu6fF29wmE3aEl3 +# o+uQqhLXJ4Xzjh6S2sJAOJ9dyKAuJXglnSoFeoQpmLZXeY/bJlYrsPOnvTcM2Jh2 +# T1a5UsK2nTipgedtQVyMadG5K8TGe8+c+njikxp2oml101DkRBK+IA2eqUTQ+OVJ +# dwhaIcW0z5iVGlS6ubzBaRm6zxbygzc0brBBJt3eWpdPM43UjXd9dUWhpVgmagNF +# 3tlQtVCMr1a9TMXhRsUo063nQwBw3syYnhmJA+rUkTfvTVLzyWAhxFZH7doRS4wy +# w4jmWOK22z75X7BC1o/jF5HRqsBV44a/rCcsQdCaM0qoNtS5cpZ+l3k4SF/Kwtw9 +# Mt911jZnWon49qfH5U81PAC9vpwqbHkB3NpE5jreODsHXjlY9HxzMVWggBHLFAx+ +# rrz+pOt5Zapo1iLKO+uagjVXKBbLafIymrLS2Dq4sUaGa7oX/cR3bBVsrquvczro +# SUa31X/MtjjA2Owc9bahuEMs305MfR5ocMB3CtQC4Fxguyj/OOVSWtasFyIjTvTs +# 0xf7UGv/B3cfcZdEQcm4RtNsMnxYL2dHZeUbc7aZ+WssBkbvQR7w8F/g29mtkIBE +# r4AQQYowggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqGSIb3DQEB +# CwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNV +# BAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQg +# Um9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMxCzAJBgNV +# BAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNl +# cnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggIi +# MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXHJQPE8pE3 +# qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMfUBMLJnOW +# bfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w1lbU5ygt +# 69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRktFLydkf3 +# YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYbqMFkdECn +# wHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUmcJgmf6Aa +# RyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP65x9abJTy +# UpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzKQtwYSH8U +# NM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo80VgvCON +# WPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjBJgj5FBAS +# A31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXcheMBK9Rp61 +# 03a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAd +# BgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF +# BwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln +# aWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJo +# dHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy +# bDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQEL +# BQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd4ksp+3CK +# Daopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiCqBa9qVbP +# FXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl/Yy8ZCaH +# bJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeCRK6ZJxur +# JB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYTgAnEtp/N +# h4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/a6fxZsNB +# zU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37xJV77Qpf +# MzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmLNriT1Oby +# F5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0YgkPCr2B +# 2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJRyvmfxqk +# hQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIFjTCCBHWg +# AwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +# EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +# cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcN +# MjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEVMBMG +# A1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +# HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqGSIb3DQEB +# AQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +# pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+ +# n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYykt +# zuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw +# 2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6Qu +# BX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC +# 5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK +# 3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3 +# IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEP +# lAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98 +# THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t9dmpsh3l +# GwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8w +# DgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0 +# cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0 +# cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MEUGA1Ud +# HwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz +# c3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAowCDAGBgRVHSAAMA0GCSqGSIb3DQEB +# DAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9mqyhhyzshV6pGrsi+IcaaVQi +# 7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxSA8hO0Cre+i1Wz/n096wwepqL +# sl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE1Od/6Fmo8L8vC6bp8jQ87PcDx4eo +# 0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSMb++hUD38dglohJ9vytsgjTVg +# HAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbObyMt9H5xaiNrIv8SuFQtJ37YOtnw +# toeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMYIDdjCCA3ICAQEwdzBjMQswCQYDVQQG +# EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0 +# IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAFRK/z +# lJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUAoIHRMBoGCSqGSIb3DQEJAzENBgsq +# hkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwODI3MTY1NTQ4WjArBgsqhkiG +# 9w0BCRACDDEcMBowGDAWBBRm8CsywsLJD4JdzqqKycZPGZzPQDAvBgkqhkiG9w0B +# CQQxIgQgLkfahs6ET6u2sbH42faXPE5qGkKa+ZYXDSlB9KT6VCUwNwYLKoZIhvcN +# AQkQAi8xKDAmMCQwIgQg0vbkbe10IszR1EBXaEE2b4KK2lWarjMWr00amtQMeCgw +# DQYJKoZIhvcNAQEBBQAEggIAmOCHu89F7i1zAsAVpUI0GPXWGRTjg7hSK75BHrhk +# iStOXhLUoVUgZLuWQ9bdXSnw3bsm4Wf9JbG5IU/Q+J/HW3dFDwwQHx5HxOBzmQ1j +# sbSbrKClX9boVQFI/QloMmxqh2DgHRBeSmFNcUItCDdt2IqOHSpPGPVGjEgbY4W6 +# UaXQX9rtN4sIq6RT2KDSsWvprcH1cdVwWVPsTHeOVja6kAWGgEAO/voORGYkaIyb +# z3IE8lzX3cVZvI50QtyEnsh13j8K4f9PGk45MHLT4JNGbixwarAA3S9kOvlo6gtu +# Ckoj4NP9+aP6GxG0xaEdAQG8NYwIAfoQPmuK8kGH1DDHe+IOZ52bpT9xxAAVuza+ +# 8mvpCP4+Xd6fWS8BTc7XemhSA+ERV7zvUnTY1jXTqwTB0FzwFJ4nJEYJm0WuDQCg +# eFRJgDy5zg8BeyYujPHrh0ZjA1SxYRq5njt4xgjWQttUl76cJiTQQNm45OxUtOX/ +# sIe5wlIOHwXIw3/mjfUqQrV0mxmIKPx7L5H9QsdUk36psa35nh8wtQ7c9kzca+aJ +# GG0XGRjJut6a0FHeszLF8hb077TmRZyq+rJwFYdZXodR7Ta1fUCe5nlDF+t3AYzu +# zSyJhjb0NPGYw1zbH4axQ6qakPAfKqb/DSV67UamnlYtEE8tnhQtV2ZCyP9Rzqw1 +# ClU= +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Private/HP.Private.psm1 b/Bios-Update-HP-v2.0/module/HP.Private/HP.Private.psm1 new file mode 100644 index 0000000..eae5abe --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Private/HP.Private.psm1 @@ -0,0 +1,2961 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + +using namespace HP.CMSLHelper + +$ErrorActionPreference = 'Stop' +Set-StrictMode -Version 3.0 + +# CMSL is normally installed in C:\Program Files\WindowsPowerShell\Modules +# but if installed via PSGallery and via PS7, it is installed in a different location +if(Test-Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll") { + Add-Type -Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll" +} +else { + Add-Type -Path "$PSScriptRoot\HP.CMSLHelper.dll" +} + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateReadINI { + [CmdletBinding()] + param( + [Parameter(Mandatory = $True)] $file, + [Parameter(Mandatory = $False)] [int]$maxRetries = 0 + ) + + Write-Verbose "Reading INI style file '$file'" + [System.IO.StreamReader]$streamReader = $null + $CommentCount = 0 + $name = $null + + # only allow https or file paths with or without file:// URL prefix + if ($file -and -not ($file.StartsWith("https://",$true,$null) -or [System.IO.File]::Exists($file) -or $file.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing file paths are supported." + } + + + # if file starts with file:// or file:/// or file:////, remove the file URL prefix to just use the actual file path + if ($file.StartsWith("file://",$true,$null)) { + $file = $file.Substring(7) + } + + # remove any leading forward slashes + $file = $file.TrimStart("/") + + try { + if ($file.StartsWith("https://",$true,$null)) { + Write-Verbose ("Reading network file: $file") + + [int]$retries = $maxRetries + do { + try { + Write-Verbose "Downloading CVA file $file, try $($maxRetries-$retries) / $maxRetries" + [System.Net.ServicePointManager]::SecurityProtocol = Get-HPPrivateAllowedHttpsProtocols + $userAgent = Get-HPPrivateUserAgent + $data = Invoke-WebRequest -Uri $file -UserAgent $userAgent -UseBasicParsing -ErrorAction Stop + $retries = 0 + } + catch { + $retries = $retries - 1 + Write-Verbose ("Download failed: $($_.Exception)") + if ($retries -le 0) { throw $_ } + Start-Sleep 5 + + } + } while ($retries -gt 0) + + $streamReader = New-Object System.IO.StreamReader ($data.RawContentStream) + } + else { + Write-Verbose ("Reading filesystem file: $file") + $streamReader = New-Object -TypeName System.IO.StreamReader -ArgumentList $file + } + + $ini = @{} + while (($line = $streamReader.ReadLine()) -ne $null) { + switch -regex ($line) { + "^\[(.+)\]$" { + # Section + $section = $matches[1] + $ini[$section] = @{} + $CommentCount = 0 + } + "^(;.*)$" { + # Comment + if (!(Test-Path variable:\section)) { + $section = "No-Section" + $ini[$section] = @{} + } + $value = $matches[1] + $CommentCount = $CommentCount + 1 + $name = "Comment" + $CommentCount + $ini[$section][$name] = $value + } + "(.+?)\s*=\s*(.*)" { + # Key + if (!($section)) { + $section = "No-Section" + $ini[$section] = @{} + } + $name,$value = $matches[1..2] + if ($ini[$section][$name]) { + if ($ini[$section][$name] -is [string]) { + $ini[$section][$name] = @($ini[$section][$name]) + } + $ini[$section][$name] += $value + } + else { + $ini[$section][$name] = $value + } + continue + } + "^(?!(.*[=])).*" { + # section text block + if (!($section)) { + $section = "No-Section" + $ini[$section] = @{} + } + + if ($ini[$section]["_body"] -eq $null) { + $ini[$section]["_body"] = @() + } + + $ini[$section]["_body"] += ($matches.Values | Where-Object { $_.StartsWith("[") -eq $false }) + } + } + } + } + finally { + if ($streamReader) { + $streamReader.Close() + $streamReader.Dispose() + $streamReader = $null + } + } + return $ini +} + + + + +# this is what the downloaded filename will be + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateTemporaryFileName ($filename,[System.IO.DirectoryInfo]$cacheDir = [System.IO.Path]::GetTempPath() + "hp") { + $cacheDir = Join-Path -Path $cacheDir -ChildPath $filename + $cacheDir.FullName +} + + + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function GetLockedStreamForWrite { + [CmdletBinding()] + param([string]$target,[int]$maxRetries = 10) + + Write-Verbose "Opening exclusive access to file $target with maximum retries of $maxRetries" + $lock_wait = $false + + do { + try { + $lock_wait = $false + $result = New-Object -TypeName System.IO.FileStream -ArgumentList $target,Create,Write,None + } + catch { + Write-Verbose ("******* $($_ | fl)") + $lock_wait = $true + if ($maxRetries -gt 0) { + Start-Sleep -Seconds 30 + $maxRetries = $maxRetries - 1 + } + else { + throw "Could not obtain exclusive access to file '$target' and all retries were exhausted." + } + + } + } + while ($lock_wait -eq $true) + $result +} + +# check for collision with other processes + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function GetSharedFileInformation { + [CmdletBinding()] + param($file,[string]$mode,[switch]$wait,[int]$maxRetries,[switch]$progress,[switch]$skipSignatureCheck) + + $return = $true + $length = 0 + $sig = $false + + Write-Verbose ("Getting file information for file $file with access rights=$mode, wait = $wait, maxRetries=$maxRetries, skipAuthenticode=$($skipSignatureCheck.IsPresent)") + if (-not $wait.IsPresent) { + Write-Verbose ("This operation will not be retried.") + $maxRetries = 0 + } + + do { + # file length + try { + $length = (Get-ChildItem -File $file -ErrorAction Stop).Length + } + catch { + Write-Verbose "Caught exception: $_.Message" + return (-1,$true,$skipSignatureCheck.IsPresent) + } + + Write-Verbose ("Target file length on disk is $length bytes") + try { + $fs = [System.IO.File]::Open($file,"Open",$mode) + $return = $true + $fs.Close() + $fs.Dispose() + Write-Verbose "Able to read from file '$file', it doesn't seem locked." + + + if ($skipSignatureCheck.IsPresent) { + Write-Verbose "Not checking Authenticode signature for file $file" + $sig = $true + } + else { + $sig = Get-HPPrivateCheckSignature -File $file -Progress:$progress + } + break + } + catch [System.IO.FileNotFoundException]{ + Write-Verbose "File not found: $_.Message" + return (-1,$true,$skipSignatureCheck.IsPresent) + } + catch { + Write-Verbose "Internal error: $_.Message" + $return = $false + if ($maxRetries -gt 0) { + if ($progress) { + Write-Progress -Activity "Blocked by another process, will retry for ($maxRetries) tries" + } + + Write-Verbose ("Sleeping for 30 seconds since someone else has '$file' locked") + Start-Sleep -Seconds 30 + Write-Verbose ("Woke up") + } + $maxRetries = $maxRetries - 1 + } + } while ($maxRetries -gt 0) + ($length,$return,$sig) +} + + +# download a file + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Invoke-HPPrivateDownloadFile { + [CmdletBinding()] + param + ( + [string]$url, + [string]$target, + [bool]$progress, + [string]$noclobber, + [switch]$panic, + [int]$maxRetries = 0, + [switch]$skipSignatureCheck + ) + + Write-Verbose ("Requesting to download $url to $target with progress: $progress and signatureCheckSkip: $skipSignatureCheck") + [System.Net.ServicePointManager]::SecurityProtocol = Get-HPPrivateAllowedHttpsProtocols + $userAgent = Get-HPPrivateUserAgent + $targetStream = $null + $responseStream = $null + $response = $null + + try { + if (Test-Path $target -PathType Leaf) { + # target file exists + switch ($noclobber) { + "no" { + if ($panic.IsPresent) { throw "File $target already exists, will not overwrite." } + + if ($progress) { Write-Host -ForegroundColor Magenta "File $target already exists, will not overwrite." } + return + } + "yes" { + if ($progress -eq $true) { Write-Verbose "Overwriting existing file $target" } + } + "skip" {} + } + + } + else { + #create lead directory if needed + $lead = Split-Path $target + if (!(Test-Path $lead)) { + Write-Verbose "Creating directory '$lead'" + $leaf = Split-Path $lead -leaf + New-Item -ItemType Directory -Force -Path $lead.TrimEnd($leaf) -Name $leaf | Out-Null + } + } + + $uri = New-Object "System.Uri" "$url" + $retries = $maxRetries + + do { + $request = [System.Net.HttpWebRequest]::Create($uri) + $request.set_Timeout(60000) + + if (-not $request -is [System.Net.FtpWebRequest]) { + $request.set_UserAgent($userAgent) + } + try { + Write-Verbose "Executing query on $uri, try $($maxRetries-$retries) / $maxRetries" + $response = $request.GetResponse() + $retries = 0 + } + catch { + $retries = $retries - 1 + + if ($retries -le 0) { + throw "Query failed: $($_.Exception)" + } + else{ + Write-Verbose ("Query failed: $($_.Exception). Trying again.") + } + Start-Sleep 5 + } + + } while ($retries -gt 0) + + $responseContentLength = $response.get_ContentLength() + if ($responseContentLength -ge 1024) { + $totalLength = [System.Math]::Floor($responseContentLength / 1024) + } + else { + $totalLength = 1 + } + + # Someone else may be downloading this file at this time, so we'll wait until they release the + # lock and then we check the size + Write-Verbose ("Target file is $target") + + # get file information if it exists to see if it contains the contents we want + # and if file does not exist, continue on with the download as usual + if(Test-Path -Path $target -PathType leaf){ + $r = GetSharedFileInformation -File $target -Mode "Read" -Wait -maxRetries $maxRetries -Progress:$progress -skipSignatureCheck:$skipSignatureCheck + if ($noclobber -eq "skip") { + if (($r[0] -eq $response.get_ContentLength()) -and ($r[2] -eq $true)) { + Write-Verbose "File already exists or another process has finished downloading this file for us." + return + } + else { + # overwrite=skip means skip overwriting existing files without error so will not proceed with download + Write-Verbose ("Existing file $target doesn't seem correct (size=$($r[0]) vs expected $($response.get_ContentLength()), signature_check=$($r[2]). Skipping (will not overwrite). ") + return + } + } + } + + $responseStream = $response.GetResponseStream() + $targetStream = GetLockedStreamForWrite -maxRetries $maxRetries -Target $target + + $buffer = New-Object byte[] 10KB + $count = $responseStream.Read($buffer,0,$buffer.Length) + $downloadedBytes = $count + + #being too verbose with Write-Progress slows down the process + $maxChunks = 20 + $chunkSize = $totalLength / $maxChunks + while ($chunkSize -gt 1024) { + $maxChunks = $maxChunks * 2 + $chunkSize = $totalLength / $maxChunks + } + + if ($chunkSize -lt 16384) { + $chunkSize = 16384 + $maxChunks = 1 + } + + $lastChunk = 0 + while ($count -gt 0) { + $targetStream.Write($buffer,0,$count) + $count = $responseStream.Read($buffer,0,$buffer.Length) + $downloadedBytes = $downloadedBytes + $count + $thisChunk = [System.Math]::Floor(($downloadedBytes / 100) / $totalLength) + + # warning: do not update progress every iteration because it slows down the download significantly + # i.e. SoftPaq 144724 will take 14-17 mins instead of 30-40 seconds to download + if (($progress -eq $true) -and ($thisChunk -gt $lastChunk)) { + $lastChunk = $thisChunk + Write-Progress -Activity "Downloading file '$($url.split('/') | Select -Last 1)'" -Status "Downloaded ($([System.Math]::Floor($downloadedBytes/1024))K of $($totalLength)K): " -PercentComplete ((([System.Math]::Floor($downloadedBytes / 1024)) / $totalLength) * 100) + } + } + + if ($progress -eq $true) { + Write-Verbose ("Finished downloading '$($url.split('/') | Select-Object -Last 1)'") + Write-Progress -Activity "Finished downloading file '$($url.split('/') | Select-Object -Last 1)'" -Completed + } + } + catch{ + throw ("Failed to download due to $($_.Exception)") + } + finally { + if ($targetStream) { + $targetStream.Flush() + $targetStream.Close() + $targetStream.Dispose() + } + + if ($responseStream) { + $responseStream.Close() + $responseStream.Dispose() + } + + if ($response) { + $response.Close() + } + } + +} + + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateCurrentOs { + switch ([string][System.Environment]::OSVersion.Version.Major + "." + [string][System.Environment]::OSVersion.Version.Minor) { + "10.0" { $os = "win10" } + "6.3" { $os = "win81" } + "6.2" { $os = "win8" } + "6.1" { $os = "win7" } + } + if ([string][System.Environment]::OSVersion.Version.Build -ge 22000) { + $os = "win11" + } + return $os +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Send-HPPrivateKMSRequest +{ + [CmdletBinding()] + param( + [string]$KMSUri, + [string]$JsonPayload, + [string]$AccessToken, + [string]$Method = "POST" + ) + + Write-Verbose "HTTPS Request $KMSUri : $Method => $jsonPayload" + $userAgent = Get-HPPrivateUserAgent + $request = [System.Net.HttpWebRequest]::Create($KMSUri) + $request.set_UserAgent($userAgent) + $request.Method = $Method + $request.Timeout = -1 + $request.KeepAlive = $true + $request.ReadWriteTimeout = -1 + $request.Headers.Add("Authorization","Bearer $AccessToken") + if ($JsonPayload) { + $content = [System.Text.Encoding]::UTF8.GetBytes($JsonPayload) + $request.ContentType = "application/json" + $request.ContentLength = $content.Length + $stream = $request.GetRequestStream() + $stream.Write($content,0,$content.Length) + $stream.Flush() + $stream.Close() + } + + try { + [System.Net.WebResponse]$response = $request.GetResponse() + } + catch [System.Net.WebException]{ + Write-Verbose $_.Exception.Message + $response = $_.Exception.Response + } + + if ($response.PSObject.Properties.Name -match 'StatusDescription') { + $statusDescription = $response.StatusDescription + $receiveStream = $response.GetResponseStream() + $streamReader = New-Object System.IO.StreamReader $receiveStream + $responseContent = $streamReader.ReadToEnd() + $streamReader.Close() + $streamReader.Dispose() + Write-Verbose $responseContent + } + + $response.Close() + return $statusDescription,$responseContent +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Invoke-HPPrivateKMSErrorHandle { + [CmdletBinding()] + param( + [string]$ApiResponseContent, + [string]$Status + ) + + if ($Status -eq 'Not Found') { + throw "URL not found" + } + + try { + $response = $ApiResponseContent | ConvertFrom-Json + } + catch { + Write-Verbose $ApiResponseContent + throw 'Error code malformed' + } + + if ($response -and $response.PSObject.Properties.Name -contains 'errorCode') { + switch ($response.errorCode) { + # Internal errors codes are suppressed + 401 { throw "Error code ($_): Unauthorized" } + 402 { throw "Error code ($_): Key does not exist" } + 403 { throw "Error code ($_): Key does not exist" } + 404 { throw "Error code ($_): Error while adding key to vault" } + 405 { throw "Error code ($_): Unauthorized" } + 406 { throw "Error code ($_): Invalid Azure tenant" } + 407 { throw "Error code ($_): User does not belong to any group" } + 408 { throw "Error code ($_): User does not belong to any group the key is assigned to" } + 409 { throw "Error code ($_): Invalid access token" } + 410 { throw "Error code ($_): Invalid access token" } + 411 { throw "Error code ($_): Invalid access token" } + 412 { throw "Error code ($_): Invalid access token" } + 413 { throw "Error code ($_): Invalid key id" } + 414 { throw "Error code ($_): Unauthorized" } + 415 { throw "Error code ($_): Failed to recover secret" } + 416 { throw "Error code ($_): Invalid request" } + 417 { throw "Error code ($_): Unauthorized" } + 418 { throw "Error code ($_): Invalid request" } + 419 { throw "Error code ($_): Invalid request" } + 420 { throw "Error code ($_): Key not concurrent" } + 440 { throw "Error code ($_): Permission table functionality not supported" } + 430 { throw "Error code ($_): Unauthorized" } + 431 { throw "Error code ($_): Key mapping already exists" } + 432 { throw "Error code ($_): Unauthorized" } + 433 { throw "Error code ($_): Invalid key mapping" } + 434 { throw "Error code ($_): Unauthorized" } + 435 { throw "Error code ($_): Invalid key mapping" } + 436 { throw "Error code ($_): Unauthorized" } + 437 { throw "Error code ($_): Invalid key mapping" } + 438 { throw "Error code ($_): Incorrect content-type" } + 439 { throw "Error code ($_): Multiple changes for the same device id is not supported" } + 501 { throw "Error code ($_): Key already exists" } + 502 { throw "Error code ($_): Invalid key id" } + 503 { throw "Error code ($_): Invalid key id" } + 504 { throw "Error code ($_): Invalid key id" } + 601 { throw "Error code ($_): Invalid request" } + 602 { throw "Error code ($_): Invalid key id" } + 603 { throw "Error code ($_): Unauthorized" } + 604 { throw "Error code ($_): Malformed key" } + 606 { throw "Error code ($_): Same EK and SK is not allowed" } + default { throw "Error code ($_)" } + } + } + + Write-Verbose $ApiResponseContent + throw "Wrong URL or error code malformed" +} + +<# +.SYNOPSIS + This is a private command for internal use only. + Determine if running in WinPE. + +.DESCRIPTION + This is a private command for internal use only. + Returns $true if running in Win PE, $false otherwise. + +.EXAMPLE + Test-WinPE +#> +function Test-WinPE +{ + [CmdletBinding()] + param() + + $r = Test-Path -Path Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlset\Control\MiniNT + Write-Verbose ("Running in Windows PE: $r") + $r +} + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateCurrentOsBitness { + if ([environment]::Is64BitOperatingSystem -eq $true) { + $output = systeminfo | findstr /C:"System Type" + + if($output -match "ARM64-based PC") { # ARM64-based PC means ARM64 + return "arm64" + } + else { # x64-based PC means x64 + return 64 + } + } + else { + return 32 + } +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateUnicodePath { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true)] + [string]$Path + ) + + return "\\?\$Path" +} + +# perform an action after a SoftPaq download completed + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Invoke-PostDownloadSoftpaqAction +{ + [CmdletBinding()] + param([string]$downloadedFile,[string]$action,[string]$number,$info,[string]$Destination) + + Write-Verbose 'Processing post-download action' + $PostDownloadCmd = $null + + switch ($action) { + "extract" { + if (!$Destination) { + $Destination = (Get-Item $downloadedFile).DirectoryName + $Destination = Join-Path -Path $Destination -ChildPath (Get-Item $downloadedFile).BaseName + } + + Write-Verbose -Message "Extracting $downloadedFile to: $Destination" + $output = Start-Process -Wait -PassThru "$downloadedFile" -ArgumentList "-e -f `"$Destination`"","-s" + $result = $? + Write-Verbose -Message "Extraction result: $result" + } + "install" { + #$PostDownloadCmd = descendNodesAndGet $info -field "install" + if($Destination){ + # the /f switch for SoftPaq executables = the runtime switch that + # overrides the default target path specified in build time + $output = Start-Process -Wait -PassThru "$downloadedFile" -ArgumentList "/f `"$Destination`"" + } + else{ + # default destination folder is C:\SWSetup\SP<$number> + $output = Start-Process -Wait -PassThru "$downloadedFile" + } + + $result = $? + Write-Verbose -Message "Installation result: $result" + } + "silentinstall" { + # Get the silent install command from the metadata + if (!$info) { $info = Get-SoftpaqMetadata $number } + + $PostDownloadCmd = $info | Out-SoftpaqField -Field "silentinstall" + if($Destination){ + # the /f switch for SoftPaq executables = the runtime switch that + # overrides the default target path specified in build time + $output = Start-Process -Wait -PassThru "$downloadedFile" -ArgumentList "-s","-e cmd.exe","/f `"$Destination`"","-a","/c $PostDownloadCmd" + } + else{ + # default destination folder is C:\SWSetup\SP<$number> + $output = Start-Process -Wait -PassThru "$downloadedFile" -ArgumentList "-s","-e cmd.exe","-a","/c $PostDownloadCmd" + } + $result = $? + Write-Verbose -Message "Silent installation result: $result" + } + } + + # -PassThru switch for Start-Process allows us to get the process object output. Then, we can check the exit code of the + # SoftPaq executable to get the specific error code. This is more useful for debugging than just getting a boolean result. + Write-Verbose -Message "The $action process exited with return code: $($output.ExitCode)" + + Write-Verbose 'Post-download action processing complete' +} + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateAllowedHttpsProtocols { + [CmdletBinding()] + param() + + $c = [System.Net.SecurityProtocolType]([System.Net.SecurityProtocolType].GetEnumNames() | Where-Object { $_ -ne "Ssl3" -and $_ -ne "Tls" -and $_ -ne "Tls11" }) + Write-Verbose "Removing obsolete protocols SSL 3.0, TLS 1.0, and TLS 1.1; now supporting: $c" + $c +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateCacheDirPath { + + [CmdletBinding()] + param([System.IO.DirectoryInfo]$seed) + + if (-not $seed) { + $seed = [System.IO.Path]::GetTempPath() + "hp" + } + Join-Path -Path $seed -ChildPath "cache" + Write-Verbose "Local caching path is: $seed" +} + +# check authenticode signature +# check CVA and SoftPaq hash to determine download of the SoftPaq +# +# tests (remove these comments once we are happy with the function) +# +# PASS: Get-HPPrivateCheckSignature -file C:\windows\System32\notepad.exe -signedBy "Microsoft Windows" -Verbose +# PASS: Get-HPPrivateCheckSignature -file C:\windows\System32\notepad.exe -Verbose +# PASS: Get-HPPrivateCheckSignature -file .\sp99062.exe -CVAfile .\sp99062.cva -Verbose +# PASS: Get-HPPrivateCheckSignature -file .\sp99062.exe -CVAfile .\sp99062.cva -Verbose -signedBy "HP Inc." + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateCheckSignature { + [CmdletBinding()] + param( + [Parameter(Position = 0,Mandatory = $true)] + [string]$file, + + [Parameter(Mandatory = $false,Position = 1)] + [string]$CVAfile = $null, + + [Parameter(Mandatory = $false,Position = 2)] + [string]$signedBy = $null, + + [Parameter(Mandatory = $false,Position = 3)] + [switch]$Progress + + ) + + if ($Progress.IsPresent) { + Write-Progress -Activity "Checking integrity of $file" + } + + try { + + if ($file.StartsWith('\\?\')) { + $c = Get-AuthenticodeSignature -LiteralPath $file + } + else { + $c = Get-AuthenticodeSignature -FilePath $file + } + + if ($c.Status -ne "Valid") { + Write-Verbose ("$file is not signed or certificate is invalid.") + return $false + } + if ($signedBy) { + $signer = $c.SignerCertificate.Subject.Split(",")[0].trim().Split("=")[1] + + if ($signer -ne $signedBy) { + Write-Verbose ("$file is not signed by $signedBy; it is signed by $signer, failing.") + return $false + } + else { + Write-Verbose ("$file is signed by $signedBy.") + # return $true + } + } + + if ($CVAfile) { + Write-Verbose "Verifying '$file' using '$CVAFile'" + + $targetFile = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($file) + $targetCVA = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($CVAFile) + + # Getting hash value of CVA + $read_file = Get-HPPrivateReadINI -File $targetCVA + $CVA_SHA256 = $read_file | Out-SoftpaqField -Field SoftPaqSHA256 + + Write-Verbose "CVA has SHA-256 hash '$CVA_SHA256'" + if ($CVA_SHA256 -and $CVA_SHA256.Length -eq 64) { + Write-Verbose 'Checking EXE SHA-256 hash' + $EXE_SHA256 = (Get-FileHash -Path $targetFile -Algorithm SHA256).Hash + Write-Verbose "EXE has SHA256 hash: $EXE_SHA256" + + $sha256match = $CVA_SHA256 -eq $EXE_SHA256 + Write-Verbose "SHA-256 matched: $sha256match" + return $sha256match + } + else { + Write-Verbose 'This CVA file has no checksum value' + return $false + } + } + + # When only file is passed and it has valid signature + return $true + } + catch { + Write-Verbose "Had exception $($_.Exception.Message) during signature check" + return $false + } + finally { + if ($Progress.IsPresent) { + Write-Progress -Activity "Finished checking integrity of $file" -Completed + } + } +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Invoke-HPPrivateDeleteCachedItem { + [CmdletBinding()] + param([Parameter(Mandatory = $true)] $cab) + + Invoke-HPPrivateSafeRemove -Path $cab + Invoke-HPPrivateSafeRemove -Path "$cab.dir" -Recurse +} + + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Invoke-HPPrivateSafeRemove { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true,ValueFromPipelineByPropertyName = $true)] [string[]]$path, + [Parameter(Mandatory = $false)] [switch]$recurse + ) + foreach ($p in $path) { + if (Test-Path $p) { + Write-Verbose "Removing $p" + Remove-Item $p -Recurse:$recurse + } + } +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Invoke-HPPrivateExpandCAB { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true)] $cab, + [Parameter(Mandatory = $false)] $expectedFile # check for file inside expanded CAB + ) + Write-Verbose "Expanding CAB $cab to $cab.dir" + + $target = "$cab.dir" + Invoke-HPPrivateSafeRemove -Path $target -Recurse -Verbose:$VerbosePreference + Write-Verbose "Expanding $cab to $target" + $result = New-Item -Force $target -ItemType Directory + Write-Verbose "Created folder $result" + + $shell = New-Object -ComObject "Shell.Application" + $exception = $null + try { + if (!$?) { $(throw "unable to create $comObject object") } + $sourceCab = $shell.Namespace($cab).items() + $DestinationFolder = $shell.Namespace($target) + $DestinationFolder.CopyHere($sourceCab) + } + catch { + $exception = $_.Exception + } + finally { + [System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$shell) | Out-Null + [System.GC]::Collect() + [System.GC]::WaitForPendingFinalizers() + } + + if ($exception) { + throw "Failed to decompress $cab. $($exception.Message)." + } + + if ($expectedFile){ + + $downloadedOk = Test-Path $expectedFile + if ($downloadedOk -eq $false) { + throw "Invalid cab file, did not find $expectedFile in contents" + } + + return $expectedFile + } + +} + + +# check if a download is needed, based on file existence and the remote last-modified time + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Test-HPPrivateIsDownloadNeeded { + [CmdletBinding()] + param([Parameter(Mandatory = $true)] $url,[Parameter(Mandatory = $true)] $file) + + Write-Verbose "Checking if we need a new copy of $file" + + # $c = [System.Net.ServicePointManager]::SecurityProtocol + # Write-Verbose ("Allowed HTTPS protocols: $c") + [System.Net.ServicePointManager]::SecurityProtocol = Get-HPPrivateAllowedHttpsProtocols + $userAgent = Get-HPPrivateUserAgent + + # need to validate if $header can be generated, in other words if $url is legitimate + try { + $headers = (Invoke-WebRequest -Uri $url -UserAgent $userAgent -Method HEAD -UseBasicParsing).Headers + [datetime]$offered = [string]$headers["Last-Modified"] + Write-Verbose "File on server has timestamp $offered" + } + catch { + Write-Verbose "HTTPS request to $url failed: $($_.Exception.Message)" + throw + } + + $exists = Test-Path -Path $file -PathType leaf + if ($exists -eq $false) { + Write-Verbose "Cached file $file does not exist. Need to download new file." + $offered + $true + } + else { + [datetime]$have = (Get-Item $file).CreationTime + $r = ($have -lt $offered) + Write-Verbose "Cached file exists and has timestamp $have. Need to download: $r" + + $offered + $r + } +} + +# check if script is running on ISE + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Test-HPPrivateIsRunningOnISE { + [CmdletBinding()] + param() + + return $null -ne $(Get-Variable -Name psISE -ErrorAction Ignore) +} + +# check if long-path registry key is set + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Test-HPPrivateIsLongPathSupported { + [CmdletBinding()] + param() + + try { + return $(Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem\' -Name LongPathsEnabled).LongPathsEnabled -eq 1 + } + catch { + Write-Verbose "Error accessing registry entry LongPathsEnabled: $($_.Exception.Message)" + return $false + } +} + +# check if the downloaded xml file is corrupted. + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Test-HPPrivateIsValidXmlFile { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true)] $file + ) + + if (-not (Test-Path -Path $file)) { + Write-Verbose "File $file does not exist." + return $false + } + + # Check for Load or Parse errors when loading the XML file. + $xml = New-Object System.Xml.XmlDocument + try { + $xml.Load($file) + return $true + } + catch [System.Xml.XmlException]{ + Write-Verbose "Invalid XML file $file" + return $false + } +} + +# get temporary file name + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateTempFileName { + [CmdletBinding()] + param() + + $tempFileName = [System.IO.Path]::GetTempFileName() + $tempFileName = $tempFileName.TrimEnd('.tmp') + $tempFileName = $($tempFileName -Split '\\')[-1] + return $tempFileName +} + +# get hp temporary file path + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateTempPath { + [CmdletBinding()] + param() + + $tempPath = [System.IO.Path]::GetTempPath() + $tempPath = Join-Path -Path $tempPath -ChildPath 'hp' + return [System.IO.DirectoryInfo]$tempPath +} + +# get temporary file path + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateTempFilePath { + [CmdletBinding()] + param() + + [System.IO.DirectoryInfo]$tempPath = Join-Path -Path $([System.IO.Path]::GetTempPath()) -ChildPath 'hp' + $tempFileName = Get-HPPrivateTempFileName + return Join-Path -Path $tempPath.FullName -ChildPath $tempFileName +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateUserAgent () { + "CMSL $($MyInvocation.MyCommand.Module.Version)" +} + +# calculates CurrentOSVer + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function GetCurrentOSVer { + [CmdletBinding()] + param() + + try { + $result = [string](Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name DisplayVersion | Select-Object DisplayVersion).DisplayVersion + + if ($result -match '[0-9]{2}[hH][0-9]') { + $bits = $result.substring(0,2) + if ($bits -ge 21) { + # for DisplayVersion >= 21XX, use the DisplayVersion as OSVer + # convert OSVer to lower since the reference files have "21h1" in file name + return $result.ToLower() + } + } + } + catch { + Write-Verbose "Display Version not found. Fallback to ReleaseId." + } + + # If DisplayVersion isn't found or DisplayVersion < 21XX, use ReleaseId instead + $result = [string](Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name ReleaseID | Select-Object ReleaseID).ReleaseId + return $result +} + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateCurrentDisplayOSVer { + [CmdletBinding()] + param() + + if ([string][System.Environment]::OSVersion.Version.Build -gt 19041) { + $result = [string](Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name DisplayVersion | Select-Object DisplayVersion).DisplayVersion + } + else { + $result = [string](Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name ReleaseID | Select-Object ReleaseID).ReleaseId + } + + return $result +} + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function validateWmiResult { + [CmdletBinding()] + param([int]$code,[int]$category = 0xff) + + Write-Verbose "Validating error code $code for facility $category" + switch ($code) { + 0 {} + 0xea {} + 6 { throw [NotSupportedException]"Operation could not be completed. Please ensure this is a supported HP system." } + 5 { throw [ArgumentException]"Method called with invalid parameters." } + 4 { throw [UnauthorizedAccessException]"The caller does not have permissions to perform this operation." } + 0x1000 { throw [SystemException]"HP Secure Platform Management is not provisioned." } + 0x1c { throw [SystemException]"The request was not accepted by the BIOS." } + default { validateWmiResultInCategory -Category $category -code $code } + } +} + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function validateWmiResultInCategory { + [CmdletBinding()] + param([int]$category,[int]$code) + + switch ($category) { + 1 { + switch ($code) { + 0x40 { throw [NotSupportedException]"This system does not support firmware logs." } + 0x41 { throw [System.TimeoutException]"Call has timed out." } + default { throw [SystemException]"An unknown error $code has occured." } + } + } + 2 { + switch ($code) { + 0x0b { throw [UnauthorizedAccessException]"The caller does not have permissions to perform this operation." } + 0x0e { throw [UnauthorizedAccessException]"The operation could not be completed, possibly due to a bios password mismatch?" } + 0x0010 { throw [SystemException]"Invalid flash offset." } + 0x0012 { throw [SystemException]"Invalid flash checksum" } + 0x0013 { throw [InvalidOperationException]"Flash-in-progress error" } + 0x0014 { throw [InvalidOperationException]"Flash-in-progress not set" } + default { throw [SystemException]"An unknown error $code has occured." } + } + } + 3 { + switch ($code) { + # this facility doesn't define specific codes + default { throw [SystemException]"An unknown error $code has occured." } + } + } + 4 { + switch ($code) { + 0x0b { throw [UnauthorizedAccessException]"The caller does not have permissions to perform this operation." } + 0x03 { throw [NotSupportedException]"This system does not support HP Secure Platform Management or a hardware option is missing." } + 0x1001 { throw [SystemException]"HP Secure Platform Management is already provisioned." } + 0x1002 { throw [SystemException]"HP Secure Platform Management is in use. Deprovision all features that use the HP Secure Platform Management first." } + default { throw [SystemException]"An unknown error $code has occured." } + } + } + 5 { + switch ($code) { + 0x03 { throw [NotSupportedException]"This system does not support HP Sure Recover or there is a configuration issue." } + default { throw [SystemException]"An unknown error $code has occured." } + } + } + default { + throw [SystemException]"An unknown error $code has occured." + } + } +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Test-HPPrivateCustomResult { + [CmdletBinding()] + param([int]$result,[int]$mi_result,[int]$category) + Write-Verbose ("Checking result={0:x8}, mi_result={1:x8}, category={2:x4}" -f $result,$mi_result,$category) + switch ($result) { + 0 { Write-Verbose ("Operation succeeded.") } + 0x80000711 { validateWmiResult -code $mi_result -Category $category } # E_DFM_FAILED_WITH_EXTENDED_ERROR + 0x80000710 { throw [NotSupportedException]"Current platform does not support this operation." } # E_DFM_FEATURE_NOT_SUPPORTED + 0x8000070b { throw [System.IO.IOException]"Firmware file could not be read." } # E_DFM_FILE_ACCESS_FAILURE + 0x8000070e { throw [InvalidOperationException]"Firmware file is too long for expected flash type." } # E_DFM_FLASH_BUR_INPUT_DATA_TOO_LARGE + 0x80000712 { throw [InvalidOperationException]"The firmware does not mach the target platform." } # E_DFM_WRONG_FLASH_FILE + 0x80000714 { throw [OutOfMemoryException]"A memory allocation failed. The system may be out of memory." } # E_DFM_ALLOC_FAILED + 0x80000715 { throw [InvalidOperationException]"Password length is not valid." } # E_DFM_PASSWORD_SIZE_INVALID + 0x8000071a { throw [System.ArgumentException]"Invalid parameter for HP Sure View API" } + 1392 { throw [System.IO.IOException]"Could not copy the file to the system partition." } # ERROR_FILE_CORRUPT + 234 { Write-Verbose ("Operation succeeded.") } # MORE_DATA + default { throw [ComponentModel.Win32Exception]$result } + } + +} + + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Convert-HPPrivateObjectToBytes { + [CmdletBinding()] + param($obj) + + $mem = $null + $length = 0 + $bytes = $() + + + Write-Verbose "Converting object of type $($obj.Gettype()) to byte array" + try { + $length = [System.Runtime.InteropServices.Marshal]::SizeOf($obj) + $bytes = New-Object byte[] $length + Write-Verbose "Converting object of type $($obj.Gettype()) is $length bytes" + $mem = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($length) + + [System.Runtime.InteropServices.Marshal]::StructureToPtr($obj,$mem,$true) + [System.Runtime.InteropServices.Marshal]::Copy($mem,$bytes,0,$length) + ($bytes,$length) + } + finally { + # Free the memory we allocated for the struct value + if ($mem) { + Write-Verbose "Freeing allocated memory" + [System.Runtime.InteropServices.Marshal]::FreeHGlobal($mem) + } + } + Write-Verbose "Conversion complete." + +} + + +#region Cryptography + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivatePublicKeyCoalesce { + [CmdletBinding()] + param( + [System.IO.FileInfo]$file, + [psobject]$key + ) + + if ($file) { + $efile = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($file) + Write-Verbose "Coalescing to FILE PEM $efile" + $modulus = New-Object arr4k_t + $modulus_size = 4096 + $exponent = 0 + $mi_result = 0 + + $c = '[X509Utilities]::get_public_key_from_pem' + (Test-OSBitness) + '($efile,[ref]$modulus, [ref]$modulus_size, [ref]$exponent);' + $result = Invoke-Expression -Command $c + Test-HPPrivateCustomResult -result $result -mi_result $mi_result -Category 0x04 + New-Object -TypeName PSObject -Property @{ + Modulus = $modulus.raw[0..($modulus_size - 1)] + Exponent = $exponent + } + + } + else { + Write-Verbose "Coalescing to binary PEM" + $key + } + +} + + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateX509CertCoalesce { + [CmdletBinding()] + param( + [System.IO.FileInfo]$file, + [System.Security.Cryptography.X509Certificates.X509Certificate2]$cert, + [string]$password + ) + $param = @{} + if ($password) { + $param.Add("Password",(ConvertTo-SecureString -AsPlainText -Force $password)) + } + if ($file) { + $efile = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($file) + Write-Verbose "Coalescing to FILE certificate $efile" + $param.Add("FileName",$efile) + Get-HPPrivatePublicKeyCertificateFromPFX @param -Verbose:$VerbosePreference + } + else { + Write-Verbose "Coalescing to binary certificate" + $key = $cert.PublicKey.key + $parameters = $key.ExportParameters($false); + $mod_reversed = $parameters.Modulus + [array]::Reverse($mod_reversed) + New-Object -TypeName PSObject -Property @{ + Full = $Cert + Certificate = $cert.Export('Cert') + Modulus = $mod_reversed + Exponent = $parameters.Exponent + } + } +} + + +# get the PK from a PFX file + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivatePublicKeyCertificateFromPFX { + [CmdletBinding(DefaultParameterSetName = "FF")] + param( + [Parameter(Mandatory = $true,Position = 0)] + [string]$FileName, + + [Parameter(Mandatory = $false,Position = 1)] + [securestring]$Password + ) + + $certfile = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($FileName) + if (-not (Test-Path -PathType leaf -Path $certfile)) { + throw [System.IO.FileNotFoundException]"Certificate file '$certfile' could not be found" + } + Write-Verbose "Extracting public key from '$certfile'." + + try { + $cert = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList ($certfile,$Password,'Exportable') + $key = $cert.PublicKey.Key + $parameters = $key.ExportParameters($false); + + $mod_reversed = $parameters.Modulus + [array]::Reverse($mod_reversed) + New-Object -TypeName PSObject -Property @{ + Full = $cert + Certificate = $cert.Export('Cert') + Modulus = $mod_reversed + Exponent = $parameters.Exponent + } + } + finally { + #$cert.Dispose(); + #$cert = $null + } + +} + +# sign a byte array with a certificate provided in $Filename + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Invoke-HPPrivateSignData { + [CmdletBinding()] + param( + [System.Security.Cryptography.X509Certificates.X509Certificate2]$Certificate, + [byte[]]$Data + ) + $privKey = $Certificate.PrivateKey + if ($null -eq $privKey) { + Write-Error "Please provide an exportable key in the PFX file" + } + $params = $privKey.ExportParameters($true) + $cspParams = New-Object System.Security.Cryptography.CspParameters (24,"Microsoft Enhanced RSA and AES Cryptographic Provider") + $enhancedSignCsp = New-Object System.Security.Cryptography.RSACryptoServiceProvider ($cspParams) + $enhancedSignCsp.ImportParameters($params) + + $result = $enhancedSignCsp.SignData($Data,[System.Security.Cryptography.HashAlgorithmName]::SHA256,[System.Security.Cryptography.RSASignaturePadding]::Pkcs1) + [array]::Reverse($result) + return $result +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateHash { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true,Position = 0)] [byte[]]$data, + [Parameter(Mandatory = $false,Position = 1)] [string]$algo = "SHA256" + ) + $cp = [System.Security.Cryptography.HashAlgorithm]::Create($algo) + try { + $result = $cp.ComputeHash($data) + } + finally { + $cp.Dispose() + } + $result + +} +#endregion + +# Downloads files for when OfflineCacheMode is Enable +# If -platform is present : Downloads Advisory Data Files (XXXX_cds.cab) where XXXX is platform ID. +# also downloads the platform List + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateOfflineCacheFiles { + [CmdletBinding()] + param( + [string]$url, + [string]$filename, + [System.IO.DirectoryInfo]$cacheDirOffline = [System.IO.Path]::GetTempPath() + "hp", + [switch]$expand + ) + + $file = Get-HPPrivateTemporaryFileName -FileName $filename -cacheDir $cacheDirOffline + $filename = $filename.Replace("cab","xml") + $downloadedFile = "$file.dir\$filename" + + Write-Verbose "Checking if $url is available locally." + try { + $result = Test-HPPrivateIsDownloadNeeded -url $url -File $file -Verbose:$VerbosePreference + } + catch { + throw [System.Net.WebException]"Could not find data file $url" + } + + if ($result[1] -eq $true) { + Write-Verbose "$url is not local or is out of date, will download." + Write-Verbose "Cleaning cached data and downloading the data file." + Invoke-HPPrivateDeleteCachedItem -cab $file + Invoke-HPPrivateDownloadFile -url $url -Target $file -Verbose:$VerbosePreference + (Get-Item $file).CreationTime = ($result[0]) + (Get-Item $file).LastWriteTime = ($result[0]) + } + + if ($expand.IsPresent) { + # Need to make sure that the expanded data file exists and is not corrupted. + # Otherwise, expand the cab file. + if (-not (Test-Path $downloadedFile) -or (-not (Test-HPPrivateIsValidXmlFile -File $downloadedFile))) { + Write-Verbose "Extracting the data file and looking for $downloadedFile." + $file = Invoke-HPPrivateExpandCAB -cab $file -expectedFile $downloadedFile + } + } + return $downloadedFile +} + +# build URL for a remote item + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateItemUrl ( + [CmdletBinding()] + [int]$Number, + [string]$Ext, + [string]$Url) { + if ($url) { + return "$url/sp$number.$ext" + } + + [string]$baseNumber = $number.ToString() + [int]$last3Value = [int]($baseNumber.substring($baseNumber.Length - 3)) + [int]$blockStart = [int]($baseNumber.substring(0,$baseNumber.Length - 3)) + + [string]$block = "" + [int]$blockEnd = $blockStart + + if ($last3Value -gt 500) { + $blockEnd += 1 + $block = "$($blockStart)501-$($blockEnd)000" + } + else { + if ($last3Value -eq 0) { + $blockStart -= 1 + $block = "$($blockStart)501-$($blockEnd)000" + } + else { + $block = "$($blockStart)001-$($blockStart)500" + } + } + + return "https://ftp.hp.com/pub/softpaq/sp$block/sp$number.$ext" +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function biosErrorCodesToString ($code) { + switch ($code) { + 0 { return "OK" } + 1 { return "Not Supported" } + 2 { return "Unspecified error" } + 3 { return "Operation timed out" } + 4 { return "Operation failed or setting name is invalid" } + 5 { return "Invalid parameter" } + 6 { return "Access denied or incorrect password" } + 7 { return "Bios user already exists" } + 8 { return "Bios user not present" } + 9 { return "Bios user name too long" } + 10 { return "Password policy not met" } + 11 { return "Invalid keyboard layout" } + 12 { return "Too many users" } + 32768 { return "Security or password policy not met" } + default { return "Unknown error: $code" } + } +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function getBiosSettingInterface { + [CmdletBinding(DefaultParameterSetName = 'nNwSession')] + param( + [Parameter(ParameterSetName = 'NewSession',Position = 0,Mandatory = $false)] + [string]$Target = ".", + [Parameter(ParameterSetName = 'ReuseSession',Position = 1,Mandatory = $true)] + [CimSession]$CimSession + ) + $defaultAction = $ErrorActionPreference + $ns = getNamespace + $ErrorActionPreference = "Stop"; + + try { + Write-Verbose "Getting BIOS interface from '$target' for namespace '$ns'" + $params = @{ + Namespace = $ns + Class = "HPBIOS_BIOSSettingInterface" + } + + if ($CimSession) { + $params.Add("CimSession",$CimSession) + } + + if ($Target -and ($target -ne ".") -and -not $CimSession) { + $params.Add("ComputerName",$Target) + } + + + $result = Get-CimInstance @params -ErrorAction stop + if (-not $result) { throw [System.EntryPointNotFoundException]"Setting interface not found" } + } + catch { + Write-Error "Method failed: $($_.Exception.Message)" -ErrorAction stop + } + finally { + $ErrorActionPreference = $defaultAction + } + $result +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function getNamespace { + [CmdletBinding()] + param() + [string]$c = [environment]::GetEnvironmentVariable("HP_BIOS_NAMESPACE","User") + if (-not $c) { + return "root\HP\InstrumentedBIOS" + } + Write-Verbose ("Default BIOS namespace is overwritten via HP_BIOS_NAMESPACE Variable, to $c. This should only happen during development.") + return $c +} + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateSecurePlatformIsProvisioned +{ + [boolean]$status = $false + + try { + $result = Invoke-Expression -Command 'Get-HPSecurePlatformState' + + if ($result.State -eq "Provisioned") { + $status = $true + } + } + catch {} + + return $status +} + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateFileContent { + [CmdletBinding()] + param([System.IO.FileInfo]$File) + + $f = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($File) + + # Default encoding for PS5.1 is Default meaning the encoding that correpsonds to the system's active code page + # Default encoding for PS7.3 is utf8NoBOM + [string]$content = Get-Content -Encoding UTF8 -Raw -Path $f -ErrorAction Stop + + return $content +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateSettingsFromPayload { + [CmdletBinding()] + param([string]$Content) + $payload = $Content | ConvertFrom-Json + + if ($payload.purpose -ne "hp:sureadmin:biossettingslist") { + throw "The payload should be generated by New-HPSureAdminBIOSSettingValuePayload function" + } + + $data = [System.Text.Encoding]::UTF8.GetString($payload.Data) + $settingsList = (Get-HPPrivateSettingsFromJson $data) + + return $settingsList +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateSettingsFromPayloadFile { + [CmdletBinding()] + param([System.IO.FileInfo]$File) + $content = Get-HPPrivateFileContent $File + return Get-HPPrivateSettingsFromPayload $content +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateSettingsFromJsonFile { + [CmdletBinding()] + param([System.IO.FileInfo]$File) + [string]$content = Get-HPPrivateFileContent $File + return (Get-HPPrivateSettingsFromJson $content) +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateSettingsFromJson { + [CmdletBinding()] + param([string]$Content) + $list = $Content | ConvertFrom-Json + + $settingsList = New-Object System.Collections.Generic.List[SureAdminSetting] + foreach ($item in $list) { + $setting = New-Object -TypeName SureAdminSetting + $setting.Name = $item.Name + $setting.Value = $item.Value + if ("AuthString" -in $item.PSObject.Properties.Name) { + $setting.AuthString = $item.AuthString + } + $settingsList.Add($setting) + } + + return $settingsList +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateSettingsFromBcuFile { + [CmdletBinding()] + param([System.IO.FileInfo]$File) + $list = [ordered]@{} + $auth = @{} + $currset = "" + + Write-Verbose "Reading from file: $File" + switch -regex -File $File { + + '^;Signature=.*' { + # keeping compatibility with BCU tool + $c = $matches[0].trim() + $auth[$currset] = $c.substring(11) + } + + '^;AuthString=.*' { + $c = $matches[0].trim() + $auth[$currset] = $c.substring(12) + } + + '^\S.*$' { + $currset = $matches[0].trim() + if ($currset -ne "BIOSConfig 1.0" -and -not $currset.StartsWith(";")) { + $list[$currset] = New-Object System.Collections.Generic.List[System.String] + } + } + + '^\s.*$' { + # value (indented) + $c = $matches[0].trim() + $list[$currset].Add($c) + } + } + + $settingsList = New-Object System.Collections.Generic.List[SureAdminSetting] + foreach ($s in $list.keys) { + $setting = New-Object -TypeName SureAdminSetting + $setting.Name = $s + $setting.Value = Get-HPPrivateDesiredValue -Value $list[$s] + if ($auth.ContainsKey($s)) { + $setting.AuthString = $auth[$s] + } + $settingsList.Add($setting) + } + + return $settingsList +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateDesiredValue { + [CmdletBinding()] + param($Value) + + $desired = $null + + $list = $Value -split ',' + foreach ($v in $list) { + + if ($v.StartsWith("*")) { + # enum + $desired = $v.substring(1) + break + } + } + + if (-not $desired) { + # not an enum + if ($list.Count -eq 1) { + $desired = $list # a string or int + } + else { + $desired = $list -join ',' # an ordered list + } + } + + return $desired +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateSettingsFromCsvFile { + [CmdletBinding()] + param([System.IO.FileInfo]$File) + Write-Verbose "Reading CSV" + $content = Get-HPPrivateFileContent $File + $items = $content | ConvertFrom-Csv + + $settingsList = New-Object System.Collections.Generic.List[SureAdminSetting] + + foreach ($item in $items) { + $setting = New-Object -TypeName SureAdminSetting + $setting.Name = $item.Name + $setting.Value = (Get-HPPrivateDesiredValue $item.CURRENT_VALUE) + if ("AUTHSTRING" -in $item.PSObject.Properties.Name) { + $setting.AuthString = $item.AuthString + } + $settingsList.Add($setting) + } + + return $settingsList +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateSettingsFromXmlFile { + [CmdletBinding()] + param([System.IO.FileInfo]$File) + Write-Verbose "Reading XML" + $content = Get-HPPrivateFileContent $File + + try { + $entries = ([xml]$content).ImagePal.BIOSSettings.BIOSSetting + $settingsList = New-Object System.Collections.Generic.List[SureAdminSetting] + + foreach ($item in $entries) { + $setting = New-Object -TypeName SureAdminSetting + $setting.Name = $item.Name + $setting.Value = $item.Value + if ("AuthString" -in $item.PSObject.Properties.Name) { + # The XML parser adds an unwanted space in the tag BEAM + $setting.AuthString = $item.AuthString.InnerXml -replace "","" + } + $settingsList.Add($setting) + } + } + catch [System.Management.Automation.PropertyNotFoundException]{ + throw [System.FormatException]'Invalid XML file.' + } + + return $settingsList +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateSettingsFromFile { + [CmdletBinding()] + param( + [System.IO.FileInfo]$FileName, + [string]$Format + ) + [System.Collections.Generic.List[SureAdminSetting]]$settingsList = $null + + switch ($Format) { + { $_ -eq 'CSV' } { $settingsList = Get-HPPrivateSettingsFromCsvFile $FileName } + { $_ -eq 'XML' } { $settingsList = Get-HPPrivateSettingsFromXmlFile $FileName } + { $_ -eq 'JSON' } { $settingsList = Get-HPPrivateSettingsFromJsonFile $FileName } + { $_ -eq 'BCU' } { $settingsList = Get-HPPrivateSettingsFromBcuFile $FileName } + { $_ -eq 'payload' } { $settingsList = Get-HPPrivateSettingsFromPayloadFile $FileName } + default { throw [System.FormatException]"Format specifier not provided, and could not determine format from file extension" } + } + + return $settingsList +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Invoke-HPPrivateSetSetting { + [CmdletBinding(DefaultParameterSetName = 'NewSession')] + param( + [Parameter(ParameterSetName = 'NewSession',Position = 0,Mandatory = $true)] + [Parameter(ParameterSetName = 'ReuseSession',Position = 0,Mandatory = $true)] + [SureAdminSetting]$Setting, + [Parameter(ParameterSetName = 'NewSession',Position = 1,Mandatory = $false)] + [Parameter(ParameterSetName = 'ReuseSession',Position = 1,Mandatory = $false)] + [string]$Password, + [Parameter(ParameterSetName = 'NewSession',Position = 2,Mandatory = $false)] + [Parameter(ParameterSetName = 'ReuseSession',Position = 2,Mandatory = $false)] + $ErrorHandling = 0, + [Parameter(ParameterSetName = 'NewSession',Position = 3,Mandatory = $false)] + [Parameter(ParameterSetName = 'ReuseSession',Position = 3,Mandatory = $false)] + [Alias('Target')] + [string]$ComputerName = ".", + [Parameter(ParameterSetName = 'ReuseSession',Position = 4,Mandatory = $true)] + [CimSession]$CimSession, + [Parameter(ParameterSetName = 'NewSession',Position = 5,Mandatory = $false)] + [Parameter(ParameterSetName = 'ReuseSession',Position = 5,Mandatory = $false)] + [ref]$SingleSettingFailCounter + ) + $readOnly = 0 + $notFound = 0 + $alreadySet = 0 + $localCounter = 0 + + $s = $null + if (-not $CimSession) { $CimSession = newCimSession -Target $ComputerName } + + try { + $s = Get-HPBIOSSetting -Name $Setting.Name -CimSession $CimSession -ErrorAction stop + } + catch { + $notFound = 1 + $SingleSettingFailCounter.Value = 0 #matching BCU, even if setting not found exit with 0 + $err = $PSItem.ToString() + + Write-Verbose "'$Setting.Name': $err" + switch ($ErrorHandling) { + 0 { throw $err } + 1 { Write-Warning -Message "$err" } + 2 { Write-Verbose "Setting '$Setting.Name' could not be set, but ErrorHandling was set to 2 so error is quietly ignored" } + } + return $readOnly,$notFound,$alreadySet,$SingleSettingFailCounter.Value + } + + if ($s) { + switch ($s.CimClass.CimClassName) { + "HPBIOS_BIOSEnumeration" { + if ($s.CurrentValue -eq $Setting.Value) { + $alreadySet = 1 + Write-Host "Setting $($Setting.Name) is already set to $($Setting.Value)" + } + } + default { + if ($s.Value -eq $Setting.Value) { + $alreadySet = 1 + Write-Host "Setting $($Setting.Name) is already set to $($Setting.Value)" + } + } + } + + if ($alreadySet -eq $false) { + if ($s.IsReadOnly -eq 1) { $readOnly = 1 } + else { + if ($ErrorHandling -ne 1) { + Set-HPPrivateBIOSSetting -Setting $setting -password $Password -CimSession $CimSession -SkipPrecheck $true -ErrorHandling $ErrorHandling -actualSetFailCounter ([ref]$localCounter) -Verbose:$VerbosePreference + $SingleSettingFailCounter.Value = $localCounter + } + else { + try { + Set-HPPrivateBIOSSetting -Setting $setting -password $Password -CimSession $CimSession -SkipPrecheck $true -ErrorHandling $ErrorHandling -actualSetFailCounter ([ref]$localCounter) -Verbose:$VerbosePreference + } + catch { + $SingleSettingFailCounter.Value = $localCounter + $err = $PSItem.ToString() + } + } + } + } + } + + return $readOnly,$notFound,$alreadySet,$SingleSettingFailCounter.Value +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateUseAuthString { + [CmdletBinding()] + param( + [string]$SettingName + ) + + if ((Get-HPPrivateIsSureAdminEnabled) -eq $true -or $SettingName -eq "Enhanced BIOS Authentication Mode") { + return $true + } + + return $false +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Set-HPPrivateBIOSSetting { + [CmdletBinding()] + param( + $Setting, + [string]$ComputerName = ".", + [CimSession]$CimSession, + [switch]$SkipPrecheck, + [AllowEmptyString()] + [string]$Password, + $ErrorHandling, + [Parameter(Mandatory = $false)] + [ref]$actualSetFailCounter + ) + + $localCounterForSet = 0 + + if ($CimSession -eq $null) { + $CimSession = newCimSession -Target $ComputerName + } + + $Name = $Setting.Name + $Value = $Setting.Value + if ($Setting.AuthString -and (Get-HPPrivateUseAuthString -SettingName $Name) -eq $true) { + $authorization = $Setting.AuthString + Write-Verbose "Using authorization string" + } + else { + $authorization = "" + $Password + Write-Verbose "Using BIOS Setup password" + } + + if ($SkipPrecheck.IsPresent) { + Write-Verbose "Skipping pre-check" + + if ($Name -eq "Setup Password" -or $Name -eq "Power-On Password") { + $type = 'HPBIOS_BIOSPassword' + } + else { + $type = 'HPBIOS_Setting' + } + } + else { + $obj = Get-HPBIOSSetting -Name $name -CimSession $CimSession -ErrorAction stop + $type = $obj.CimClass.CimClassName + } + + $c = getBiosSettingInterface -CimSession $CimSession + switch ($type) { + { $_ -eq 'HPBIOS_BIOSPassword' } { + Write-Verbose "Setting Password setting '$Name' on '$ComputerName'" + $Arguments = @{ + Name = $Name + Value = "" + [string]$Value + Password = $authorization + } + $r = Invoke-CimMethod -InputObject $c -MethodName SetBiosSetting -Arguments $Arguments + } + + default { + Write-Verbose "Setting HP BIOS Setting '$Name' to value '$Value' on '$ComputerName'" + $Arguments = @{ + Name = $Name + Value = [string]$Value + Password = $authorization; + } + $r = Invoke-CimMethod -InputObject $c -MethodName SetBiosSetting -Arguments $Arguments + } + } + + if ($r.Return -eq 0) { + $message = "HP BIOS Setting $Name successfully set" + if ($Name -ne "Setup Password" -and $Name -ne "Power-On Password") { + $message += " to $Value" + } + Write-Host -ForegroundColor Green $message + } + if ($r.Return -ne 0) { + + $localCounterForSet++ + + if ($r.Return -eq 5) { + Write-Host -ForegroundColor Magenta "Operation failed. Please make sure that you are passing a valid value." + Write-Host -ForegroundColor Magenta "Some variable names or values may be case sensitive." + } + $Err = "$(biosErrorCodesToString($r.Return))" + if ($ErrorHandling -eq 1) { + Write-Host -ForegroundColor Red "$($setting.Name) failed to set due to $Err" + $actualSetFailCounter.Value = $localCounterForSet + } + throw $Err + } +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateIsSureAdminEnabled { + [CmdletBinding()] + param() + + [boolean]$status = $false + + if ((Get-HPPrivateIsSureAdminSupported) -eq $true) { + try { + $mode = (Get-HPBIOSSettingValue -Name "Enhanced BIOS Authentication Mode") + if ($mode -eq "Enable") { + $status = $true + } + } + catch {} + } + + return $status +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Get-HPPrivateIsSureAdminSupported { + [CmdletBinding()] + param() + + [boolean]$status = $false + try { + $mode = (Get-HPBIOSSettingValue -Name "Enhanced BIOS Authentication Mode") + $status = $true + } + catch {} + + return $status +} + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function newCimSession () { + [CmdletBinding()] + param + ( + [Parameter(Position = 0)] $SkipTestConnection = $true, + [Parameter(Position = 1)] $Protocol = 'DCOM', + [Parameter(Position = 2)] $target = '.', + [Parameter(Position = 3)] $SessionName = 'CMSLCimSession' + ) + + Write-Verbose "Creating new CimSession (Protocol= $Protocol, Computer=$Target)" + $opts = New-CimSessionOption -Protocol $Protocol + + $params = @{ + Name = $SessionName + SkipTestConnection = $SkipTestConnection + SessionOption = $opts + } + if ($Target -and ($Target -ne ".")) { + $params.Add("ComputerName",$target) + } + New-CimSession @params + +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Set-HPPrivateBIOSSettingsList { + [CmdletBinding()] + param( + [System.Collections.Generic.List[SureAdminSetting]]$settingsList, + [string]$Password, + [string]$ComputerName = ".", + $ErrorHandling = 2, + [CimSession]$CimSession, + [switch]$NoSummary + ) + + $failedToSet = 0 + + if (-not $CimSession) { + $CimSession = newCimSession -Target $ComputerName + } + + $counter = @(0,0,0,0,0) + foreach ($setting in $SettingsList) { + $counter[0]++ + $refParameter = 0 + + $params = @{ + Setting = $setting + ErrorHandling = $ErrorHandling + CimSession = $CimSession + Password = $Password + SingleSettingFailCounter = [ref]$refParameter + } + + $c = Invoke-HPPrivateSetSetting @params -Verbose:$VerbosePreference + $failedToSet += $refParameter + + $counter[1] += $c[0] + $counter[2] += $c[1] + $counter[3] += $c[2] + } + + + if ($counter -and (-not $NoSummary.IsPresent)) { + $summary = "Total: $($counter[0]), not found: $($counter[2]), different but read-only: $($counter[1]), already set: $($counter[3])" + Write-Output $summary + } + + if ($ErrorHandling -eq 1) { + if ($failedToSet -eq 0) { + return 0 + } + else { + return 13 + } + } +} + + +<# +.SYNOPSIS + This is a private command for internal use only + +.DESCRIPTION + This is a private command for internal use only + +.EXAMPLE + +.NOTES + - This is a private command for internal use only +#> +function Set-HPPrivateBIOSSettingsListPayload { + [CmdletBinding()] + param( + [Parameter(ParameterSetName = 'Payload',Position = 0,Mandatory = $true,ValueFromPipeline = $true)] + [string]$Payload, + $ErrorHandling = 2 + ) + + [System.Collections.Generic.List[SureAdminSetting]]$settingsList = Get-HPPrivateSettingsFromPayload -Content $Payload + + $params = @{ + SettingsList = $settingsList + ErrorHandling = $ErrorHandling + } + Set-HPPrivateBIOSSettingsList @params -Verbose:$VerbosePreference +} + + + +# SIG # Begin signature block +# MIIoHQYJKoZIhvcNAQcCoIIoDjCCKAoCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCvkeuMuMg4zBEx +# e734Z2uOMS3JxJEXoo8iBGyL88Q046CCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6TCCGeUCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIILMzgp9 +# qvv95sDUAyV1zk8mqFadtmPlOBGBFpdxKHPDMA0GCSqGSIb3DQEBAQUABIIBgDR+ +# cxIjFBQApN7X+fdbsZM1UqOWVlf3N6taDknkStl/qhuWS/PUOiCfYJrMQqUtMF3V +# Ep+Ur9MlJLmCQpUFa5IsU2c5gd9luTfL6fbNdXfYdaCT7+ZdgGKWN0w9k3/OEP4m +# uEY0Gr1NVEMq6WfnW/EJAlNBe7Mg/UDSQnm27hv+1/t5ALvly5UtYuxpP6ad9X7l +# ++X1pUGBaiZEXLqukN2hlCa6UiWSRuoojVaKgzR6PHRwXJpZlxGGtsn5UalyJ/97 +# SUcOdwMZqpeAvsKJBZc+RP2vwWpwYTinFzt1DgmUzILoVaeH5bryBmOysKZB9xTp +# ALmpT3mzBQqFllugIFrpsI2JwT0r4y7tR8pT+Rgt8nTEjdXEs4yD+fHmzE5K30xE +# wFJQJPfSWL9eyqucOQzBUxRMjeUGzvbnRHB/zrhT0MnSAE/i9FqPSxRYysSnqi2r +# MXw9qtgSIW1M5cNxAg3id0sAIJxqKXDualErWjCfr+/nl1bmBOCSUF38vwQjlKGC +# Fz8wghc7BgorBgEEAYI3AwMBMYIXKzCCFycGCSqGSIb3DQEHAqCCFxgwghcUAgED +# MQ8wDQYJYIZIAWUDBAIBBQAwdwYLKoZIhvcNAQkQAQSgaARmMGQCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCDUV0vUjebUzqrF/zInTXfZPEjifWeWv4v8 +# lWHRdfduPQIQVbs3H5YVmm3sMWFb5JZoLRgPMjAyNDA4MjcxNjU1NDhaoIITCTCC +# BsIwggSqoAMCAQICEAVEr/OUnQg5pr/bP1/lYRYwDQYJKoZIhvcNAQELBQAwYzEL +# MAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJE +# aWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBD +# QTAeFw0yMzA3MTQwMDAwMDBaFw0zNDEwMTMyMzU5NTlaMEgxCzAJBgNVBAYTAlVT +# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEgMB4GA1UEAxMXRGlnaUNlcnQgVGlt +# ZXN0YW1wIDIwMjMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjU0WH +# HYOOW6w+VLMj4M+f1+XS512hDgncL0ijl3o7Kpxn3GIVWMGpkxGnzaqyat0QKYoe +# YmNp01icNXG/OpfrlFCPHCDqx5o7L5Zm42nnaf5bw9YrIBzBl5S0pVCB8s/LB6Yw +# aMqDQtr8fwkklKSCGtpqutg7yl3eGRiF+0XqDWFsnf5xXsQGmjzwxS55DxtmUuPI +# 1j5f2kPThPXQx/ZILV5FdZZ1/t0QoRuDwbjmUpW1R9d4KTlr4HhZl+NEK0rVlc7v +# CBfqgmRN/yPjyobutKQhZHDr1eWg2mOzLukF7qr2JPUdvJscsrdf3/Dudn0xmWVH +# VZ1KJC+sK5e+n+T9e3M+Mu5SNPvUu+vUoCw0m+PebmQZBzcBkQ8ctVHNqkxmg4ho +# Yru8QRt4GW3k2Q/gWEH72LEs4VGvtK0VBhTqYggT02kefGRNnQ/fztFejKqrUBXJ +# s8q818Q7aESjpTtC/XN97t0K/3k0EH6mXApYTAA+hWl1x4Nk1nXNjxJ2VqUk+tfE +# ayG66B80mC866msBsPf7Kobse1I4qZgJoXGybHGvPrhvltXhEBP+YUcKjP7wtsfV +# x95sJPC/QoLKoHE9nJKTBLRpcCcNT7e1NtHJXwikcKPsCvERLmTgyyIryvEoEyFJ +# UX4GZtM7vvrrkTjYUQfKlLfiUKHzOtOKg8tAewIDAQABo4IBizCCAYcwDgYDVR0P +# AQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# IAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQYMBaAFLoW +# 2W1NhS9zKXaaL3WMaiCPnshvMB0GA1UdDgQWBBSltu8T5+/N0GSh1VapZTGj3tXj +# STBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln +# aUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3JsMIGQ +# BggrBgEFBQcBAQSBgzCBgDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl +# cnQuY29tMFgGCCsGAQUFBzAChkxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v +# RGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3J0 +# MA0GCSqGSIb3DQEBCwUAA4ICAQCBGtbeoKm1mBe8cI1PijxonNgl/8ss5M3qXSKS +# 7IwiAqm4z4Co2efjxe0mgopxLxjdTrbebNfhYJwr7e09SI64a7p8Xb3CYTdoSXej +# 65CqEtcnhfOOHpLawkA4n13IoC4leCWdKgV6hCmYtld5j9smViuw86e9NwzYmHZP +# VrlSwradOKmB521BXIxp0bkrxMZ7z5z6eOKTGnaiaXXTUOREEr4gDZ6pRND45Ul3 +# CFohxbTPmJUaVLq5vMFpGbrPFvKDNzRusEEm3d5al08zjdSNd311RaGlWCZqA0Xe +# 2VC1UIyvVr1MxeFGxSjTredDAHDezJieGYkD6tSRN+9NUvPJYCHEVkft2hFLjDLD +# iOZY4rbbPvlfsELWj+MXkdGqwFXjhr+sJyxB0JozSqg21Llyln6XeThIX8rC3D0y +# 33XWNmdaifj2p8flTzU8AL2+nCpseQHc2kTmOt44OwdeOVj0fHMxVaCAEcsUDH6u +# vP6k63llqmjWIso765qCNVcoFstp8jKastLYOrixRoZruhf9xHdsFWyuq69zOuhJ +# RrfVf8y2OMDY7Bz1tqG4QyzfTkx9HmhwwHcK1ALgXGC7KP845VJa1qwXIiNO9OzT +# F/tQa/8Hdx9xl0RBybhG02wyfFgvZ0dl5Rtztpn5aywGRu9BHvDwX+Db2a2QgESv +# gBBBijCCBq4wggSWoAMCAQICEAc2N7ckVHzYR6z9KGYqXlswDQYJKoZIhvcNAQEL +# BQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UE +# CxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBS +# b290IEc0MB4XDTIyMDMyMzAwMDAwMFoXDTM3MDMyMjIzNTk1OVowYzELMAkGA1UE +# BhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2Vy +# dCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMaGNQZJs8E9cklRVcclA8TykTep +# l1Gh1tKD0Z5Mom2gsMyD+Vr2EaFEFUJfpIjzaPp985yJC3+dH54PMx9QEwsmc5Zt +# +FeoAn39Q7SE2hHxc7Gz7iuAhIoiGN/r2j3EF3+rGSs+QtxnjupRPfDWVtTnKC3r +# 07G1decfBmWNlCnT2exp39mQh0YAe9tEQYncfGpXevA3eZ9drMvohGS0UvJ2R/dh +# gxndX7RUCyFobjchu0CsX7LeSn3O9TkSZ+8OpWNs5KbFHc02DVzV5huowWR0QKfA +# csW6Th+xtVhNef7Xj3OTrCw54qVI1vCwMROpVymWJy71h6aPTnYVVSZwmCZ/oBpH +# IEPjQ2OAe3VuJyWQmDo4EbP29p7mO1vsgd4iFNmCKseSv6De4z6ic/rnH1pslPJS +# lRErWHRAKKtzQ87fSqEcazjFKfPKqpZzQmiftkaznTqj1QPgv/CiPMpC3BhIfxQ0 +# z9JMq++bPf4OuGQq+nUoJEHtQr8FnGZJUlD0UfM2SU2LINIsVzV5K6jzRWC8I41Y +# 99xh3pP+OcD5sjClTNfpmEpYPtMDiP6zj9NeS3YSUZPJjAw7W4oiqMEmCPkUEBID +# fV8ju2TjY+Cm4T72wnSyPx4JduyrXUZ14mCjWAkBKAAOhFTuzuldyF4wEr1GnrXT +# drnSDmuZDNIztM2xAgMBAAGjggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBS6FtltTYUvcyl2mi91jGogj57IbzAfBgNVHSMEGDAWgBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUH +# AwgwdwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp +# Y2VydC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv +# bS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0 +# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3Js +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsF +# AAOCAgEAfVmOwJO2b5ipRCIBfmbW2CFC4bAYLhBNE88wU86/GPvHUF3iSyn7cIoN +# qilp/GnBzx0H6T5gyNgL5Vxb122H+oQgJTQxZ822EpZvxFBMYh0MCIKoFr2pVs8V +# c40BIiXOlWk/R3f7cnQU1/+rT4osequFzUNf7WC2qk+RZp4snuCKrOX9jLxkJods +# kr2dfNBwCnzvqLx1T7pa96kQsl3p/yhUifDVinF2ZdrM8HKjI/rAJ4JErpknG6sk +# HibBt94q6/aesXmZgaNWhqsKRcnfxI2g55j7+6adcq/Ex8HBanHZxhOACcS2n82H +# hyS7T6NJuXdmkfFynOlLAlKnN36TU6w7HQhJD5TNOXrd/yVjmScsPT9rp/Fmw0HN +# T7ZAmyEhQNC3EyTN3B14OuSereU0cZLXJmvkOHOrpgFPvT87eK1MrfvElXvtCl8z +# OYdBeHo46Zzh3SP9HSjTx/no8Zhf+yvYfvJGnXUsHicsJttvFXseGYs2uJPU5vIX +# mVnKcPA3v5gA3yAWTyf7YGcWoWa63VXAOimGsJigK+2VQbc61RWYMbRiCQ8KvYHZ +# E/6/pNHzV9m8BPqC3jLfBInwAM1dwvnQI38AC+R2AibZ8GV2QqYphwlHK+Z/GqSF +# D/yYlvZVVCsfgPrA8g4r5db7qS9EFUrnEw4d2zc4GqEr9u3WfPwwggWNMIIEdaAD +# AgECAhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYT +# AlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2Vy +# dC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0y +# MjA4MDEwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYD +# VQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAf +# BgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEB +# BQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4Smn +# PVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6f +# qVcWWVVyr2iTcMKyunWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O +# 7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZ +# Vu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4F +# fYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLm +# qaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMre +# Sx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/ch +# srIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+U +# DCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xM +# dT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUb +# AgMBAAGjggE6MIIBNjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAO +# BgNVHQ8BAf8EBAMCAYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRw +# Oi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRz +# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0f +# BD4wPDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNz +# dXJlZElEUm9vdENBLmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEM +# BQADggEBAHCgv0NcVec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLt +# pIh3bb0aFPQTSnovLbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouy +# XtTP0UNEm0Mh65ZyoUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jS +# TEAZNUZqaVSwuKFWjuyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAc +# AgPLILCsWKAOQGPFmCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2 +# h5b9W9FcrBjDTZ9ztwGpn1eqXijiuZQxggN2MIIDcgIBATB3MGMxCzAJBgNVBAYT +# AlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQg +# VHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OU +# nQg5pr/bP1/lYRYwDQYJYIZIAWUDBAIBBQCggdEwGgYJKoZIhvcNAQkDMQ0GCyqG +# SIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNDA4MjcxNjU1NDhaMCsGCyqGSIb3 +# DQEJEAIMMRwwGjAYMBYEFGbwKzLCwskPgl3OqorJxk8ZnM9AMC8GCSqGSIb3DQEJ +# BDEiBCCyR2EllVtZnEP5wyD3EfPGe3y79W+Na0r5UjazHHUwFDA3BgsqhkiG9w0B +# CRACLzEoMCYwJDAiBCDS9uRt7XQizNHUQFdoQTZvgoraVZquMxavTRqa1Ax4KDAN +# BgkqhkiG9w0BAQEFAASCAgBwVHPSur7Jwaxf0zlyQci/GdRk2Zr496jVce/Y1zGV +# 0ZI5hEBaSYuvkjJI2ECNSXAsa5+FJaSNBablqgyjfeWyT4JOD6pM36RC6l/ZVAmS +# WQWfLbAQ3xolSIAwa/97W7SSF1v5Uu2P3tBSEAf7AoL2hIS/BW8R1+fgJXqps4Ep +# fyYgX13SuXv4E10yGovfDdlREB3BgJj/ugHMxR8ZNzS2vS59DkjZUkDVdaNoV5Y1 +# c3gyACM8e3Otbfm+l6RMiIqcOmo20z0oZ2kL/v4BnshdeAQQEDzc3NvuAmmnkEHT +# THebloIG+1ghN4vRftPQRVXcwISXah713r+h+B5otnWruMm8oJCvXqKH96x6ezYw +# VV8ylbSqciopSf35tLPcFaQCz6/VnmTyv+XZRR4w662Ky5xsS8HSheK4OqJUlRtL +# SccOGvn7ora9ztEIpT5/GUDXLISJvWSMOMUw+ngrOGJF3X46CMG2FhgOpwKeb6jt +# 9L94IetOxMUaagAaMEfmXGBBEz5fn6TmCPOYqFXKkSkJTKIZJOcd5SxyOVqBqLIf +# I34dbbxEj/J7K9Uk1iA2+cFV9EaEsayOLBnbEh2fJJGXtqDsmlA3EUZzowuygO6O +# FmzgU5IVDoCtrE7YPJgEHJR2MvzmoNZaeGGhGqCcxEmXUhGs6luC6FB2iKnYc889 +# Jw== +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Private/Microsoft.Identity.Client.dll b/Bios-Update-HP-v2.0/module/HP.Private/Microsoft.Identity.Client.dll new file mode 100644 index 0000000..1474604 Binary files /dev/null and b/Bios-Update-HP-v2.0/module/HP.Private/Microsoft.Identity.Client.dll differ diff --git a/Bios-Update-HP-v2.0/module/HP.Private/System.Security.Cryptography.ProtectedData.dll b/Bios-Update-HP-v2.0/module/HP.Private/System.Security.Cryptography.ProtectedData.dll new file mode 100644 index 0000000..47ce37d Binary files /dev/null and b/Bios-Update-HP-v2.0/module/HP.Private/System.Security.Cryptography.ProtectedData.dll differ diff --git a/Bios-Update-HP-v2.0/module/HP.Private/dfmbios32.dll b/Bios-Update-HP-v2.0/module/HP.Private/dfmbios32.dll new file mode 100644 index 0000000..3a0dae9 Binary files /dev/null and b/Bios-Update-HP-v2.0/module/HP.Private/dfmbios32.dll differ diff --git a/Bios-Update-HP-v2.0/module/HP.Private/dfmbios64.dll b/Bios-Update-HP-v2.0/module/HP.Private/dfmbios64.dll new file mode 100644 index 0000000..ddb4b6c Binary files /dev/null and b/Bios-Update-HP-v2.0/module/HP.Private/dfmbios64.dll differ diff --git a/Bios-Update-HP-v2.0/module/HP.Private/license.txt b/Bios-Update-HP-v2.0/module/HP.Private/license.txt new file mode 100644 index 0000000..b93ca37 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Private/license.txt @@ -0,0 +1,248 @@ +End-User License Agreement + +READ CAREFULLY BEFORE USING THIS SOFTWARE + +This End-User license Agreement ("EULA") is a legal agreement +between (a) you (either an individual or a single entity) and (b) HP Inc. +("HP") that governs your use of any Software Product, installed on or +made available by HP for use with your HP product ("HP Product"), that +is not otherwise subject to a separate license agreement between you +and HP or its suppliers. Other software may contain a EULA in its online +documentation. The term "Software Product" means computer software +and may include associated media, printed materials and "online" or +electronic documentation. + +An amendment or addendum to this EULA may accompany the HP +Product. + +RIGHTS IN THE SOFTWARE PRODUCT ARE OFFERED ONLY ON THE +CONDITION THAT YOU AGREE TO ALL TERMS AND CONDITIONS OF +THIS EULA. BY INSTALLING, COPYING, DOWNLOADING, OR +OTHERWISE USING THE SOFTWARE PRODUCT, YOU AGREE TO BE +BOUND BY THE TERMS OF THIS EULA. IF YOU DO NOT ACCEPT THESE +LICENSE TERMS, YOUR SOLE REMEDY IS TO RETURN THE ENTIRE +UNUSED PRODUCT (HARDWARE AND SOFTWARE) WITHIN 14 DAYS +FOR A REFUND SUBJECT TO THE REFUND POLICY OF YOUR PLACE OF +PURCHASE. + +1. GRANT OF LICENSE. HP grants you the following rights provided +you comply with all terms and conditions of this EULA: + +a. Use. You may use the Software Product on a single computer ("Your +Computer"). If the Software Product is provided to you via the internet +and was originally licensed for use on more than one computer, you +may install and use the Software Product only on those computers. You +may not separate component parts of the Software Product for use on +more than one computer. You do not have the right to distribute the +Software Product. You may load the Software Product into Your +Computer's temporary memory (RAM) for purposes of using the +Software Product. + +b. Storage. You may copy the Software Product into the local memory +or storage device of the HP Product. + +c. Copying. You may make archival or back-up copies of the Software +Product, provided the copy contains all of the original Software +Product's proprietary notices and that it is used only for back-up +purposes. + +d. Reservation of Rights. HP and its suppliers reserve all rights not +expressly granted to you in this EULA. + +e. Freeware. Notwithstanding the terms and conditions of this EULA, all +or any portion of the Software Product which constitutes non- +proprietary HP software or software provided under public license by +third parties ("Freeware"), is licensed to you subject to the terms and +conditions of the software license agreement accompanying such +Freeware whether in the form of a discrete agreement, shrink wrap +license or electronic license terms accepted at time of download. Use of +the Freeware by you shall be governed entirely by the terms and +conditions of such license. + +f. Recovery Solution. Any software recovery solution provided with/for +your HP Product, whether in the form of a hard disk drive-based +solution, an external media-based recovery solution (e.g. floppy disk, +CD or DVD) or an equivalent solution delivered in any other form, may +only be used for restoring the hard disk of the HP Product with/for +which the recovery solution was originally purchased. The use of any +Microsoft operating system software contained in such recovery +solution shall be governed by the Microsoft License Agreement. + +2. UPGRADES. To use a Software Product identified as an upgrade, +you must first be licensed for the original Software Product identified +by HP as eligible for the upgrade. After upgrading, you may no longer +use the original Software Product that formed the basis for your +upgrade eligibility. By using the Software Product, you also agree that +HP may automatically access your HP Product when connected to the +internet to check the version or status of certain Software Products and +may automatically download and install upgrades or updates to such +Software Products on to your HP Product to provide new versions or +updates required to maintain the functionality, performance, or security +of the HP Software and your HP Product and facilitate the provision of +support or other services provided to you. In certain cases, and +depending on the type of upgrade or update, notifications will be +provided to you (via pop-up or other means), which may require you to +initiate the upgrade or update. + +3. ADDITIONAL SOFTWARE. This EULA applies to updates or +supplements to the original Software Product provided by HP unless +HP provides other terms along with the update or supplement. In case +of a conflict between such terms, the other terms will prevail. + +4. TRANSFER. + +a. Third Party. The initial user of the Software Product may make a +one-time transfer of the Software Product to another end user. Any +transfer must include all component parts, media, printed materials, +this EULA, and if applicable, the Certificate of Authenticity. The transfer +may not be an indirect transfer, such as a consignment. Prior to the +transfer, the end user receiving the transferred product must agree to +all the EULA terms. Upon transfer of the Software Product, your license +is automatically terminated. + +b. Restrictions. You may not rent, lease or lend the Software Product or +use the Software Product for commercial timesharing or bureau use. +You may not sublicense, assign or transfer the license or Software +Product except as expressly provided in this EULA. + +5. PROPRIETARY RIGHTS. All intellectual property rights in the +Software Product and user documentation are owned by HP or its +suppliers and are protected by law, including but not limited to United +States copyright, trade secret, and trademark law, as well as other +applicable laws and international treaty provisions. You shall not +remove any product identification, copyright notices or proprietary +restrictions from the Software Product. + +6. LIMITATION ON REVERSE ENGINEERING. You may not reverse +engineer, decompile, or disassemble the Software Product, except and +only to the extent that the right to do so is mandated under applicable +law notwithstanding this limitation or it is expressly provided for in this +EULA. + +7. TERM. This EULA is effective unless terminated or rejected. This +EULA will also terminate upon conditions set forth elsewhere in this +EULA or if you fail to comply with any term or condition of this EULA. + +8. CONSENT TO COLLECTION/USE OF DATA. + +a. HP will use cookies and other web technology tools to collect +anonymous technical information related to HP Software and your HP +Product. This data will be used to provide the upgrades and related +support or other services described in Section 2. HP will also collect +personal information including your Internet Protocol address or other +unique identifier information associated with your HP Product and data +provided by you on registration of your HP Product. As well as +providing the upgrades and related support or other services, this data +will be used for sending marketing communications to you (in each +case with your express consent where required by applicable law). +To the extent permitted by applicable law, by accepting these terms +and conditions you consent to the collection and use of anonymous +and personal data by HP, its subsidiaries, and affiliates as described in +this EULA and as further described in HP�s privacy policy +www.hp.com/go/privacy + +b. Collection/Use by Third Parties. Certain software programs included +in your HP Product are provided and separately licensed to you by third +party providers (�Third Party Software�). Third Party Software may be +installed and operational on your HP Product even if you choose not to +activate/purchase such software. Third Party Software may collect and +transmit technical information about your system (i.e., IP address, +unique device identifier, software version installed, etc.) and other +system data. This information is used by the third party to identify +technical system attributes and ensure that the most current version of +the software has been installed on your system. If you do not want the +Third Party Software to collect this technical information or +automatically send you version updates, you should uninstall the +software prior to connecting to the Internet. + +9. DISCLAIMER OF WARRANTIES. TO THE MAXIMUM EXTENT +PERMITTED BY APPLICABLE LAW, HP AND ITS SUPPLIERS PROVIDE THE +SOFTWARE PRODUCT �AS IS� AND WITH ALL FAULTS, AND HEREBY +DISCLAIM ALL OTHER WARRANTIES, GUARANTEES, AND CONDITIONS, +EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT +LIMITED TO, WARRANTIES OF TITLE AND NON-INFRINGEMENT, ANY +IMPLIED WARRANTIES, DUTIES, GUARANTEES, OR CONDITIONS OF +MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A +PARTICULAR PURPOSE, AND OF LACK OF VIRUSES ALL WITH REGARD +TO THE SOFTWARE PRODUCT. Some states/jurisdictions do not allow +exclusion of implied warranties or limitations on the duration of implied +warranties, so the above disclaimer may not apply to you in its entirety. +IN AUSTRALIA AND NEW ZEALAND, THE SOFTWARE COMES WITH +GUARANTEES THAT CANNOT BE EXCLUDED UNDER AUSTRALIAN AND +NEW ZEALAND CONSUMER LAWS. AUSTRALIAN CONSUMERS ARE +ENTITLED TO A REPLACEMENT OR A REFUND FOR A MAJOR FAILURE +AND COMPENSATION FOR OTHER REASONABLY FORESEEABLE LOSS +OR DAMAGE. AUSTRALIAN CONSUMERS ARE ALSO ENTITLED TO +HAVE THE SOFTWARE REPAIRED OR REPLACED IF IT FAILS TO BE OF +ACCEPTABLE QUALITY AND THE FAILURE DOES NOT AMOUNT TO A +MAJOR FAILURE. NEW ZEALAND CONSUMERS WHO ARE PURCHASING +GOODS FOR PERSONAL, DOMESTIC OR HOUSEHOLD USE OR +CONSUMPTION AND NOT FOR THE PURPOSE OF A BUSINESS (�NEW +ZEALAND CONSUMERS�) ARE ENTITLED TO REPAIR, REPLACEMENT OR +REFUND FOR A FAILURE AND COMPENSATION FOR OTHER +REASONABLY FORESEEABLE LOSS OR DAMAGE. + +10. LIMITATION OF LIABILITY. Subject to local law, notwithstanding +any damages that you might incur, the entire liability of HP and any of +its suppliers under any provision of this EULA and your exclusive +remedy for all of the foregoing shall be limited to the greater of the +amount actually paid by you separately for the Software Product or U.S. +$5.00. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN +NO EVENT SHALL HP OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, +INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES +WHATSOEVER, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR +LOSS OF PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR +BUSINESS INTERRUPTION, FOR PERSONAL INJURY, FOR LOSS OF +PRIVACY ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF +OR INABILITY TO USE THE SOFTWARE PRODUCT, OR OTHERWISE IN +CONNECTION WITH ANY PROVISION OF THIS EULA, EVEN IF HP OR +ANY SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES AND EVEN IF THE REMEDY FAILS OF ITS ESSENTIAL +PURPOSE. Some states/jurisdictions do not allow the exclusion or +limitation of incidental or consequential damages, so the above +limitation or exclusion may not apply to you. + +11. U.S. GOVERNMENT CUSTOMERS. Consistent with FAR 12.211 +and 12.212, Commercial Computer Software, Computer Software +Documentation, and Technical Data for Commercial Items are licensed +to the U.S. Government under HP's standard commercial license. + +12. COMPLIANCE WITH EXPORT LAWS. You shall comply with all +laws and regulations of the United States and other countries ("Export +Laws") to assure that the Software Product is not (1) exported, directly +or indirectly, in violation of Export Laws, or (2) used for any purpose +prohibited by Export Laws, including, without limitation, nuclear, +chemical, or biological weapons proliferation. + +13. CAPACITY AND AUTHORITY TO CONTRACT. You represent that +you are of the legal age of majority in your state of residence and, if +applicable, you are duly authorized by your employer to enter into this +contract. + +14. APPLICABLE LAW. This EULA is governed by the laws of the +country in which the equipment was purchased. + +15. ENTIRE AGREEMENT. This EULA (including any addendum or +amendment to this EULA which is included with the HP Product) is the +entire agreement between you and HP relating to the Software Product +and it supersedes all prior or contemporaneous oral or written +communications, proposals and representations with respect to the +Software Product or any other subject matter covered by this EULA. To +the extent the terms of any HP policies or programs for support +services conflict with the terms of this EULA, the terms of this EULA +shall control. + +�Copyright 2018-2024 HP Development Company, L.P.. + +The information contained herein is subject to change without notice. +All other product names mentioned herein may be trademarks of their +respective companies. To the extent permitted by applicable law, the +only warranties for HP products and services are set forth in the express +warranty statements accompanying such products and services. +Nothing herein should be construed as constituting an additional +warranty. To the extent permitted by applicable law, HP shall not be +liable for technical or editorial errors or omissions contained herein. + +First Edition: August 2015 +817678-001 + diff --git a/Bios-Update-HP-v2.0/module/HP.Repo/HP.Repo.psd1 b/Bios-Update-HP-v2.0/module/HP.Repo/HP.Repo.psd1 new file mode 100644 index 0000000..1cd4222 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Repo/HP.Repo.psd1 @@ -0,0 +1,287 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + + +@{ + + # Script module or binary module file associated with this manifest. + RootModule = 'HP.Repo.psm1' + + + # Author of this module + Author = 'HP Development Company, L.P.' + + # ID used to uniquely identify this module + GUID = 'df713360-19e2-481c-8bcb-f8b4bf70c08b' + + # Version number of this module. + #FullModuleVersion = '1.7.2.774' + ModuleVersion = '1.7.2' + + # Company or vendor of this module + CompanyName = 'HP Inc' + + # Copyright statement for this module + Copyright = '(C) Copyright 2018-2024 HP Development Company, L.P.' + + # Description of the functionality provided by this module + Description = 'Softpaq repository management modules' + + # Minimum version of the Windows PowerShell engine required by this module + PowerShellVersion = '5.1' + + + FunctionsToExport = + 'Add-RepositoryFilter', + 'Add-RepositorySyncFailureRecipient', + 'Clear-RepositoryNotificationConfiguration', + 'Get-RepositoryConfiguration', + 'Get-RepositoryInfo', + 'Get-RepositoryNotificationConfiguration', + 'Initialize-Repository', + 'Invoke-RepositoryCleanup', + 'Invoke-RepositorySync', + 'Remove-RepositoryFilter', + 'Remove-RepositorySyncFailureRecipient', + 'Set-RepositoryConfiguration', + 'Set-RepositoryNotificationConfiguration', + 'Show-RepositoryNotificationConfiguration', + 'Test-RepositoryNotificationConfiguration', + 'New-RepositoryReport' + + + PrivateData = @{ + PSData = @{ + LicenseUri = 'https://developers.hp.com/node/11493' + RequireLicenseAcceptance = $true + } # End of PSData hashtable + } # End of PrivateData hashtable + +} + + +# SIG # Begin signature block +# MIIoHgYJKoZIhvcNAQcCoIIoDzCCKAsCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCB8lluPnMExPSRb +# 8eGG1/UrkX2RyuoGwbDcZYcZMJwLuqCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6jCCGeYCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIGsGoLWG +# AG0ZbQT4Zda+MwvPHsyyEWHGJQaRTJL76kzKMA0GCSqGSIb3DQEBAQUABIIBgKL9 +# BMN3VQp9a/A8osfezgNtoLnEDTSI40tnnuTgpIH0+k0ctwoBckcms5y8OLXONyiC +# 4K0Zkp3Q4qnwOO6i9lSPgbRryawd9chr+yUFfmqd/mbKmluBbEc7hioNfN2bmd1w +# UzsXKWjPlLGVL/+QSLjberEZUKgS6Skc9Heyp6eSbVex9GHLsYkzhaDJJHrPlUjK +# prSuyt9mxHOB2yEmxn0S96tJ9HHMKyd5UiKEYX49LPUGtLirhIa9BcSmHWqvSDHr +# mGiGWIK5ylesVStMrPN0aF77nVJQaJgIFXgbZY4aE+B6Ri9UnbHUnR+ARS850otX +# JhvAlc1oc+equL9z7zlbRcMCkE15NBYY+x2FVskFFKW7qX/mySUkZJib7G254Zbl +# zU7I7NIe0bhkbnY6QhqjmeLKcyZvuQKfaqTax4W1t2uQ3Ou2lX/xW0U6z2h+uWyb +# qHnUx/9t8JrKGDo803RbPn7fhnKkctL07xlxdp2Iu0ExH3zuYKi6huD8Lp66B6GC +# F0Awghc8BgorBgEEAYI3AwMBMYIXLDCCFygGCSqGSIb3DQEHAqCCFxkwghcVAgED +# MQ8wDQYJYIZIAWUDBAIBBQAweAYLKoZIhvcNAQkQAQSgaQRnMGUCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCDXg040CUQ+iAnbIbywcRYOGzWB3k0wafEF +# n2IhxtkUQgIRAOAWS6fz2eUrvE6lWdOPJIMYDzIwMjQwODI3MTY1NTUwWqCCEwkw +# ggbCMIIEqqADAgECAhAFRK/zlJ0IOaa/2z9f5WEWMA0GCSqGSIb3DQEBCwUAMGMx +# CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMy +# RGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcg +# Q0EwHhcNMjMwNzE0MDAwMDAwWhcNMzQxMDEzMjM1OTU5WjBIMQswCQYDVQQGEwJV +# UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xIDAeBgNVBAMTF0RpZ2lDZXJ0IFRp +# bWVzdGFtcCAyMDIzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo1NF +# hx2DjlusPlSzI+DPn9fl0uddoQ4J3C9Io5d6OyqcZ9xiFVjBqZMRp82qsmrdECmK +# HmJjadNYnDVxvzqX65RQjxwg6seaOy+WZuNp52n+W8PWKyAcwZeUtKVQgfLPywem +# MGjKg0La/H8JJJSkghraarrYO8pd3hkYhftF6g1hbJ3+cV7EBpo88MUueQ8bZlLj +# yNY+X9pD04T10Mf2SC1eRXWWdf7dEKEbg8G45lKVtUfXeCk5a+B4WZfjRCtK1ZXO +# 7wgX6oJkTf8j48qG7rSkIWRw69XloNpjsy7pBe6q9iT1HbybHLK3X9/w7nZ9MZll +# R1WdSiQvrCuXvp/k/XtzPjLuUjT71Lvr1KAsNJvj3m5kGQc3AZEPHLVRzapMZoOI +# aGK7vEEbeBlt5NkP4FhB+9ixLOFRr7StFQYU6mIIE9NpHnxkTZ0P387RXoyqq1AV +# ybPKvNfEO2hEo6U7Qv1zfe7dCv95NBB+plwKWEwAPoVpdceDZNZ1zY8SdlalJPrX +# xGshuugfNJgvOuprAbD3+yqG7HtSOKmYCaFxsmxxrz64b5bV4RAT/mFHCoz+8LbH +# 1cfebCTwv0KCyqBxPZySkwS0aXAnDU+3tTbRyV8IpHCj7ArxES5k4MsiK8rxKBMh +# SVF+BmbTO77665E42FEHypS34lCh8zrTioPLQHsCAwEAAaOCAYswggGHMA4GA1Ud +# DwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATAfBgNVHSMEGDAWgBS6 +# FtltTYUvcyl2mi91jGogj57IbzAdBgNVHQ4EFgQUpbbvE+fvzdBkodVWqWUxo97V +# 40kwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp +# Z2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNybDCB +# kAYIKwYBBQUHAQEEgYMwgYAwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj +# ZXJ0LmNvbTBYBggrBgEFBQcwAoZMaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t +# L0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNy +# dDANBgkqhkiG9w0BAQsFAAOCAgEAgRrW3qCptZgXvHCNT4o8aJzYJf/LLOTN6l0i +# kuyMIgKpuM+AqNnn48XtJoKKcS8Y3U623mzX4WCcK+3tPUiOuGu6fF29wmE3aEl3 +# o+uQqhLXJ4Xzjh6S2sJAOJ9dyKAuJXglnSoFeoQpmLZXeY/bJlYrsPOnvTcM2Jh2 +# T1a5UsK2nTipgedtQVyMadG5K8TGe8+c+njikxp2oml101DkRBK+IA2eqUTQ+OVJ +# dwhaIcW0z5iVGlS6ubzBaRm6zxbygzc0brBBJt3eWpdPM43UjXd9dUWhpVgmagNF +# 3tlQtVCMr1a9TMXhRsUo063nQwBw3syYnhmJA+rUkTfvTVLzyWAhxFZH7doRS4wy +# w4jmWOK22z75X7BC1o/jF5HRqsBV44a/rCcsQdCaM0qoNtS5cpZ+l3k4SF/Kwtw9 +# Mt911jZnWon49qfH5U81PAC9vpwqbHkB3NpE5jreODsHXjlY9HxzMVWggBHLFAx+ +# rrz+pOt5Zapo1iLKO+uagjVXKBbLafIymrLS2Dq4sUaGa7oX/cR3bBVsrquvczro +# SUa31X/MtjjA2Owc9bahuEMs305MfR5ocMB3CtQC4Fxguyj/OOVSWtasFyIjTvTs +# 0xf7UGv/B3cfcZdEQcm4RtNsMnxYL2dHZeUbc7aZ+WssBkbvQR7w8F/g29mtkIBE +# r4AQQYowggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqGSIb3DQEB +# CwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNV +# BAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQg +# Um9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMxCzAJBgNV +# BAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNl +# cnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggIi +# MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXHJQPE8pE3 +# qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMfUBMLJnOW +# bfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w1lbU5ygt +# 69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRktFLydkf3 +# YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYbqMFkdECn +# wHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUmcJgmf6Aa +# RyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP65x9abJTy +# UpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzKQtwYSH8U +# NM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo80VgvCON +# WPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjBJgj5FBAS +# A31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXcheMBK9Rp61 +# 03a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAd +# BgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF +# BwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln +# aWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJo +# dHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy +# bDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQEL +# BQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd4ksp+3CK +# Daopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiCqBa9qVbP +# FXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl/Yy8ZCaH +# bJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeCRK6ZJxur +# JB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYTgAnEtp/N +# h4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/a6fxZsNB +# zU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37xJV77Qpf +# MzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmLNriT1Oby +# F5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0YgkPCr2B +# 2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJRyvmfxqk +# hQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIFjTCCBHWg +# AwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +# EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +# cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcN +# MjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEVMBMG +# A1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +# HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqGSIb3DQEB +# AQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +# pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+ +# n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYykt +# zuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw +# 2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6Qu +# BX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC +# 5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK +# 3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3 +# IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEP +# lAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98 +# THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t9dmpsh3l +# GwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8w +# DgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0 +# cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0 +# cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MEUGA1Ud +# HwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz +# c3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAowCDAGBgRVHSAAMA0GCSqGSIb3DQEB +# DAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9mqyhhyzshV6pGrsi+IcaaVQi +# 7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxSA8hO0Cre+i1Wz/n096wwepqL +# sl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE1Od/6Fmo8L8vC6bp8jQ87PcDx4eo +# 0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSMb++hUD38dglohJ9vytsgjTVg +# HAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbObyMt9H5xaiNrIv8SuFQtJ37YOtnw +# toeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMYIDdjCCA3ICAQEwdzBjMQswCQYDVQQG +# EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0 +# IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAFRK/z +# lJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUAoIHRMBoGCSqGSIb3DQEJAzENBgsq +# hkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwODI3MTY1NTUwWjArBgsqhkiG +# 9w0BCRACDDEcMBowGDAWBBRm8CsywsLJD4JdzqqKycZPGZzPQDAvBgkqhkiG9w0B +# CQQxIgQgtcKnPwNv2UtsPpyIAELejgbwpPugfkmtdxLqlf8TUS4wNwYLKoZIhvcN +# AQkQAi8xKDAmMCQwIgQg0vbkbe10IszR1EBXaEE2b4KK2lWarjMWr00amtQMeCgw +# DQYJKoZIhvcNAQEBBQAEggIARHkqncRG3Y6AU90rRQsdLKgSzawGwlLK4tLwoc4T +# 0T04HodrLhKAf7fempnpbRncA4YYORqCH5/AudsV+YB+i/QOSNDnKZ6HUNKwXwDa +# ySA3iYS44zNCQ/QRtKnu50IhLfGJwICxcSSP7Maz3nFQMbV5mnP1QON0SbUHwdvg +# OckAqFPIxTtM6g+Ge59LvS1Sy7nim63AmOnIocUIQUAt70yFmy0DLkD4ske0cjf1 +# HIdgIiZHkfTAGoorktwbuw7IABEN2ksRDlBuanVtA4s+leD1Ne8rbIWXmCrOyUXv +# LZAkvG5onAbXvW1jEiDAiIUIbc/98W3F+gsrTGsw62hqnUSG1JEeMkrOXVy12uIu +# iYL+BKrxyBztGCqKVBcyFeE49Th5ObRuHaOp8Y5VGCs2Jqggn/QaRdl+gdD/Uhgg +# z714Ns25Xc5+HWsHkDn06kc5NpBWJntPEfVlyY9cXquujPTHKT62X0cLIOWBrHcb +# v1CUw84Rg+ldG30ywWSH8h2YslwDbzmmMAC+I+dPVtTek+CaXgalMWEdfIIwC6l3 +# jkfjqGYLKo6LP6hlfMuaci8YeOkymjI4oUwxvfOXK1kQCavKlSCQ/Q3W1OLP3/Iw +# 90kWpTti6ufvcn885HpeB4ngp0PYa3kt5GIa9gytO7r1E3y9t75W3WhOrbul4mti +# 1vk= +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Repo/HP.Repo.psm1 b/Bios-Update-HP-v2.0/module/HP.Repo/HP.Repo.psm1 new file mode 100644 index 0000000..fd0c779 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Repo/HP.Repo.psm1 @@ -0,0 +1,2569 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + +using namespace HP.CMSLHelper + +Set-StrictMode -Version 3.0 +#requires -Modules "HP.Private","HP.Softpaq","HP.Sinks" + +# CMSL is normally installed in C:\Program Files\WindowsPowerShell\Modules +# but if installed via PSGallery and via PS7, it is installed in a different location +if (Test-Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll") { + Add-Type -Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll" +} +else{ + Add-Type -Path "$PSScriptRoot\..\..\HP.Private\1.7.2\HP.CMSLHelper.dll" +} + +enum ErrorHandling +{ + Fail = 0 + LogAndContinue = 1 +} + +$REPOFILE = ".repository/repository.json" +$LOGFILE = ".repository/activity.log" + +# print a bare error +function err +{ + [CmdletBinding()] + param( + [string]$str, + [boolean]$withLog = $true + ) + + [console]::ForegroundColor = 'red' + [console]::Error.WriteLine($str) + [console]::ResetColor() + + if ($withLog) { Write-LogError -Message $str -Component "HP.Repo" -File $LOGFILE } +} + +# convert a date object to an 8601 string +function ISO8601DateString +{ + [CmdletBinding()] + param( + [datetime]$Date + ) + $Date.ToString("yyyy-MM-dd'T'HH:mm:ss.fffffff",[System.Globalization.CultureInfo]::InvariantCulture) +} + +# get current user name +function GetUserName () +{ + [CmdletBinding()] + param() + + try { + [System.Security.Principal.WindowsIdentity]::GetCurrent().Name + } + catch { + return $env:username + } +} + +# check if a file exists +function FileExists +{ + [CmdletBinding()] + param( + [string]$File + ) + Test-Path $File -PathType Leaf +} + +# load a json object +function LoadJson +{ + [CmdletBinding()] + param( + [string]$File + ) + + try { + $PS7Mark = "PS7Mark" + $rawData = (Get-Content -Raw -Path $File) -replace '("DateLastModified": ")([^"]+)(")',('$1' + $PS7Mark + '$2' + $PS7Mark + '$3') + [SoftpaqRepositoryFile]$result = $rawData | ConvertFrom-Json + $result.DateLastModified = $result.DateLastModified -replace $PS7Mark,"" + return $result + } + catch + { + err ("Could not parse '$File' $($_.Exception.Message)") + return $Null + } +} + +# load a repository definition file +function LoadRepository +{ + [CmdletBinding()] + param() + + Write-Verbose "loading $REPOFILE" + $inRepo = FileExists -File $REPOFILE + if (-not $inRepo) { + throw [System.Management.Automation.ItemNotFoundException]"Directory '$(Get-Location)' is not a repository." + } + + $repo = LoadJson -File $REPOFILE + if (-not $repo -eq $null) + { + err ("Could not initialize the repository: $($_.Exception.Message)") + return $false,$null + } + + if (-not $repo.Filters) { $repo.Filters = @() } + + if (-not $repo.settings) { + $repo.settings = New-Object SoftpaqRepositoryFile+Configuration + } + + if (-not $repo.settings.OnRemoteFileNotFound) { + $repo.settings.OnRemoteFileNotFound = [ErrorHandling]::Fail + } + + if (-not $repo.settings.ExclusiveLockMaxRetries) { + $repo.settings.ExclusiveLockMaxRetries = 10 + } + + if (-not $repo.settings.OfflineCacheMode) { + $repo.settings.OfflineCacheMode = "Disable" + } + + if (-not $repo.settings.RepositoryReport) { + $repo.settings.RepositoryReport = "CSV" + } + + foreach ($filter in $repo.Filters) + { + if (-not $filter.characteristic) + { + $filter.characteristic = "*" + } + if (-not $filter.preferLTSC) + { + $filter.preferLTSC = $false + } + } + + if (-not $repo.Notifications) { + $repo.Notifications = New-Object SoftpaqRepositoryFile+NotificationConfiguration + $repo.Notifications.port = 25 + $repo.Notifications.tls = $false + $repo.Notifications.UserName = "" + $repo.Notifications.Password = "" + $repo.Notifications.from = "softpaq-repo-sync@$($env:userdnsdomain)" + $repo.Notifications.fromname = "Softpaq Repository Notification" + } + + Write-Verbose "load success" + return $true,$repo +} + +# This function downloads SoftPaq CVA, if SoftPaq exe already exists, checks signature of SoftPaq exe. If redownload required, SoftPaq exe will be downloaded. +# Note that CVAs are always downloaded since there is no reliable way to check their consistency. +function DownloadSoftpaq +{ + [CmdletBinding()] + param( + $DownloadSoftpaqCmd, + [int]$MaxRetries = 10 + ) + + $download_file = $true + $EXEname = "sp" + $DownloadSoftpaqCmd.number + ".exe" + $CVAname = "sp" + $DownloadSoftpaqCmd.number + ".cva" + + # download the SoftPaq CVA. Existing CVAs are always overwritten. + Write-Verbose ("Downloading CVA $($DownloadSoftpaqCmd.number)") + Log (" sp$($DownloadSoftpaqCmd.number).cva - Downloading CVA file.") + Get-SoftpaqMetadataFile @DownloadSoftpaqCmd -MaxRetries $MaxRetries -Overwrite "Yes" + Log (" sp$($DownloadSoftpaqCmd.number).cva - Done downloading CVA file.") + + # check if the SoftPaq exe already exists + if (FileExists -File $EXEname) { + Write-Verbose "Checking signature for existing file $EXEname" + if (Get-HPPrivateCheckSignature -File $EXEname -CVAfile $CVAname -Verbose:$VerbosePreference -Progress:(-not $DownloadSoftpaqCmd.Quiet)) { + + # existing SoftPaq exe passes signature check. No need to redownload + $download_file = $false + + if (-not $DownloadSoftpaqCmd.Quiet) { + Write-Host -ForegroundColor Magenta "File $EXEname already exists and passes signature check. It will not be redownloaded." + } + + Log (" sp$($DownloadSoftpaqCmd.number).exe - Already exists. Will not redownload.") + } + else { + # existing SoftPaq exe failed signature check. Need to delete it and redownload + Write-Verbose ("Need to redownload file '$EXEname'") + } + } + else { + Write-Verbose ("Need to download file '$EXEname'") + } + + # download the SoftPaq exe if needed + if ($download_file -eq $true) { + try { + Log (" sp$($DownloadSoftpaqCmd.number).exe - Downloading EXE file.") + + # download the SoftPaq exe + Get-Softpaq @DownloadSoftpaqCmd -MaxRetries $MaxRetries -Overwrite yes + + # check newly downloaded SoftPaq exe signature + if (-not (Get-HPPrivateCheckSignature -File $EXEname -CVAfile $CVAname -Verbose:$VerbosePreference -Progress:(-not $DownloadSoftpaqCmd.Quiet))) { + + # delete SoftPaq CVA and EXE since the EXE failed signature check + Remove-Item -Path $EXEname -Force -Verbose:$VerbosePreference + Remove-Item -Path $CVAName -Force -Verbose:$VerbosePreference + + $msg = "File $EXEname failed integrity check and has been deleted, will retry download next sync" + if (-not $DownloadSoftpaqCmd.Quiet) { + Write-Host -ForegroundColor Magenta $msg + } + Write-LogWarning -Message $msg -Component "HP.Repo" -File $LOGFILE + } + else { + Log (" sp$($DownloadSoftpaqCmd.number).exe - Done downloading EXE file.") + } + } + catch { + Write-Host -ForegroundColor Magenta "File sp$($DownloadSoftpaqCmd.number).exe has invalid or missing signature and will be deleted." + Log (" sp$($DownloadSoftpaqCmd.number).exe has invalid or missing signature and will be deleted.") + Log (" sp$($DownloadSoftpaqCmd.number).exe - Redownloading EXE file.") + Get-Softpaq @DownloadSoftpaqCmd -maxRetries $maxRetries + Log (" sp$($DownloadSoftpaqCmd.number).exe - Done downloading EXE file.") + } + } +} + +# write a repository definition file +function WriteRepositoryFile +{ + [CmdletBinding()] + param($obj) + + $now = Get-Date + $obj.DateLastModified = ISO8601DateString -Date $now + $obj.ModifiedBy = GetUserName + Write-Verbose "Writing repository file to $REPOFILE" + $obj | ConvertTo-Json | Out-File -Force $REPOFILE +} + +# check if a filter exists in a repo object +function FilterExists +{ + [CmdletBinding()] + param($repo,$f) + + $c = getFilters $repo $f + return ($null -ne $c) +} + +# get a list of filters in a repo, matching exact parameters +function getFilters +{ + [CmdletBinding()] + param($repo,$f) + + if ($repo.Filters.Count -eq 0) { return $null } + $repo.Filters | Where-Object { + $_.platform -eq $f.platform -and + $_.OperatingSystem -eq $f.OperatingSystem -and + $_.Category -eq $f.Category -and + $_.ReleaseType -eq $f.ReleaseType -and + $_.characteristic -eq $f.characteristic -and + $_.preferLTSC -eq $f.preferLTSC + } +} + +# get a list of filters in a repo, considering empty parameters as wildcards +function GetFiltersWild +{ + [CmdletBinding()] + param($repo,$f) + + if ($repo.Filters.Count -eq 0) { return $null } + $repo.Filters | Where-Object { + $_.platform -eq $f.platform -and + ( + $_.OperatingSystem -eq $f.OperatingSystem -or + $f.OperatingSystem -eq "*" -or + ($f.OperatingSystem -eq "win10:*" -and $_.OperatingSystem.StartsWith("win10")) -or + ($f.OperatingSystem -eq "win11:*" -and $_.OperatingSystem.StartsWith("win11")) + ) -and + ($_.Category -eq $f.Category -or $f.Category -eq "*") -and + ($_.ReleaseType -eq $f.ReleaseType -or $f.ReleaseType -eq "*") -and + ($_.characteristic -eq $f.characteristic -or $f.characteristic -eq "*") -and + ($_.preferLTSC -eq $f.preferLTSC -or $null -eq $f.preferLTSC) + } +} + +# write a log entry to the .repository/activity.log +function Log +{ + [CmdletBinding()] + param([string[]]$entryText) + + foreach ($line in $entryText) + { + if (-not $line) { + $line = " " + } + Write-LogInfo -Message $line -Component "HP.Repo" -File $LOGFILE + } + +} + +# touch a file (change its date if exists, or create it if it doesn't. +function TouchFile +{ + [CmdletBinding()] + param([string]$File) + + if (Test-Path $File) { (Get-ChildItem $File).LastWriteTime = Get-Date } + else { Write-Output $null > $File } +} + + +# remove all marks from the repository +function FlushMarks +{ + [CmdletBinding()] + param() + + Write-Verbose "Removing all marks" + Remove-Item ".repository\mark\*" -Include "*.mark" +} + + +# send a notification email +function Send +{ + [CmdletBinding()] + param( + $subject, + $body, + $html = $true + ) + + $n = Get-RepositoryNotificationConfiguration + if ((-not $n) -or (-not $n.server)) { + Write-Verbose ("Notifications are not configured") + return + } + + try { + if ((-not $n.addresses) -or (-not $n.addresses.Count)) + { + Write-Verbose ("Notifications have no recipients defined") + return + } + Log ("Sending a notification email") + + $params = @{} + $params.To = $n.addresses + $params.SmtpServer = $n.server + $params.port = $n.port + $params.UseSsl = $n.tls + $params.from = "$($n.fromname) <$($n.from)>" + $params.Subject = $subject + $params.Body = $body + $params.BodyAsHtml = $html + + Write-Verbose ("server: $($params.SmtpServer)") + Write-Verbose ("port: $($params.Port)") + + if ([string]::IsNullOrEmpty($n.UserName) -eq $false) + { + try { + [SecureString]$read = $n.Password | ConvertTo-SecureString + $params.Credential = New-Object System.Management.Automation.PSCredential ($n.UserName,$read) + if (-not $params.Credential) { + Log ("Could not build credential object from username and password") + return; + } + } + catch { + err ("Failed to build credential object from username and password: $($_.Exception.Message)") + return + } + } + Send-MailMessage @params -ErrorAction Stop + } + catch { + err ("Could not send email: $($_.Exception.Message)") + return + } + Write-Verbose ("Send complete.") +} + +<# +.SYNOPSIS + Initializes a repository in the current directory + +.DESCRIPTION + This command initializes a directory to be used as a repository. This command creates a .repository folder in the current directory, + which contains the definition of the .repository and all its settings. + + In order to un-initalize a directory, simple remove the .repository folder. + + After initializing a repository, you must add at least one filter to define the content that this repository will receive. + + If the directory already contains a repository, this command will fail. + +.EXAMPLE + Initialize-Repository + +.LINK + [Add-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Add-RepositoryFilter) + +.LINK + [Remove-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Remove-RepositoryFilter) + +.LINK + [Get-RepositoryInfo](https://developers.hp.com/hp-client-management/doc/Get-RepositoryInfo) + +.LINK + [Invoke-RepositorySync](https://developers.hp.com/hp-client-management/doc/Invoke-RepositorySync) + +.LINK + [Invoke-RepositoryCleanup](https://developers.hp.com/hp-client-management/doc/Invoke-RepositoryCleanup) + +.LINK + [Set-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Set-RepositoryNotificationConfiguration) + +.LINK + [Clear-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Clear-RepositoryNotificationConfiguration) + +.LINK + [Get-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Get-RepositoryNotificationConfiguration) + +.LINK + [Show-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Show-RepositoryNotificationConfiguration) + +.LINK + [Add-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Add-RepositorySyncFailureRecipient) + +.LINK + [Remove-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Remove-RepositorySyncFailureRecipient) + +.LINK + [Test-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Test-RepositoryNotificationConfiguration) + +.LINK + [Get-RepositoryConfiguration](https://developers.hp.com/hp-client-management/doc/Get-RepositoryConfiguration) + +.LINK + [Set-RepositoryConfiguration](https://developers.hp.com/hp-client-management/doc/Set-RepositoryConfiguration) +#> +function Initialize-Repository +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Initialize-Repository")] + param() + + if (FileExists -File $REPOFILE) { + err "This directory is already initialized as a repository." + return + } + $now = Get-Date + $newRepositoryFile = New-Object SoftpaqRepositoryFile + + $newRepositoryFile.settings = New-Object SoftpaqRepositoryFile+Configuration + $newRepositoryFile.settings.OnRemoteFileNotFound = [ErrorHandling]::Fail + $newRepositoryFile.settings.ExclusiveLockMaxRetries = 10 + $newRepositoryFile.settings.OfflineCacheMode = "Disable" + $newRepositoryFile.settings.RepositoryReport = "CSV" + + $newRepositoryFile.DateCreated = ISO8601DateString -Date $now + $newRepositoryFile.CreatedBy = GetUserName + + try { + New-Item -ItemType directory -Path .repository | Out-Null + WriteRepositoryFile -obj $newRepositoryFile + New-Item -ItemType directory -Path ".repository/mark" | Out-Null + } + catch { + err ("Could not initialize the repository: $($_.Exception.Message)") + return + } + Log "Repository initialized successfully." +} + +<# +.SYNOPSIS + Adds a filter per specified platform to the current repository + +.DESCRIPTION + This command adds a filter to a repository that was previously initialized by the Initialize-Repository command. A repository can contain one or more filters, and filtering will be the based on all the filters defined. Please note that "*" means "current" for the -Os parameter but means "all" for the -Category, -ReleaseType, -Characteristic parameters. + + .PARAMETER Platform + Specifies the platform using its platform ID to include in this repository. A platform ID, a 4-digit hexadecimal number, can be obtained by executing the Get-HPDeviceProductID command. This parameter is mandatory. + +.PARAMETER Os + Specifies the operating system to be included in this repository. The value must be one of 'win10' or 'win11'. If not specified, the current operating system will be assumed, which may not be what is intended. + +.PARAMETER OsVer + Specifies the target OS Version (e.g. '1809', '1903', '1909', '2004', '2009', '21H1', '21H2', '22H2', '23H2', '24H2', etc). Starting from the '21H1' release, 'xxHx' format is expected. If not specified, the current operating system version will be assumed, which may not be what is intended. + +.PARAMETER Category + Specifies the SoftPaq category to be included in this repository. The value must be one (or more) of the following values: + - Bios + - Firmware + - Driver + - Software + - OS + - Manageability + - Diagnostic + - Utility + - Driverpack + - Dock + - UWPPack + + If not specified, all categories will be included. + +.PARAMETER ReleaseType + Specifies a release type for this command to filter based on. The value must be one (or more) of the following values: + - Critical + - Recommended + - Routine + + If not specified, all release types are included. + +.PARAMETER Characteristic + Specifies the characteristic to be included in this repository. The value must be one of the following values: + - SSM + - DPB + - UWP + + If this parameter is not specified, all characteristics are included. + +.PARAMETER PreferLTSC + If specified and if the data file exists, this command uses the Long-Term Servicing Branch/Long-Term Servicing Channel (LTSB/LTSC) Reference file for the specified platform ID. If the data file does not exist, this command uses the regular Reference file for the specified platform. + +.EXAMPLE + Add-RepositoryFilter -Platform 1234 -Os win10 -OsVer 2009 + +.EXAMPLE + Add-RepositoryFilter -Platform 1234 -Os win10 -OsVer "21H1" + +.EXAMPLE + Add-RepositoryFilter -Platform 1234 -Os win10 -OsVer "21H1" -PreferLTSC + +.LINK + [Initialize-Repository](https://developers.hp.com/hp-client-management/doc/Initialize-Repository) + +.LINK + [Remove-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Remove-RepositoryFilter) + +.LINK + [Get-RepositoryInfo](https://developers.hp.com/hp-client-management/doc/Get-RepositoryInfo) + +.LINK + [Invoke-RepositoryCleanup](https://developers.hp.com/hp-client-management/doc/Invoke-RepositoryCleanup) + +.LINK + [Invoke-RepositorySync](https://developers.hp.com/hp-client-management/doc/Invoke-RepositorySync) + +.LINK + [Set-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Set-RepositoryNotificationConfiguration) + +.LINK + [Clear-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Clear-RepositoryNotificationConfiguration) + +.LINK + [Get-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Get-RepositoryNotificationConfiguration) + +.LINK + [Show-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Show-RepositoryNotificationConfiguration) + +.LINK + [Add-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Add-RepositorySyncFailureRecipient) + +.LINK + [Remove-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Remove-RepositorySyncFailureRecipient) + +.LINK + [Test-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Test-RepositoryNotificationConfiguration) + +.LINK + [Get-HPDeviceProductID](https://developers.hp.com/hp-client-management/doc/Get-HPDeviceProductID) +#> +function Add-RepositoryFilter +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Add-RepositoryFilter")] + param( + [ValidatePattern("^[a-fA-F0-9]{4}$")] + [Parameter(Position = 0,Mandatory = $true)] + [string]$Platform, + + [ValidateSet("win7","win8","win8.1","win81","win10","win11","*")] # keep in sync with the SoftPaq module + [Parameter(Position = 1)] $Os = "*", # counterintuitively, "*" for this Os parameter means "current" + [string[]] + + [ValidateSet("1809","1903","1909","2004","2009","21H1","21H2","22H2", "23H2", "24H2")] # keep in sync with the SoftPaq module + [Parameter(Position = 1)] + [string]$OsVer, + + [ValidateSet("Bios","Firmware","Driver","Software","Os","Manageability","Diagnostic","Utility","Driverpack","Dock","UWPPack","*")] # keep in sync with the SoftPaq module + [Parameter(Position = 2)] + [string[]]$Category = "*", + + [ValidateSet("Critical","Recommended","Routine","*")] # keep in sync with the SoftPaq module + [Parameter(Position = 3)] + [string[]]$ReleaseType = "*", + + [ValidateSet("SSM","DPB","UWP","*")] # keep in sync with the SoftPaq module + [Parameter(Position = 4)] + [string[]]$Characteristic = "*", + + [Parameter(Position = 5, Mandatory = $false)] + [switch]$PreferLTSC + ) + + $c = LoadRepository + try { + if ($c[0] -eq $false) { return } + $repo = $c[1] + + $newFilter = New-Object SoftpaqRepositoryFile+SoftpaqRepositoryFilter + $newFilter.platform = $Platform + + $newFilter.OperatingSystem = $Os + if (-not $OsVer) + { + $OsVer = GetCurrentOSVer + } + if ($OsVer) { $OsVer = $OsVer.ToLower() } + if ($Os -eq "win10") { $newFilter.OperatingSystem = "win10:$OsVer" } + elseif ($Os -eq "win11") { $newFilter.OperatingSystem = "win11:$OsVer" } + + $newFilter.Category = $Category + $newFilter.ReleaseType = $ReleaseType + $newFilter.characteristic = $Characteristic + $newFilter.preferLTSC = $PreferLTSC.IsPresent + + # silently ignore if the filter is already in the repo + $exists = filterExists $repo $newFilter + if (!$exists) { + $repo.Filters += $newFilter + WriteRepositoryFile -obj $repo + if ($OsVer -and $Os -ne '*') { Log "Added filter $Platform {{ os='$Os', osver='$OsVer', category='$Category', release='$ReleaseType', characteristic='$Characteristic', preferLTSC='$($PreferLTSC.IsPresent)' }}" } + else { Log "Added filter $Platform {{ os='$Os', category='$Category', release='$ReleaseType', characteristic='$Characteristic', preferLTSC='$($PreferLTSC.IsPresent)' }}" } + } + else + { + Write-Verbose "Silently ignoring this filter since exact match is already in the repository" + } + Write-Verbose "Repository filter added." + } + catch + { + err ("Could not add filter to the repository: $($_.Exception.Message)") + } +} + + +<# +.SYNOPSIS + Removes one or more previously added filters per specified platform from the current repository + +.DESCRIPTION + This command removes one or more previously added filters per specified platform from the current repository. Please note that "*" means "current" for the -Os parameter but means "all" for the -Category, -ReleaseType, -Characteristic parameters. + +.PARAMETER Platform + Specifies the platform to be removed from this repository. This is a 4-digit hex number that can be obtained via the Get-HPDeviceProductID command. This parameter is mandatory. + +.PARAMETER Os + Specifies an OS for this command to be removed from this repository. The value must be 'win10' or 'win11'. If not specified, the current operating system will be assumed, which may not be what is intended. + +.PARAMETER OsVer + Specifies the target OS Version (e.g. '1809', '1903', '1909', '2004', '2009', '21H1', '21H2', '22H2', '23H2', '24H2', etc). Starting from the '21H1' release, 'xxHx' format is expected. If the parameter is not specified, the current operating system version will be assumed, which may not be what is intended. + +.PARAMETER Category + Specifies the SoftPaq category to be removed from this repository. The value must be one (or more) of the following values: + - Bios + - Firmware + - Driver + - Software + - OS + - Manageability + - Diagnostic + - Utility + - Driverpack + - Dock + - UWPPack + + If not specified, all categories will be removed. + +.PARAMETER ReleaseType + Specifies the release type for this command to remove from this repository. If not specified, all release types will be removed. The value must be one (or more) of the following values: + - Critical + - Recommended + - Routine + + If this parameter is not specified, all release types will be removed. + +.PARAMETER Characteristic + Specifies the characteristic to be removed from this repository. The value must be one of the following values: + - SSM + - DPB + - UWP + + If this parameter is not specified, all characteristics are included. If not specified, all characteristics will be removed. + +.PARAMETER PreferLTSC + If specified, this command uses the Long-Term Servicing Branch/Long-Term Servicing Channel (LTSB/LTSC) Reference file for the specified platform. If not specified, all preferences will be matched. + +.PARAMETER Yes + If specified, this command will delete the filter without asking for confirmation. If not specified, this command will ask for confirmation before deleting a filter. + +.EXAMPLE + Remove-RepositoryFilter -Platform 1234 + +.EXAMPLE + Remove-RepositoryFilter -Platform 1234 -Os win10 -OsVer "21H1" + +.EXAMPLE + Remove-RepositoryFilter -Platform 1234 -Os win10 -OsVer "21H1" -PreferLTSC $True + +.LINK + [Initialize-Repository](https://developers.hp.com/hp-client-management/doc/Initialize-Repository) + +.LINK + [Add-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Add-RepositoryFilter) + +.LINK + [Get-RepositoryInfo](https://developers.hp.com/hp-client-management/doc/Get-RepositoryInfo) + +.LINK + [Invoke-RepositoryCleanup](https://developers.hp.com/hp-client-management/doc/Invoke-RepositoryCleanup) + +.LINK + [Invoke-RepositorySync](https://developers.hp.com/hp-client-management/doc/Invoke-RepositorySync) + +.LINK + [Set-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Set-RepositoryNotificationConfiguration) + +.LINK + [Clear-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Clear-RepositoryNotificationConfiguration) + +.LINK + [Get-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Get-RepositoryNotificationConfiguration) + +.LINK + [Show-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Show-RepositoryNotificationConfiguration) + +.LINK + [Add-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Add-RepositorySyncFailureRecipient) + +.LINK + [Remove-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Remove-RepositorySyncFailureRecipient) + +.LINK + [Get-HPDeviceProductID](https://developers.hp.com/hp-client-management/doc/Get-HPDeviceProductID) + +.LINK + [Test-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Test-RepositoryNotificationConfiguration) +#> +function Remove-RepositoryFilter +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Remove-RepositoryFilter")] + param( + [ValidatePattern("^[a-fA-F0-9]{4}$")] + [Parameter(Position = 0,Mandatory = $true)] + [string]$Platform, + + [ValidateSet("win7","win8","win8.1","win81","win10","win11","*")] # keep in sync with the SoftPaq module + [string[]] + [Parameter(Position = 1)] + $Os = "*", # counterintuitively, "*" for this Os parameter means "current" + + [ValidateSet("1809","1903","1909","2004","2009","21H1","21H2","22H2", "23H2", "24H2")] # keep in sync with the SoftPaq module + [Parameter(Position = 1)] + [string]$OsVer, + + [ValidateSet("Bios","Firmware","Driver","Software","Os","Manageability","Diagnostic","Utility","Driverpack","Dock","UWPPack","*")] # keep in sync with the SoftPaq module + [string[]] + [Parameter(Position = 2)] + $Category = "*", + + [ValidateSet("Critical","Recommended","Routine","*")] # keep in sync with the SoftPaq module + [string[]] + [Parameter(Position = 3)] + $ReleaseType = "*", + + [Parameter(Position = 4,Mandatory = $false)] + [switch]$Yes = $false, + + [ValidateSet("SSM","DPB","UWP","*")] # keep in sync with the SoftPaq module + [string[]] + [Parameter(Position = 5)] + $Characteristic = "*", + + [Parameter(Position = 5, Mandatory = $false)] + [nullable[boolean]]$PreferLTSC = $null + ) + + $c = LoadRepository + try { + if ($c[0] -eq $false) { return } + + $newFilter = New-Object SoftpaqRepositoryFile+SoftpaqRepositoryFilter + $newFilter.platform = $Platform + $newFilter.OperatingSystem = $Os + + if ($Os -eq "win10") { + if ($OsVer) { $newFilter.OperatingSystem = "win10:$OsVer" } + else { $newFilter.OperatingSystem = "win10:*" } + } + elseif ($Os -eq "win11") { + if ($OsVer) { $newFilter.OperatingSystem = "win11:$OsVer" } + else { $newFilter.OperatingSystem = "win11:*" } + } + + $newFilter.Category = $Category + $newFilter.ReleaseType = $ReleaseType + $newFilter.characteristic = $Characteristic + $newFilter.preferLTSC = $PreferLTSC + + $todelete = getFiltersWild $c[1] $newFilter + if (-not $todelete) { + Write-Verbose ("No matching filter to delete") + return + } + + if (-not $Yes.IsPresent) { + Write-Host "The following filters will be deleted:" -ForegroundColor Cyan + $todelete | ConvertTo-Json -Depth 2 | Write-Host -ForegroundColor Cyan + $answer = Read-Host "Enter 'y' to continue: " + if ($answer -ne "y") { + Write-Host 'Aborted.' + return } + } + + $c[1].Filters = $c[1].Filters | Where-Object { $todelete -notcontains $_ } + WriteRepositoryFile -obj $c[1] + + foreach ($f in $todelete) { + Log "Removed filter $($f.platform) { os='$($f.operatingSystem)', category='$($f.category)', release='$($f.releaseType), characteristic='$($f.characteristic)' }" + } + } + catch + { + err ("Could not remove filter from repository: $($_.Exception.Message)") + } +} + +<# +.SYNOPSIS + Retrieves the current repository definition + +.DESCRIPTION + This command retrieves the current repository definition as an object. This command must be executed inside an initialized repository. + +.EXAMPLE + $myrepository = Get-RepositoryInfo + +.LINK + [Initialize-Repository](https://developers.hp.com/hp-client-management/doc/Initialize-Repository) + +.LINK + [Add-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Add-RepositoryFilter) + +.LINK + [Remove-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Remove-RepositoryFilter) + +.LINK + [Invoke-RepositorySync](https://developers.hp.com/hp-client-management/doc/Invoke-RepositorySync) + +.LINK + [Invoke-RepositoryCleanup](https://developers.hp.com/hp-client-management/doc/Invoke-RepositoryCleanup) + +.LINK + [Set-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Set-RepositoryNotificationConfiguration) + +.LINK + [Clear-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Clear-RepositoryNotificationConfiguration) + +.LINK + [Get-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Get-RepositoryNotificationConfiguration) + +.LINK + [Show-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Show-RepositoryNotificationConfiguration) + +.LINK + [Add-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Add-RepositorySyncFailureRecipient) + +.LINK + [Remove-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Remove-RepositorySyncFailureRecipient) + +.LINK + [Test-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Test-RepositoryNotificationConfiguration) +#> +function Get-RepositoryInfo () +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-RepositoryInfo")] + param() + + $c = LoadRepository + try { + if (-not $c[0]) { return } + $c[1] + } + catch + { + err ("Could not get repository info: $($_.Exception.Message)") + } +} + +<# +.SYNOPSIS + Synchronizes the current repository and generates a report that includes information about the repository + +.DESCRIPTION + This command performs a synchronization on the current repository by downloading the latest SoftPaqs associated with the repository filters and creates a repository report in a format (default .CSV) set via the Set-RepositoryConfiguration command. + + This command may be scheduled via task manager to run on a schedule. You can define a notification email via the Set-RepositoryNotificationConfiguration command to receive any failure notifications during unattended operation. + + This command may be followed by the Invoke-RepositoryCleanup command to remove any obsolete SoftPaqs from the repository. + + Please note that the Invoke-RepositorySync command is not supported in WinPE. + +.PARAMETER Quiet + If specified, this command will suppress progress messages during execution. + +.PARAMETER ReferenceUrl + Specifies an alternate location for the HP Image Assistant (HPIA) Reference files. This URL must be https. The Reference files are expected to be at the location pointed to by this URL inside a directory named after the platform ID you want a SoftPaq list for. + Using system ID 83b2, OS Win10, and OSVer 2009 reference files as an example, this command will call the Get-SoftpaqList command to find the corresponding files in: $ReferenceUrl/83b2/83b2_64_10.0.2009.cab. + If not specified, 'https://hpia.hpcloud.hp.com/ref/' is used by default, and fallback is set to 'https://ftp.hp.com/pub/caps-softpaq/cmit/imagepal/ref/'. + +.EXAMPLE + Invoke-RepositorySync -Quiet + +.LINK + [Initialize-Repository](https://developers.hp.com/hp-client-management/doc/Initialize-Repository) + +.LINK + [Add-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Add-RepositoryFilter) + +.LINK + [Remove-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Remove-RepositoryFilter) + +.LINK + [Get-RepositoryInfo](https://developers.hp.com/hp-client-management/doc/Get-RepositoryInfo) + +.LINK + [Invoke-RepositoryCleanup](https://developers.hp.com/hp-client-management/doc/Invoke-RepositoryCleanup) + +.LINK + [Set-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Set-RepositoryNotificationConfiguration) + +.LINK + [Clear-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Clear-RepositoryNotificationConfiguration) + +.LINK + [Get-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Get-RepositoryNotificationConfiguration) + +.LINK + [Show-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Show-RepositoryNotificationConfiguration) + +.LINK + [Add-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Add-RepositorySyncFailureRecipient) + +.LINK + [Remove-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Remove-RepositorySyncFailureRecipient) + +.LINK + [Test-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Test-RepositoryNotificationConfiguration) +#> +function Invoke-RepositorySync +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Invoke-RepositorySync")] + param( + [Parameter(Position = 0,Mandatory = $false)] + [switch]$Quiet = $false, + + [Alias('Url')] + [Parameter(Position = 1,Mandatory = $false)] + [string]$ReferenceUrl = "https://hpia.hpcloud.hp.com/ref" + ) + + # only allow https or file paths with or without file:// URL prefix + if ($ReferenceUrl -and -not ($ReferenceUrl.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($ReferenceUrl) -or $ReferenceUrl.StartsWith("file//:",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if (-not $ReferenceUrl.EndsWith('/')) { + $ReferenceUrl = $ReferenceUrl + "/" + } + + # Fallback to FTP only if ReferenceUrl is the default, and not when a custom ReferenceUrl is specified + if ($ReferenceUrl -eq 'https://hpia.hpcloud.hp.com/ref/') { + $referenceFallbackUrL = 'https://ftp.hp.com/pub/caps-softpaq/cmit/imagepal/ref/' + } + else { + $referenceFallbackUrL = '' + } + + $repo = LoadRepository + try { + $cwd = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath((Get-Location)) + $cacheDir = Join-Path -Path $cwd -ChildPath ".repository" + $cacheDirOffline = $cacheDir + "\cache\offline" + $reportDir = $cacheDir + + # return if repository is not initialized + if ($repo[0] -eq $false) { return } + + # return if repository is initialized but no filters added + $filters = $repo[1].Filters + if ($filters.Count -eq 0) { + Write-Verbose "Repository has no filters defined - terminating." + Write-Verbose ("Flushing the list of markers") + FlushMarks + return + } + + $platformGroups = $filters | Group-Object -Property platform + $normalized = @() + + foreach ($pobj in $platformGroups) + { + + $items = $pobj.Group + + if ($items | Where-Object -Property operatingSystem -EQ -Value "*") { + $items | ForEach-Object { $_.OperatingSystem = "*" } + } + + if ($items | Where-Object -Property category -EQ -Value "*") { + $items | ForEach-Object { $_.Category = "*" } + } + + if ($items | Where-Object -Property releaseType -EQ -Value "*") { + $items | ForEach-Object { $_.ReleaseType = "*" } + } + + if ($items | Where-Object -Property characteristic -EQ -Value "*") { + $items | ForEach-Object { $_.characteristic = "*" } + } + + $normalized += $items | sort -Unique -Property operatingSystem,category,releaseType,characteristic + } + + $softpaqlist = @() + Log "Repository sync has started" + $softpaqListCmd = @{} + + + # build the list of SoftPaqs to download + foreach ($c in $normalized) { + Write-Verbose ($c | Format-List | Out-String) + + if (Get-HPDeviceDetails -Platform $c.platform -Url $ReferenceUrl) + { + $softpaqListCmd.platform = $c.platform.ToLower() + $softpaqListCmd.Quiet = $Quiet + $softpaqListCmd.verbose = $VerbosePreference + + Write-Verbose ("Working on a rule for platform $($softpaqListCmd.platform)") + + if ($c.OperatingSystem.StartsWith("win10:")) + { + $split = $c.OperatingSystem -split ':' + $softpaqListCmd.OS = $split[0] + $softpaqListCmd.osver = $split[1] + } + elseif ($c.OperatingSystem -eq "win10") + { + $softpaqListCmd.OS = "win10" + $softpaqListCmd.osver = GetCurrentOSVer + } + elseif ($c.OperatingSystem.StartsWith("win11:")) + { + $split = $c.OperatingSystem -split ':' + $softpaqListCmd.OS = $split[0] + $softpaqListCmd.osver = $split[1] + } + elseif ($c.OperatingSystem -eq "win11") + { + $softpaqListCmd.OS = "win11" + $softpaqListCmd.osver = GetCurrentOSVer + } + elseif ($c.OperatingSystem -ne "*") + { + $softpaqListCmd.OS = $c.OperatingSystem + #$softpaqListCmd.osver = $null + } + + if ($c.characteristic -ne "*") + { + $softpaqListCmd.characteristic = $c.characteristic.ToUpper().Split() + Write-Verbose "Filter-characteristic:$($softpaqListCmd.characteristic)" + } + + if ($c.ReleaseType -ne "*") + { + $softpaqListCmd.ReleaseType = $c.ReleaseType.Split() + Write-Verbose "Filter-releaseType:$($softpaqListCmd.releaseType)" + } + if ($c.Category -ne "*") + { + $softpaqListCmd.Category = $c.Category.Split() + Write-Verbose "Filter-category:$($softpaqListCmd.category)" + } + if ($c.preferLTSC -eq $true) + { + $softpaqListCmd.PreferLTSC = $true + Write-Verbose "Filter-preferLTSC:$($softpaqListCmd.PreferLTSC)" + } + + Log "Reading the softpaq list for platform $($softpaqListCmd.platform)" + Write-Verbose "Trying to get SoftPaqs from $ReferenceUrl" + $results = Get-SoftpaqList @softpaqListCmd -cacheDir $cacheDir -maxRetries $repo[1].settings.ExclusiveLockMaxRetries -ReferenceUrl $ReferenceUrl -AddHttps + Log "softpaq list for platform $($softpaqListCmd.platform) created" + $softpaqlist += $results + + + $OfflineCacheMode = $repo[1].settings.OfflineCacheMode + if ($OfflineCacheMode -eq "Enable") { + + # keep the download order of PlatformList, Advisory data and Knowledge Base as is to maintain unit tests + $baseurl = $ReferenceUrl + $url = $baseurl + "platformList.cab" + $filename = "platformList.cab" + Write-Verbose "Trying to download PlatformList... $url" + $PlatformList = $null + try { + $PlatformList = Get-HPPrivateOfflineCacheFiles -url $url -FileName $filename -cacheDirOffline $cacheDirOffline -Expand -Verbose:$VerbosePreference + Write-Verbose "Finish downloading PlatformList - $PlatformList" + } + catch { + if ($referenceFallbackUrL) { + $url = "$($referenceFallbackUrL)platformList.cab" + Write-Verbose "Trying to download PlatformList from FTP... $url" + try { + $PlatformList = Get-HPPrivateOfflineCacheFiles -url $url -FileName $filename -cacheDirOffline $cacheDirOffline -Expand -Verbose:$VerbosePreference + } + catch { + Write-Verbose "Error downloading $url. $($_.Exception.Message)" + # Continue the execution with empty PlatformList file + $PlatformList = "" + } + } + if (-not $PlatformList) { + $exception = $_.Exception + switch ($repo[1].settings.OnRemoteFileNotFound) { + "LogAndContinue" { + [string]$data = formatSyncErrorMessageAsHtml $exception + Log ($data -split "`n") + send "Softpaq repository synchronization error" $data + } + # "Fail" + default { + throw $exception + } + } + } + } + + # download Advisory data + $url = $baseurl + "$($softpaqListCmd.platform)/$($softpaqListCmd.platform)_cds.cab" + $cacheDirAdvisory = $cacheDirOffline + "\$($softpaqListCmd.platform)" + $filename = "$($softpaqListCmd.platform)_cds.cab" + Write-Verbose "Trying to download Advisory Data Files... $url" + $AdvisoryFile = $null + try { + $AdvisoryFile = Get-HPPrivateOfflineCacheFiles -url $url -FileName $filename -cacheDirOffline $cacheDirAdvisory -Expand -Verbose:$VerbosePreference + Write-Verbose "Finish downloading Advisory Data Files - $AdvisoryFile" + } + catch { + if ($referenceFallbackUrL) { + $url = "$($referenceFallbackUrL)$($softpaqListCmd.platform)/$($softpaqListCmd.platform)_cds.cab" + Write-Verbose "Trying to download Advisory Data from FTP... $url" + #$cacheDirAdvisory = $cacheDirOffline + "\$($softpaqListCmd.platform)" + #$filename = "$($softpaqListCmd.platform)_cds.cab" + try { + $AdvisoryFile = Get-HPPrivateOfflineCacheFiles -url $url -FileName $filename -cacheDirOffline $cacheDirAdvisory -Expand -Verbose:$VerbosePreference + Write-Verbose "Finish downloading Advisory Data Files - $AdvisoryFile" + } + catch { + Write-Verbose "Error downloading $url. $($_.Exception.Message)" + # Continue the execution with empty advisory file + $AdvisoryFile = "" + } + } + if (-not $AdvisoryFile) { + $exception = $_.Exception + switch ($repo[1].settings.OnRemoteFileNotFound) { + "LogAndContinue" { + [string]$data = formatSyncErrorMessageAsHtml $exception + Log ($data -split "`n") + send "Softpaq repository synchronization error" $data + } + # "Fail" + default { + Write-Warning "Advisory file does not exist for platform $($softpaqListCmd.platform). $($exception.Message)." + #throw $exception # do not fail the whole repository sync when advisory file is missing + } + } + } + } + + # download Knowledge Base + $url = $baseurl + "../kb/common/latest.cab" + $cacheDirKb = $cacheDirOffline + "\kb\common" + $filename = "latest.cab" + Write-Verbose "Trying to download Knowledge Base... $url" + $KnowledgeBase = $null + try { + $KnowledgeBase = Get-HPPrivateOfflineCacheFiles -url $url -FileName $filename -cacheDirOffline $cacheDirKb -Verbose:$VerbosePreference + Write-Verbose "Finish downloading Knowledge Base - $KnowledgeBase" + } + catch { + if ($referenceFallbackUrL) { + $url = "$($referenceFallbackUrL)../kb/common/latest.cab" + Write-Verbose "Trying to download Knowledge Base from FTP... $url" + #$cacheDirKb = $cacheDirOffline + "\kb\common" + #$filename = "latest.cab" + try { + $KnowledgeBase = Get-HPPrivateOfflineCacheFiles -url $url -FileName $filename -cacheDirOffline $cacheDirKb -Verbose:$VerbosePreference + } + catch { + Write-Verbose "Error downloading $url. $($_.Exception.Message)" + # Continue the execution with empty KnowledgeBase file + $KnowledgeBase = "" + } + Write-Verbose "Finish downloading Knowledge Base - $KnowledgeBase" + } + if (-not $KnowledgeBase) { + $exception = $_.Exception + switch ($repo[1].settings.OnRemoteFileNotFound) { + "LogAndContinue" { + [string]$data = formatSyncErrorMessageAsHtml $exception + Log ($data -split "`n") + send "Softpaq repository synchronization error" $data + } + # "Fail" + default { + throw $exception + } + } + } + } + } + } + else { + Write-Host -ForegroundColor Cyan "Platform $($c.platform) doesn't exist. Please add a valid platform." + Write-LogWarning "Platform $($c.platform) is not valid. Skipping it." + } + } + + Write-Verbose ("Done with the list, repository is $($softpaqlist.Count) softpaqs.") + [array]$softpaqlist = @($softpaqlist | Sort-Object -Unique -Property Id) + Write-Verbose ("After trimming duplicates, we have $($softpaqlist.Count) softpaqs.") + + Write-Verbose ("Flushing the list of markers") + FlushMarks + Write-Verbose ("Writing new marks") + + # generate .mark file for each SoftPaq to be downloaded + foreach ($sp in $softpaqList) { + $number = $sp.id.ToLower().TrimStart("sp") + TouchFile -File ".repository/mark/$number.mark" + } + + Write-Verbose ("Starting download") + $downloadCmd = @{} + $downloadCmd.Quiet = $quiet + $downloadCmd.Verbose = $VerbosePreference + + Log "Download has started for $($softpaqlist.Count) softpaqs." + foreach ($sp in $softpaqlist) + { + $downloadCmd.Number = $sp.id.ToLower().TrimStart("sp") + $downloadCmd.Url = $sp.url -Replace "/$($sp.id).exe$",'' + Write-Verbose "Working on data for softpaq $($downloadCmd.number)" + try { + Log "Start downloading files for sp$($downloadCmd.number)." + DownloadSoftpaq -DownloadSoftpaqCmd $downloadCmd -MaxRetries $repo[1].settings.ExclusiveLockMaxRetries -Verbose:$VerbosePreference + + if ($OfflineCacheMode -eq "Enable") { + Log (" sp$($downloadCmd.number).html - Downloading Release Notes.") + $ReleaseNotesurl = Get-HPPrivateItemUrl $downloadCmd.number "html" + $target = "sp$($downloadCmd.number).html" + $targetfile = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($target) + Invoke-HPPrivateDownloadFile -url $ReleaseNotesurl -Target $targetfile + Log (" sp$($downloadCmd.number).html - Done Downloading Release Notes.") + } + Log "Finish downloading files for sp$($downloadCmd.number)." + } + catch { + $exception = $_.Exception + + switch ($repo[1].settings.OnRemoteFileNotFound) + { + "LogAndContinue" { + [string]$data = formatSyncErrorMessageAsHtml $exception + Log ($data -split "`n") + send "Softpaq repository synchronization error" $data + } + # "Fail" + default { + Write-Output "Error downloading $($downloadCmd.Url). $($exception.Message)" + throw $exception + } + } + } + } + + Log "Repository sync has ended" + Write-Verbose "Repository Sync has ended." + + Log "Repository Report creation started" + Write-Verbose "Repository Report creation started." + + try { + # get the configuration set for repository report if any + $RepositoryReport = $repo[1].settings.RepositoryReport + if ($RepositoryReport) { + $Format = $RepositoryReport + New-RepositoryReport -Format $Format -RepositoryPath "$cwd" -OutputFile "$cwd\.repository\Contents.$Format" + Log "Repository Report created as Contents.$Format" + Write-Verbose "Repository Report created as Content.$Format." + } + } + catch [System.IO.FileNotFoundException]{ + Write-Verbose "No data available to create Repository Report as directory '$(Get-Location)' does not contain any CVA files." + Log "No data available to create Repository Report as directory '$(Get-Location)' does not contain any CVA files." + } + catch { + Write-Verbose "Error in creating Repository Report" + Log "Error in creating Repository Report." + } + } + catch + { + err "Repository synchronization failed: $($_.Exception.Message)" $true + [string]$data = formatSyncErrorMessageAsHtml $_.Exception + Log ($data -split "`n") + send "Softpaq repository synchronization error" $data + } +} + +function formatSyncErrorMessageAsHtml ($exception) +{ + [string]$data = "An error occurred during softpaq synchronization.`n`n"; + $data += "The error was: $($exception.Message)`n" + $data += "`nDetails:`n
"
+  $data += "
" + $data += ($exception | Format-List -Force | Out-String) + $data += "
" + $data += "
" + $data +} + +<# +.SYNOPSIS + Removes obsolete SoftPaqs from the current repository + +.DESCRIPTION + This command removes SoftPaqs from the current repository that are labeled as obsolete. These may be SoftPaqs that have been replaced + by newer versions, or SoftPaqs that no longer match the active repository filters. + +.EXAMPLE + Invoke-RepositoryCleanup + +.LINK + [Initialize-Repository](https://developers.hp.com/hp-client-management/doc/Initialize-Repository) + +.LINK + [Add-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Add-RepositoryFilter) + +.LINK + [Remove-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Remove-RepositoryFilter) + +.LINK + [Get-RepositoryInfo](https://developers.hp.com/hp-client-management/doc/Get-RepositoryInfo) + +.LINK + [Invoke-RepositorySync](https://developers.hp.com/hp-client-management/doc/Invoke-RepositorySync) + +.LINK + [Set-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Set-RepositoryNotificationConfiguration) + +.LINK + [Clear-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Clear-RepositoryNotificationConfiguration) + +.LINK + [Get-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Get-RepositoryNotificationConfiguration) + +.LINK + [Show-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Show-RepositoryNotificationConfiguration) + +.LINK + [Add-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Add-RepositorySyncFailureRecipient) + +.LINK + [Remove-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Remove-RepositorySyncFailureRecipient) + +.LINK + [Test-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Test-RepositoryNotificationConfiguration) + +#> +function Invoke-RepositoryCleanup +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Invoke-RepositoryCleanup")] + param() + $repo = LoadRepository + Log ("Beginning repository cleanup") + $deleted = 0 + + try { + Get-ChildItem "." -File | ForEach-Object { + $name = $_.Name.ToLower().TrimStart("sp").Split('.')[0] + if ($name -ne $null) { + if (-not (Test-Path ".repository/mark/$name.mark" -PathType Leaf)) + { + Write-Verbose "Deleting orphaned file $($_.Name)" + Remove-Item $_.Name + $deleted++ + } + #else { + # Write-Verbose "Softpaq $($_.Name) is still needed." + #} + } + } + Log ("Completed repository cleanup, deleted $deleted files.") + } + catch { + err ("Could not clean repository: $($_.Exception.Message)") + } +} + +<# +.SYNOPSIS + Sets the repository notification configuration in the current repository + +.DESCRIPTION + This command defines a notification Simple Mail Transfer Protocol (SMTP) server (and optionally, port) for an email server to be used to send failure notifications during unattended synchronization via the Invoke-RepositorySync command. + + One or more recipients can then be added via the Add-RepositorySyncFailureRecipient command. + + This command must be invoked inside a directory initialized as a repository using the Initialize-Repository command. + + +.PARAMETER Server + Specifies the server name (or IP) for the outgoing mail (SMTP) server + +.PARAMETER Port + Specifies a port for the SMTP server. If not specified, the default IANA-assigned port 25 will be used. + +.PARAMETER Tls + Specifies the usage for Transport Layer Security (TLS). The value may be 'true', 'false', or 'auto'. 'Auto' will automatically set TLS to true when the port is changed to a value different than 25. By default, TLS is false. Please note that TLS is the successor protocol to Secure Sockets Layer (SSL). + +.PARAMETER UserName + Specifies the SMTP server username for authenticated SMTP servers. If not specified, connection will be made without authentication. + +.PARAMETER Password + Specifies the SMTP server password for authenticated SMTP servers. + +.PARAMETER From + Specifies the email address from which the notification will appear to originate. Note that some servers may accept emails from specified domains only or require the email address to match the username. + +.PARAMETER FromName + Specifies the from address display name + +.PARAMETER RemoveCredentials + If specified, this command will remove the SMTP server credentials without removing the entire mail server configuration. + +.EXAMPLE + Set-RepositoryNotificationConfiguration smtp.mycompany.com + +.LINK + [Initialize-Repository](https://developers.hp.com/hp-client-management/doc/Initialize-Repository) + +.LINK + [Add-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Add-RepositoryFilter) + +.LINK + [Remove-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Remove-RepositoryFilter) + +.LINK + [Get-RepositoryInfo](https://developers.hp.com/hp-client-management/doc/Get-RepositoryInfo) + +.LINK + [Invoke-RepositorySync](https://developers.hp.com/hp-client-management/doc/Invoke-RepositorySync) + +.LINK + [Invoke-RepositoryCleanup](https://developers.hp.com/hp-client-management/doc/Invoke-RepositoryCleanup) + +.LINK + [Clear-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Clear-RepositoryNotificationConfiguration) + +.LINK + [Get-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Get-RepositoryNotificationConfiguration) + +.LINK + [Show-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Show-RepositoryNotificationConfiguration) + +.LINK + [Add-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Add-RepositorySyncFailureRecipient) + +.LINK + [Remove-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Remove-RepositorySyncFailureRecipient) + +.LINK + [Test-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Test-RepositoryNotificationConfiguration) + +#> +function Set-RepositoryNotificationConfiguration +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Set-RepositoryNotificationConfiguration")] + param( + [Parameter(Position = 0,Mandatory = $false)] + [string] + [ValidatePattern("^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$")] + $Server = $null, + + [Parameter(Position = 1,Mandatory = $false)] + [ValidateRange(1,65535)] + [int] + $Port = 0, + + [Parameter(Position = 2,Mandatory = $false)] + [string] + [ValidateSet('true','false','auto')] + $Tls = $null, + + [Parameter(Position = 3,Mandatory = $false)] + [string] + $Username = $null, + + [Parameter(Position = 4,Mandatory = $false)] + [string] + $Password = $null, + + [Parameter(Position = 5,Mandatory = $false)] + [string] + [ValidatePattern("^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$")] + $From = $null, + + [Parameter(Position = 6,Mandatory = $false)] + [string] + $FromName = $null, + + [Parameter(Position = 7,Mandatory = $false)] + [switch] + $RemoveCredentials + ) + + Write-Verbose "Beginning notification configuration update" + + if ($RemoveCredentials.IsPresent -and ([string]::IsNullOrEmpty($UserName) -eq $false -or [string]::IsNullOrEmpty($Password) -eq $false)) + { + err ("-removeCredentials may not be specified with -username or -password") + return + } + + $c = LoadRepository + try { + if (-not $c[0]) { return } + + Write-Verbose "Applying configuration" + if ([string]::IsNullOrEmpty($Server) -eq $false) { + Write-Verbose ("Setting SMTP Server to: $Server") + $c[1].Notifications.server = $Server + } + + if ($Port) { + Write-Verbose ("Setting SMTP Server port to: $Port") + $c[1].Notifications.port = $Port + } + + if (-not [string]::IsNullOrEmpty($UserName)) { + Write-Verbose ("Setting SMTP server credential(username) to: $UserName") + $c[1].Notifications.UserName = $UserName + } + + if (-not [string]::IsNullOrEmpty($Password)) { + Write-Verbose ("Setting SMTP server credential(password) to: (redacted)") + $c[1].Notifications.Password = ConvertTo-SecureString $Password -Force -AsPlainText | ConvertFrom-SecureString + } + + if ($RemoveCredentials.IsPresent) + { + Write-Verbose ("Clearing credentials from notification configuration") + $c[1].Notifications.UserName = $null + $c[1].Notifications.Password = $null + } + + switch ($Tls) + { + "auto" { + if ($Port -ne 25) { $c[1].Notifications.tls = $true } + else { $c[1].Notifications.tls = $false } + Write-Verbose ("SMTP server SSL auto-calculated to: $($c[1].Notifications.tls)") + } + + "true" { + $c[1].Notifications.tls = $true + Write-Verbose ("Setting SMTP SSL to: $($c[1].Notifications.tls)") + } + "false" { + $c[1].Notifications.tls = $false + Write-Verbose ("Setting SMTP SSL to: $($c[1].Notifications.tls)") + } + } + if (-not [string]::IsNullOrEmpty($From)) { + Write-Verbose ("Setting Mail from address to: $From") + $c[1].Notifications.from = $From } + if (-not [string]::IsNullOrEmpty($FromName)) { + Write-Verbose ("Setting Mail from displayname to: $FromName") + $c[1].Notifications.fromname = $FromName } + + WriteRepositoryFile -obj $c[1] + Log ("Updated notification configuration") + } + catch { + err ("Failed to modify repository configuration: $($_.Exception.Message)") + } +} + +<# +.SYNOPSIS + Clears the repository notification configuration from the current repository + +.DESCRIPTION + This command removes notification configuration from the current repository, and as a result, notifications are turned off. + This command must be invoked inside a directory initialized as a repository using the Initialize-Repository command. + Please note that notification configuration must have been defined via the Set-RepositoryNotificationConfiguration command for this command to have any effect. + +.LINK + [Initialize-Repository](https://developers.hp.com/hp-client-management/doc/Initialize-Repository) + +.LINK + [Add-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Add-RepositoryFilter) + +.LINK + [Remove-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Remove-RepositoryFilter) + +.LINK + [Get-RepositoryInfo](https://developers.hp.com/hp-client-management/doc/Get-RepositoryInfo) + +.LINK + [Invoke-RepositorySync](https://developers.hp.com/hp-client-management/doc/Invoke-RepositorySync) + +.LINK + [Invoke-RepositoryCleanup](https://developers.hp.com/hp-client-management/doc/Invoke-RepositoryCleanup) + +.LINK + [Set-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Set-RepositoryNotificationConfiguration) + +.LINK + [Get-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Get-RepositoryNotificationConfiguration) + +.LINK + [Show-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Show-RepositoryNotificationConfiguration) + +.LINK + [Add-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Add-RepositorySyncFailureRecipient) + +.LINK + [Remove-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Remove-RepositorySyncFailureRecipient) + +.LINK + [Test-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Test-RepositoryNotificationConfiguration) + +.EXAMPLE + Clear-RepositoryNotificationConfiguration + +#> +function Clear-RepositoryNotificationConfiguration () +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Clear-RepositoryNotificationConfiguration")] + param() + Log "Clearing notification configuration" + + $c = LoadRepository + try { + if (-not $c[0]) { return } + $c[1].Notifications = $null + WriteRepositoryFile -obj $c[1] + Write-Verbose ("Ok.") + } + catch { + err ("Failed to modify repository configuration: $($_.Exception.Message)") + } +} + +<# +.SYNOPSIS + Retrieves the current notification configuration + +.DESCRIPTION + This command retrieves the current notification configuration as an object. + This command must be invoked inside a directory initialized as a repository using the Initialize-Repository command. + The current notification configuration must be set via the Set-RepositoryNotificationConfiguration command. + +.LINK + [Initialize-Repository](https://developers.hp.com/hp-client-management/doc/Initialize-Repository) + +.LINK + [Add-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Add-RepositoryFilter) + +.LINK + [Remove-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Remove-RepositoryFilter) + +.LINK + [Get-RepositoryInfo](https://developers.hp.com/hp-client-management/doc/Get-RepositoryInfo) + +.LINK + [Invoke-RepositorySync](https://developers.hp.com/hp-client-management/doc/Invoke-RepositorySync) + +.LINK + [Invoke-RepositoryCleanup](https://developers.hp.com/hp-client-management/doc/Invoke-RepositoryCleanup) + +.LINK + [Set-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Set-RepositoryNotificationConfiguration) + +.LINK + [Clear-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Clear-RepositoryNotificationConfiguration) + +.LINK + [Show-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Show-RepositoryNotificationConfiguration) + +.LINK + [Add-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Add-RepositorySyncFailureRecipient) + +.LINK + [Test-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Test-RepositoryNotificationConfiguration) + +.EXAMPLE + $config = Get-RepositoryNotificationConfiguration + + +#> +function Get-RepositoryNotificationConfiguration () +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-RepositoryNotificationConfiguration")] + param() + + $c = LoadRepository + if ((-not $c[0]) -or (-not $c[1].Notifications)) + { + return $null + } + return $c[1].Notifications +} + + +<# +.SYNOPSIS + Displays the current notification configuration onto the screen + + +.DESCRIPTION + This command retrieves the current notification configuration as user-friendly screen output. + This command must be invoked inside a directory initialized as a repository using the Initialize-Repository command. + The current notification configuration must be set via the Set-RepositoryNotificationConfiguration command. + +.LINK + [Initialize-Repository](https://developers.hp.com/hp-client-management/doc/Initialize-Repository) + +.LINK + [Add-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Add-RepositoryFilter) + +.LINK + [Remove-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Remove-RepositoryFilter) + +.LINK + [Get-RepositoryInfo](https://developers.hp.com/hp-client-management/doc/Get-RepositoryInfo) + +.LINK + [Invoke-RepositorySync](https://developers.hp.com/hp-client-management/doc/Invoke-RepositorySync) + +.LINK + [Invoke-RepositoryCleanup](https://developers.hp.com/hp-client-management/doc/Invoke-RepositoryCleanup) + +.LINK + [Set-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Set-RepositoryNotificationConfiguration) + +.LINK + [Clear-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Clear-RepositoryNotificationConfiguration) + +.LINK + [Get-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Get-RepositoryNotificationConfiguration) + +.LINK + [Add-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Add-RepositorySyncFailureRecipient) + +.LINK + [Test-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Test-RepositoryNotificationConfiguration) + +.EXAMPLE + Show-RepositoryNotificationConfiguration +#> +function Show-RepositoryNotificationConfiguration () +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Show-RepositoryNotificationConfiguration")] + param() + + try { + $c = Get-RepositoryNotificationConfiguration + if (-not $c) + { + err ("Notifications are not configured.") + return + } + + if (-not [string]::IsNullOrEmpty($c.UserName)) { + Write-Host "Notification server: smtp://$($c.username):@$($c.server):$($c.port)" + } + else { + Write-Host "Notification server: smtp://$($c.server):$($c.port)" + } + Write-Host "Email will arrive from $($c.from) with name `"$($c.fromname)`"" + + if ((-not $c.addresses) -or (-not $c.addresses.Count)) + { + Write-Host "There are no recipients configured" + return + } + foreach ($r in $c.addresses) + { + Write-Host "Recipient: $r" + } + } + catch { + err ("Failed to read repository configuration: $($_.Exception.Message)") + } + +} + +<# +.SYNOPSIS + Adds a recipient to the list of recipients to receive failure notification emails for the current repository + +.DESCRIPTION + This command adds a recipient via an email address to the list of recipients to receive failure notification emails for the current repository. If any failure occurs, notifications will be sent to this email address. + + This command must be invoked inside a directory initialized as a repository using the Initialize-Repository command. + +.PARAMETER To + Specifies the email address to add as a recipient of the failure notifications + +.LINK + [Initialize-Repository](https://developers.hp.com/hp-client-management/doc/Initialize-Repository) + +.LINK + [Add-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Add-RepositoryFilter) + +.LINK + [Remove-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Remove-RepositoryFilter) + +.LINK + [Get-RepositoryInfo](https://developers.hp.com/hp-client-management/doc/Get-RepositoryInfo) + +.LINK + [Invoke-RepositorySync](https://developers.hp.com/hp-client-management/doc/Invoke-RepositorySync) + +.LINK + [Invoke-RepositoryCleanup](https://developers.hp.com/hp-client-management/doc/Invoke-RepositoryCleanup) + +.LINK + [Set-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Set-RepositoryNotificationConfiguration) + +.LINK + [Clear-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Clear-RepositoryNotificationConfiguration) + +.LINK + [Get-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Get-RepositoryNotificationConfiguration) + +.LINK + [Show-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Show-RepositoryNotificationConfiguration) + +.LINK + [Remove-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Remove-RepositorySyncFailureRecipient) + +.LINK + [Test-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Test-RepositoryNotificationConfiguration) + +.EXAMPLE + Add-RepositorySyncFailureRecipient -to someone@mycompany.com + +#> +function Add-RepositorySyncFailureRecipient () +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Add-RepositorySyncFailureRecipient")] + param( + [Parameter(Position = 0,Mandatory = $true)] + [ValidatePattern("^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$")] + [string] + $To + ) + + Log "Adding '$To' as a recipient." + $c = LoadRepository + try { + if (-not $c[0]) { return } + + if (-not $c[1].Notifications) { + err ("Notifications are not configured") + return + } + + if (-not $c[1].Notifications.addresses) { + $c[1].Notifications.addresses = $() + } + + $c[1].Notifications.addresses += $To.trim() + $c[1].Notifications.addresses = $c[1].Notifications.addresses | Sort-Object -Unique + WriteRepositoryFile -obj ($c[1] | Sort-Object -Unique) + } + catch { + err ("Failed to modify repository configuration: $($_.Exception.Message)") + } + +} + +<# +.SYNOPSIS + Removes a recipient from the list of recipients that receive failure notification emails for the current repository + + +.DESCRIPTION + This command removes an email address as a recipient for synchronization failure messages. + This command must be invoked inside a directory initialized as a repository using the Initialize-Repository command. + Notification configured via the Set-RepositoryNotificationConfiguration command. + +.PARAMETER To + Specifies the email address to remove + +.LINK + [Initialize-Repository](https://developers.hp.com/hp-client-management/doc/Initialize-Repository) + +.LINK + [Add-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Add-RepositoryFilter) + +.LINK + [Remove-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Remove-RepositoryFilter) + +.LINK + [Get-RepositoryInfo](https://developers.hp.com/hp-client-management/doc/Get-RepositoryInfo) + +.LINK + [Invoke-RepositorySync](https://developers.hp.com/hp-client-management/doc/Invoke-RepositorySync) + +.LINK + [Invoke-RepositoryCleanup](https://developers.hp.com/hp-client-management/doc/Invoke-RepositoryCleanup) + +.LINK + [Set-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Set-RepositoryNotificationConfiguration) + +.LINK + [Clear-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Clear-RepositoryNotificationConfiguration) + +.LINK + [Get-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Get-RepositoryNotificationConfiguration) + +.LINK + [Show-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Show-RepositoryNotificationConfiguration) + +.LINK + [Remove-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Remove-RepositorySyncFailureRecipient) + +.LINK + [Test-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Test-RepositoryNotificationConfiguration) + +.EXAMPLE + Remove-RepositorySyncFailureRecipient -to someone@mycompany.com + +#> +function Remove-RepositorySyncFailureRecipient +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Remove-RepositorySyncFailureRecipient")] + param( + [Parameter(Position = 0,Mandatory = $true)] + [ValidatePattern("^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$")] + [string] + $To + ) + Log "Removing '$To' as a recipient." + $c = LoadRepository + try { + if ($c[0] -eq $false) { return } + + if (-not $c[1].Notifications) { + err ("Notifications are not configured") + return + } + + + if (-not $c[1].Notifications.addresses) { + $c[1].Notifications.addresses = $() + } + + $c[1].Notifications.addresses = $c[1].Notifications.addresses | Where-Object { $_ -ne $To.trim() } | Sort-Object -Unique + WriteRepositoryFile -obj ($c[1] | Sort-Object -Unique) + } + catch { + err ("Failed to modify repository configuration: $($_.Exception.Message)") + } +} + + +<# +.SYNOPSIS + Tests the email notification configuration by sending a test email + +.DESCRIPTION + This command sends a test email using the current repository configuration and reports + any errors associated with the send process. This command is intended to debug the email server configuration. + +.LINK + [Initialize-Repository](https://developers.hp.com/hp-client-management/doc/Initialize-Repository) + +.LINK + [Add-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Add-RepositoryFilter) + +.LINK + [Remove-RepositoryFilter](https://developers.hp.com/hp-client-management/doc/Remove-RepositoryFilter) + +.LINK + [Get-RepositoryInfo](https://developers.hp.com/hp-client-management/doc/Get-RepositoryInfo) + +.LINK + [Invoke-RepositorySync](https://developers.hp.com/hp-client-management/doc/Invoke-RepositorySync) + +.LINK + [Invoke-RepositoryCleanup](https://developers.hp.com/hp-client-management/doc/Invoke-RepositoryCleanup) + +.LINK + [Set-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Set-RepositoryNotificationConfiguration) + +.LINK + [Clear-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Clear-RepositoryNotificationConfiguration) + +.LINK + [Get-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Get-RepositoryNotificationConfiguration) + +.LINK + [Show-RepositoryNotificationConfiguration](https://developers.hp.com/hp-client-management/doc/Show-RepositoryNotificationConfiguration) + +.LINK + [Remove-RepositorySyncFailureRecipient](https://developers.hp.com/hp-client-management/doc/Remove-RepositorySyncFailureRecipient) + +.EXAMPLE + Test-RepositoryNotificationConfiguration + +#> +function Test-RepositoryNotificationConfiguration +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Test-RepositoryNotificationConfiguration")] + param() + + Log ("test email started") + send "Repository Failure Notification (Test only)" "No content." -html $false + Write-Verbose ("Ok.") +} + +<# +.SYNOPSIS + Sets repository configuration values + +.DESCRIPTION + This command is used to configure different settings of the repository synchronization: + + - OnRemoteFileNotFound: Indicates the behavior for when the SoftPaq is not found on the remote site. 'Fail' stops the execution. 'LogAndContinue' logs the errors and continues the execution. + - RepositoryReport: Indicates the format of the report generated at repository synchronization. The default format is 'CSV' and other options available are 'JSON,' 'XML,' and 'ExcelCSV.' + - OfflineCacheMode: Indicates that all repository files are required for offline use. Repository synchronization will include platform list, advisory, and knowledge base files. The default value is 'Disable' and the other option is 'Enable.' + +.PARAMETER Setting + Specifies the setting to configure. The value must be one of the following values: 'OnRemoteFileNotFound', 'OfflineCacheMode', or 'RepositoryReport'. + +.PARAMETER Value + Specifies the new value for the OnRemoteFileNotFound setting. The value must be either: 'Fail' (default), or 'LogAndContinue'. + +.PARAMETER CacheValue + Specifies the new value for the OfflineCacheMode setting. The value must be either: 'Disable' (default), or 'Enable'. + +.PARAMETER Format + Specifies the new value for the RepositoryReport setting. The value must be one of the following: 'CSV' (default), 'JSon', 'XML', or 'ExcelCSV'. + +.LINK + [Initialize-Repository](https://developers.hp.com/hp-client-management/doc/Initialize-Repository) + +.LINK + [Get-RepositoryConfiguration](https://developers.hp.com/hp-client-management/doc/Get-RepositoryConfiguration) + +.Example + Set-RepositoryConfiguration -Setting OnRemoteFileNotFound -Value LogAndContinue + +.Example + Set-RepositoryConfiguration -Setting OfflineCacheMode -CacheValue Enable + +.Example + Set-RepositoryConfiguration -Setting RepositoryReport -Format CSV + +.NOTES + - When using HP Image Assistant and offline mode, use: Set-RepositoryConfiguration -Setting OfflineCacheMode -CacheValue Enable + - More information on using HPIA with CMSL can be found at this [blog post](https://developers.hp.com/hp-client-management/blog/driver-injection-hp-image-assistant-and-hp-cmsl-in-memcm). + - To create a report outside the repository, use the New-RepositoryReport command. +#> +function Set-RepositoryConfiguration +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Set-RepositoryConfiguration")] + param( + [ValidateSet('OnRemoteFileNotFound','OfflineCacheMode','RepositoryReport')] + [Parameter(ParameterSetName = "ErrorHandler",Position = 0,Mandatory = $true)] + [Parameter(ParameterSetName = "CacheMode",Position = 0,Mandatory = $true)] + [Parameter(ParameterSetName = "ReportHandler",Position = 0,Mandatory = $true)] + [string]$Setting, + + [Parameter(ParameterSetName = "ErrorHandler",Position = 1,Mandatory = $true)] + [ErrorHandling]$Value, + + [ValidateSet('Enable','Disable')] + [Parameter(ParameterSetName = "CacheMode",Position = 1,Mandatory = $true)] + [string]$CacheValue, + + [ValidateSet('CSV','JSon','XML','ExcelCSV')] + [Parameter(ParameterSetName = "ReportHandler",Position = 1,Mandatory = $true)] + [string]$Format + ) + $c = LoadRepository + if (-not $c[0]) { return } + if ($Setting -eq "OnRemoteFileNotFound") { + if (($Value -eq "Fail") -or ($Value -eq "LogAndContinue")) { + $c[1].settings. "${Setting}" = $Value + WriteRepositoryFile -obj $c[1] + Write-Verbose ("Ok.") + } + else { + Write-Host -ForegroundColor Magenta "Enter valid Value for $Setting." + Write-LogWarning "Enter valid Value for $Setting." + } + } + elseif ($Setting -eq "OfflineCacheMode") { + if ($CacheValue) { + $c[1].settings. "${Setting}" = $CacheValue + WriteRepositoryFile -obj $c[1] + Write-Verbose ("Ok.") + } + else { + Write-Host -ForegroundColor Magenta "Enter valid CacheValue for $Setting." + Write-LogWarning "Enter valid CacheValue for $Setting." + } + } + elseif ($Setting -eq "RepositoryReport") { + if ($Format) { + $c[1].settings. "${Setting}" = $Format + WriteRepositoryFile -obj $c[1] + Write-Verbose ("Ok.") + } + else { + Write-Host -ForegroundColor Magenta "Enter valid Format for $Setting." + Write-LogWarning "Enter valid Format for $Setting." + } + } +} + +<# +.SYNOPSIS + Retrieves the configuration values for a specified setting in the current repository + +.DESCRIPTION + This command retrieves various configuration options that control synchronization behavior. The settings this command can retrieve include: + + - OnRemoteFileNotFound: Indicates the behavior for when the SoftPaq is not found on the remote site. 'Fail' stops the execution. 'LogAndContinue' logs the errors and continues the execution. + - RepositoryReport: Indicates the format of the report generated at repository synchronization. The default format is 'CSV' and other options available are 'JSON', 'XML', and 'ExcelCSV'. + - OfflineCacheMode: Indicates that all repository files are required for offline use. Repository synchronization will include platform list, advisory, and knowledge base files. The default value is 'Disable' and the other option is 'Enable'. + + +.PARAMETER setting + Specifies the setting to retrieve. The value can be one of the following: 'OnRemoteFileNotFound', 'RepositoryReport', or 'OfflineCacheMode'. + + +.Example + Get-RepositoryConfiguration -Setting OfflineCacheMode + +.Example + Get-RepositoryConfiguration -Setting OnRemoteFileNotFound + +.Example + Get-RepositoryConfiguration -Setting RepositoryReport + +.LINK + [Set-RepositoryConfiguration](https://developers.hp.com/hp-client-management/doc/Set-RepositoryConfiguration) + +.LINK + [Initialize-Repository](https://developers.hp.com/hp-client-management/doc/Initialize-Repository) +#> +function Get-RepositoryConfiguration +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-RepositoryConfiguration")] + param( + [Parameter(Position = 0,Mandatory = $true)] + [string] + [ValidateSet('OnRemoteFileNotFound','OfflineCacheMode','RepositoryReport')] + $Setting + ) + $c = LoadRepository + if (-not $c[0]) { return } + $c[1].settings. "${Setting}" +} + + +<# +.SYNOPSIS + Creates a report from a repository directory + +.DESCRIPTION + This command creates a report from a repository directory or any directory containing CVAs (and EXEs) in one of the supported formats. + + The supported formats are: + + - XML: Returns an XML object + - JSON: Returns a JSON document + - CSV: Returns a CSV object + - ExcelCSV: Returns a CSV object containing an Excel hint that defines the comma character as the delimiter. Use this format only if you plan on opening the CSV file with Excel. + + If a format is not specified, this command will return the output as PowerShell objects to the pipeline. Please note that the repository directory must contain CVAs for the command to generate a report successfully. EXEs are not required, but the EXEs will allow information like the time of download and size in bytes to be included in the report. + +.PARAMETER Format + Specifies the output format (CSV, JSON, or XML) of the report. If not specified, this command will return the output as PowerShell objects. + +.PARAMETER RepositoryPath + Specifies a different location for the repository. By default, this command assumes the repository is the current directory. + +.PARAMETER OutputFile + Specifies a file to write the output to. You can specify a relative path or an absolute path. If a relative path is specified, the file will be written relative to the current directory and if RepositoryPath parameter is also specified, the file will still be written relative to the current directory and not relative to the value in RepositoryPath. + This parameter requires the -Format parameter to also be specified. + If specified, this command will create the file (if it does not exist) and write the output to the file instead of returning the output as a PowerShell, XML, CSV, or JSON object. + Please note that if the output file already exists, the contents of the file will be overwritten. + + +.EXAMPLE + New-RepositoryReport -Format JSON -RepositoryPath c:\myrepository\softpaqs -OutputFile c:\repository\today.json + +.EXAMPLE + New-RepositoryReport -Format ExcelCSV -RepositoryPath c:\myrepository\softpaqs -OutputFile c:\repository\today.csv + +.NOTES + This command currently supports scenarios where the SoftPaq executable is stored under the format sp.exe. +#> +function New-RepositoryReport +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/New-RepositoryReport")] + param( + [Parameter(Position = 0,Mandatory = $false)] + [ValidateSet('CSV','JSon','XML','ExcelCSV')] + [string]$Format, + + [Parameter(Position = 1,Mandatory = $false)] + [System.IO.DirectoryInfo]$RepositoryPath = '.', + + [Parameter(Position = 2,Mandatory = $false)] + [System.IO.FileInfo]$OutputFile + ) + if ($OutputFile -and -not $format) { throw "OutputFile parameter requires a Format specifier" } + + $cvaList = @(Get-ChildItem -Path $RepositoryPath -Filter '*.cva') + + if (-not $cvaList -or -not $cvaList.Length) + { + throw [System.IO.FileNotFoundException]"Directory '$(Get-Location)' does not contain CVA files." + } + + if($cvaList.Length -eq 1){ + Write-Verbose "Processing $($cvaList.Length) CVA" + } + else{ + Write-Verbose "Processing $($cvaList.Length) CVAs" + } + + $results = $cvaList | ForEach-Object { + Write-Verbose "Processing $($_.FullName)" + $cva = Get-HPPrivateReadINI $_.FullName + + try { + $exe = Get-ChildItem -Path ($cva.Softpaq.SoftpaqNumber.trim() + ".exe") -ErrorAction stop + } + catch [System.Management.Automation.ItemNotFoundException]{ + $exe = $null + } + + [pscustomobject]@{ + Softpaq = $cva.Softpaq.SoftpaqNumber + Vendor = $cva.General.VendorName + Title = $cva. "Software Title".US + type = if ($Cva.General.Category.contains("-")) { $Cva.General.Category.substring(0,$Cva.General.Category.IndexOf('-')).trim() } else { $Cva.General.Category } + Version = "$($cva.General.Version) Rev.$($cva.General.Revision)" + Downloaded = if ($exe) { $exe.CreationTime } else { "" } + Size = if ($exe) { "$($exe.Length)" } else { "" } + } + } + switch ($format) + { + "CSV" { + $r = $results | ConvertTo-Csv -NoTypeInformation + } + "ExcelCSV" { + + $r = $results | ConvertTo-Csv -NoTypeInformation + $r = [string[]]"sep=," + $r + } + "JSon" { + $r = $results | ConvertTo-Json + } + "XML" { + $r = $results | ConvertTo-Xml -NoTypeInformation + } + default { + return $results + } + } + + if ($OutputFile) { + if ($format -eq "xml") { $r = $r.OuterXml } + $r | Out-File -FilePath $OutputFile -Encoding utf8 + } + else { $r } +} + + + + + + +# SIG # Begin signature block +# MIIoHQYJKoZIhvcNAQcCoIIoDjCCKAoCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCLWu0PSTkPMWFM +# c0B05gEUfCsg+OW0Zi9AF2uypDK+BKCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6TCCGeUCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIGf94P29 +# AzNJxgRCSj4z+xQQOKeAE4SehhHxaoC2hLAtMA0GCSqGSIb3DQEBAQUABIIBgGw2 +# 09K5obK8dTPFVEJ7Xbn4i/hSIJflqElHd00LPKNPOkMNgkwZJojNvNRwqLXGRqWM +# YB08iqOCLGKLU4xIy+nRNyQdtv+UaIyLlvDCPRDL5G/cqKOpWrWW9IHIkT5xYOlJ +# 3ApWuOEQzfgPf6i2QmC1PacIUApd43iGOICtAGQZGZyo9I0jHozcPShM2SOLQiPC +# dNHQPJ0Em1WOiJYOtXeDc+0lv8tBnPgQ9qfsijzAx8jVxFRLhuV5bxAnnzOZLpr4 +# zHGPDftZBj92uyKuYsdtPFluQbMCdtc/VFmEsiZatl7NpAlCmcdTryBJrEusUMvl +# qDXUXCoHUpOVrM9jNxxUIXIGh3GM7Qoe3F7T38EtUIfLcYHRe2ubqHp70csR7kA8 +# I071EYYGW6ZgnOvhe/pWVg10Hdo8kRdtvEONrUGvf5isPdBNLzDVDAqGzju2YA9P +# OqwWy6f9fm7kQfTJK8jCeOcv++sACUungTFToqsa3m4MJFE442uPA5UwevU2caGC +# Fz8wghc7BgorBgEEAYI3AwMBMYIXKzCCFycGCSqGSIb3DQEHAqCCFxgwghcUAgED +# MQ8wDQYJYIZIAWUDBAIBBQAwdwYLKoZIhvcNAQkQAQSgaARmMGQCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCC7aA5hNChRtpC2L5fTewohV+Xwyw39AIPV +# 87ZVXULQYwIQeHwpzsyt37Gui1YxkoSNERgPMjAyNDA4MjcxNjU1NDlaoIITCTCC +# BsIwggSqoAMCAQICEAVEr/OUnQg5pr/bP1/lYRYwDQYJKoZIhvcNAQELBQAwYzEL +# MAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJE +# aWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBD +# QTAeFw0yMzA3MTQwMDAwMDBaFw0zNDEwMTMyMzU5NTlaMEgxCzAJBgNVBAYTAlVT +# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEgMB4GA1UEAxMXRGlnaUNlcnQgVGlt +# ZXN0YW1wIDIwMjMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjU0WH +# HYOOW6w+VLMj4M+f1+XS512hDgncL0ijl3o7Kpxn3GIVWMGpkxGnzaqyat0QKYoe +# YmNp01icNXG/OpfrlFCPHCDqx5o7L5Zm42nnaf5bw9YrIBzBl5S0pVCB8s/LB6Yw +# aMqDQtr8fwkklKSCGtpqutg7yl3eGRiF+0XqDWFsnf5xXsQGmjzwxS55DxtmUuPI +# 1j5f2kPThPXQx/ZILV5FdZZ1/t0QoRuDwbjmUpW1R9d4KTlr4HhZl+NEK0rVlc7v +# CBfqgmRN/yPjyobutKQhZHDr1eWg2mOzLukF7qr2JPUdvJscsrdf3/Dudn0xmWVH +# VZ1KJC+sK5e+n+T9e3M+Mu5SNPvUu+vUoCw0m+PebmQZBzcBkQ8ctVHNqkxmg4ho +# Yru8QRt4GW3k2Q/gWEH72LEs4VGvtK0VBhTqYggT02kefGRNnQ/fztFejKqrUBXJ +# s8q818Q7aESjpTtC/XN97t0K/3k0EH6mXApYTAA+hWl1x4Nk1nXNjxJ2VqUk+tfE +# ayG66B80mC866msBsPf7Kobse1I4qZgJoXGybHGvPrhvltXhEBP+YUcKjP7wtsfV +# x95sJPC/QoLKoHE9nJKTBLRpcCcNT7e1NtHJXwikcKPsCvERLmTgyyIryvEoEyFJ +# UX4GZtM7vvrrkTjYUQfKlLfiUKHzOtOKg8tAewIDAQABo4IBizCCAYcwDgYDVR0P +# AQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# IAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQYMBaAFLoW +# 2W1NhS9zKXaaL3WMaiCPnshvMB0GA1UdDgQWBBSltu8T5+/N0GSh1VapZTGj3tXj +# STBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln +# aUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3JsMIGQ +# BggrBgEFBQcBAQSBgzCBgDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl +# cnQuY29tMFgGCCsGAQUFBzAChkxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v +# RGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3J0 +# MA0GCSqGSIb3DQEBCwUAA4ICAQCBGtbeoKm1mBe8cI1PijxonNgl/8ss5M3qXSKS +# 7IwiAqm4z4Co2efjxe0mgopxLxjdTrbebNfhYJwr7e09SI64a7p8Xb3CYTdoSXej +# 65CqEtcnhfOOHpLawkA4n13IoC4leCWdKgV6hCmYtld5j9smViuw86e9NwzYmHZP +# VrlSwradOKmB521BXIxp0bkrxMZ7z5z6eOKTGnaiaXXTUOREEr4gDZ6pRND45Ul3 +# CFohxbTPmJUaVLq5vMFpGbrPFvKDNzRusEEm3d5al08zjdSNd311RaGlWCZqA0Xe +# 2VC1UIyvVr1MxeFGxSjTredDAHDezJieGYkD6tSRN+9NUvPJYCHEVkft2hFLjDLD +# iOZY4rbbPvlfsELWj+MXkdGqwFXjhr+sJyxB0JozSqg21Llyln6XeThIX8rC3D0y +# 33XWNmdaifj2p8flTzU8AL2+nCpseQHc2kTmOt44OwdeOVj0fHMxVaCAEcsUDH6u +# vP6k63llqmjWIso765qCNVcoFstp8jKastLYOrixRoZruhf9xHdsFWyuq69zOuhJ +# RrfVf8y2OMDY7Bz1tqG4QyzfTkx9HmhwwHcK1ALgXGC7KP845VJa1qwXIiNO9OzT +# F/tQa/8Hdx9xl0RBybhG02wyfFgvZ0dl5Rtztpn5aywGRu9BHvDwX+Db2a2QgESv +# gBBBijCCBq4wggSWoAMCAQICEAc2N7ckVHzYR6z9KGYqXlswDQYJKoZIhvcNAQEL +# BQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UE +# CxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBS +# b290IEc0MB4XDTIyMDMyMzAwMDAwMFoXDTM3MDMyMjIzNTk1OVowYzELMAkGA1UE +# BhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2Vy +# dCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMaGNQZJs8E9cklRVcclA8TykTep +# l1Gh1tKD0Z5Mom2gsMyD+Vr2EaFEFUJfpIjzaPp985yJC3+dH54PMx9QEwsmc5Zt +# +FeoAn39Q7SE2hHxc7Gz7iuAhIoiGN/r2j3EF3+rGSs+QtxnjupRPfDWVtTnKC3r +# 07G1decfBmWNlCnT2exp39mQh0YAe9tEQYncfGpXevA3eZ9drMvohGS0UvJ2R/dh +# gxndX7RUCyFobjchu0CsX7LeSn3O9TkSZ+8OpWNs5KbFHc02DVzV5huowWR0QKfA +# csW6Th+xtVhNef7Xj3OTrCw54qVI1vCwMROpVymWJy71h6aPTnYVVSZwmCZ/oBpH +# IEPjQ2OAe3VuJyWQmDo4EbP29p7mO1vsgd4iFNmCKseSv6De4z6ic/rnH1pslPJS +# lRErWHRAKKtzQ87fSqEcazjFKfPKqpZzQmiftkaznTqj1QPgv/CiPMpC3BhIfxQ0 +# z9JMq++bPf4OuGQq+nUoJEHtQr8FnGZJUlD0UfM2SU2LINIsVzV5K6jzRWC8I41Y +# 99xh3pP+OcD5sjClTNfpmEpYPtMDiP6zj9NeS3YSUZPJjAw7W4oiqMEmCPkUEBID +# fV8ju2TjY+Cm4T72wnSyPx4JduyrXUZ14mCjWAkBKAAOhFTuzuldyF4wEr1GnrXT +# drnSDmuZDNIztM2xAgMBAAGjggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBS6FtltTYUvcyl2mi91jGogj57IbzAfBgNVHSMEGDAWgBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUH +# AwgwdwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp +# Y2VydC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv +# bS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0 +# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3Js +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsF +# AAOCAgEAfVmOwJO2b5ipRCIBfmbW2CFC4bAYLhBNE88wU86/GPvHUF3iSyn7cIoN +# qilp/GnBzx0H6T5gyNgL5Vxb122H+oQgJTQxZ822EpZvxFBMYh0MCIKoFr2pVs8V +# c40BIiXOlWk/R3f7cnQU1/+rT4osequFzUNf7WC2qk+RZp4snuCKrOX9jLxkJods +# kr2dfNBwCnzvqLx1T7pa96kQsl3p/yhUifDVinF2ZdrM8HKjI/rAJ4JErpknG6sk +# HibBt94q6/aesXmZgaNWhqsKRcnfxI2g55j7+6adcq/Ex8HBanHZxhOACcS2n82H +# hyS7T6NJuXdmkfFynOlLAlKnN36TU6w7HQhJD5TNOXrd/yVjmScsPT9rp/Fmw0HN +# T7ZAmyEhQNC3EyTN3B14OuSereU0cZLXJmvkOHOrpgFPvT87eK1MrfvElXvtCl8z +# OYdBeHo46Zzh3SP9HSjTx/no8Zhf+yvYfvJGnXUsHicsJttvFXseGYs2uJPU5vIX +# mVnKcPA3v5gA3yAWTyf7YGcWoWa63VXAOimGsJigK+2VQbc61RWYMbRiCQ8KvYHZ +# E/6/pNHzV9m8BPqC3jLfBInwAM1dwvnQI38AC+R2AibZ8GV2QqYphwlHK+Z/GqSF +# D/yYlvZVVCsfgPrA8g4r5db7qS9EFUrnEw4d2zc4GqEr9u3WfPwwggWNMIIEdaAD +# AgECAhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYT +# AlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2Vy +# dC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0y +# MjA4MDEwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYD +# VQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAf +# BgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEB +# BQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4Smn +# PVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6f +# qVcWWVVyr2iTcMKyunWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O +# 7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZ +# Vu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4F +# fYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLm +# qaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMre +# Sx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/ch +# srIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+U +# DCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xM +# dT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUb +# AgMBAAGjggE6MIIBNjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAO +# BgNVHQ8BAf8EBAMCAYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRw +# Oi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRz +# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0f +# BD4wPDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNz +# dXJlZElEUm9vdENBLmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEM +# BQADggEBAHCgv0NcVec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLt +# pIh3bb0aFPQTSnovLbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouy +# XtTP0UNEm0Mh65ZyoUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jS +# TEAZNUZqaVSwuKFWjuyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAc +# AgPLILCsWKAOQGPFmCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2 +# h5b9W9FcrBjDTZ9ztwGpn1eqXijiuZQxggN2MIIDcgIBATB3MGMxCzAJBgNVBAYT +# AlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQg +# VHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OU +# nQg5pr/bP1/lYRYwDQYJYIZIAWUDBAIBBQCggdEwGgYJKoZIhvcNAQkDMQ0GCyqG +# SIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNDA4MjcxNjU1NDlaMCsGCyqGSIb3 +# DQEJEAIMMRwwGjAYMBYEFGbwKzLCwskPgl3OqorJxk8ZnM9AMC8GCSqGSIb3DQEJ +# BDEiBCB6wXI1EaPuxT1qzuNtfpFv70JL2YgjjM0uRYcST3HX/zA3BgsqhkiG9w0B +# CRACLzEoMCYwJDAiBCDS9uRt7XQizNHUQFdoQTZvgoraVZquMxavTRqa1Ax4KDAN +# BgkqhkiG9w0BAQEFAASCAgAsc19nhCO9BBRWRAnlIVbPsC/YbA/6o5qRsG26k123 +# goBWOtRQ1ZkeD0pQVvT7fh1Hpd32z6F7hDjtfWCh0j5AAzef9V1z9dMoe1pYNeaz +# 96lLqDmls57Hf2RJB31tV2CuC6I4oD8HToEYpMTxJbP1W0ila/hQ1+bZeHw21hVj +# jKijDuyilnh05foXLYzzYRDIeWv1c+wc9Q76zv7lP651qLMohkqPg/yPXuaQtreY +# aq8kVm9iabV8Sz5sgPEAgSnZcUecKKLVmAqHHO0q6i+Z2DQaw9zwLG3FCXckaO6C +# Cup3h7l06K41SJrY/zZWr+cC5ovygRBA0+BjQ6mmXMyxLUgbU+eNqqys8PbjimJk +# 9fgt2fU2xE70CyuwEUvkvVLzFCcZXDexFjat3PDTyXwlHJUf6NOtkvNOoxqiS/XQ +# UdoDNFbZYndaT59Hg5z+zR3AUhVawV9g2cgWbCvWdzsBSctMOzCylCnHdOMowe7M +# RbbNhhNyqGDSthCMp4e66mbo/SWmzq3OP1D700B/2YYMeguLajE3r2qvdxmMkGzm +# /l+bHvHy7jvVPnCw83F32C/e58p4b/qiy1/YY9XYnQ5BON/Kp5rOgbHbL5yhdELZ +# yih64+W8rnxCDTmU7J33++JPcSF1zr2cUrriE9kA0cj+xqJhsQjA7L31p42G8mYP +# RQ== +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Repo/license.txt b/Bios-Update-HP-v2.0/module/HP.Repo/license.txt new file mode 100644 index 0000000..b93ca37 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Repo/license.txt @@ -0,0 +1,248 @@ +End-User License Agreement + +READ CAREFULLY BEFORE USING THIS SOFTWARE + +This End-User license Agreement ("EULA") is a legal agreement +between (a) you (either an individual or a single entity) and (b) HP Inc. +("HP") that governs your use of any Software Product, installed on or +made available by HP for use with your HP product ("HP Product"), that +is not otherwise subject to a separate license agreement between you +and HP or its suppliers. Other software may contain a EULA in its online +documentation. The term "Software Product" means computer software +and may include associated media, printed materials and "online" or +electronic documentation. + +An amendment or addendum to this EULA may accompany the HP +Product. + +RIGHTS IN THE SOFTWARE PRODUCT ARE OFFERED ONLY ON THE +CONDITION THAT YOU AGREE TO ALL TERMS AND CONDITIONS OF +THIS EULA. BY INSTALLING, COPYING, DOWNLOADING, OR +OTHERWISE USING THE SOFTWARE PRODUCT, YOU AGREE TO BE +BOUND BY THE TERMS OF THIS EULA. IF YOU DO NOT ACCEPT THESE +LICENSE TERMS, YOUR SOLE REMEDY IS TO RETURN THE ENTIRE +UNUSED PRODUCT (HARDWARE AND SOFTWARE) WITHIN 14 DAYS +FOR A REFUND SUBJECT TO THE REFUND POLICY OF YOUR PLACE OF +PURCHASE. + +1. GRANT OF LICENSE. HP grants you the following rights provided +you comply with all terms and conditions of this EULA: + +a. Use. You may use the Software Product on a single computer ("Your +Computer"). If the Software Product is provided to you via the internet +and was originally licensed for use on more than one computer, you +may install and use the Software Product only on those computers. You +may not separate component parts of the Software Product for use on +more than one computer. You do not have the right to distribute the +Software Product. You may load the Software Product into Your +Computer's temporary memory (RAM) for purposes of using the +Software Product. + +b. Storage. You may copy the Software Product into the local memory +or storage device of the HP Product. + +c. Copying. You may make archival or back-up copies of the Software +Product, provided the copy contains all of the original Software +Product's proprietary notices and that it is used only for back-up +purposes. + +d. Reservation of Rights. HP and its suppliers reserve all rights not +expressly granted to you in this EULA. + +e. Freeware. Notwithstanding the terms and conditions of this EULA, all +or any portion of the Software Product which constitutes non- +proprietary HP software or software provided under public license by +third parties ("Freeware"), is licensed to you subject to the terms and +conditions of the software license agreement accompanying such +Freeware whether in the form of a discrete agreement, shrink wrap +license or electronic license terms accepted at time of download. Use of +the Freeware by you shall be governed entirely by the terms and +conditions of such license. + +f. Recovery Solution. Any software recovery solution provided with/for +your HP Product, whether in the form of a hard disk drive-based +solution, an external media-based recovery solution (e.g. floppy disk, +CD or DVD) or an equivalent solution delivered in any other form, may +only be used for restoring the hard disk of the HP Product with/for +which the recovery solution was originally purchased. The use of any +Microsoft operating system software contained in such recovery +solution shall be governed by the Microsoft License Agreement. + +2. UPGRADES. To use a Software Product identified as an upgrade, +you must first be licensed for the original Software Product identified +by HP as eligible for the upgrade. After upgrading, you may no longer +use the original Software Product that formed the basis for your +upgrade eligibility. By using the Software Product, you also agree that +HP may automatically access your HP Product when connected to the +internet to check the version or status of certain Software Products and +may automatically download and install upgrades or updates to such +Software Products on to your HP Product to provide new versions or +updates required to maintain the functionality, performance, or security +of the HP Software and your HP Product and facilitate the provision of +support or other services provided to you. In certain cases, and +depending on the type of upgrade or update, notifications will be +provided to you (via pop-up or other means), which may require you to +initiate the upgrade or update. + +3. ADDITIONAL SOFTWARE. This EULA applies to updates or +supplements to the original Software Product provided by HP unless +HP provides other terms along with the update or supplement. In case +of a conflict between such terms, the other terms will prevail. + +4. TRANSFER. + +a. Third Party. The initial user of the Software Product may make a +one-time transfer of the Software Product to another end user. Any +transfer must include all component parts, media, printed materials, +this EULA, and if applicable, the Certificate of Authenticity. The transfer +may not be an indirect transfer, such as a consignment. Prior to the +transfer, the end user receiving the transferred product must agree to +all the EULA terms. Upon transfer of the Software Product, your license +is automatically terminated. + +b. Restrictions. You may not rent, lease or lend the Software Product or +use the Software Product for commercial timesharing or bureau use. +You may not sublicense, assign or transfer the license or Software +Product except as expressly provided in this EULA. + +5. PROPRIETARY RIGHTS. All intellectual property rights in the +Software Product and user documentation are owned by HP or its +suppliers and are protected by law, including but not limited to United +States copyright, trade secret, and trademark law, as well as other +applicable laws and international treaty provisions. You shall not +remove any product identification, copyright notices or proprietary +restrictions from the Software Product. + +6. LIMITATION ON REVERSE ENGINEERING. You may not reverse +engineer, decompile, or disassemble the Software Product, except and +only to the extent that the right to do so is mandated under applicable +law notwithstanding this limitation or it is expressly provided for in this +EULA. + +7. TERM. This EULA is effective unless terminated or rejected. This +EULA will also terminate upon conditions set forth elsewhere in this +EULA or if you fail to comply with any term or condition of this EULA. + +8. CONSENT TO COLLECTION/USE OF DATA. + +a. HP will use cookies and other web technology tools to collect +anonymous technical information related to HP Software and your HP +Product. This data will be used to provide the upgrades and related +support or other services described in Section 2. HP will also collect +personal information including your Internet Protocol address or other +unique identifier information associated with your HP Product and data +provided by you on registration of your HP Product. As well as +providing the upgrades and related support or other services, this data +will be used for sending marketing communications to you (in each +case with your express consent where required by applicable law). +To the extent permitted by applicable law, by accepting these terms +and conditions you consent to the collection and use of anonymous +and personal data by HP, its subsidiaries, and affiliates as described in +this EULA and as further described in HP�s privacy policy +www.hp.com/go/privacy + +b. Collection/Use by Third Parties. Certain software programs included +in your HP Product are provided and separately licensed to you by third +party providers (�Third Party Software�). Third Party Software may be +installed and operational on your HP Product even if you choose not to +activate/purchase such software. Third Party Software may collect and +transmit technical information about your system (i.e., IP address, +unique device identifier, software version installed, etc.) and other +system data. This information is used by the third party to identify +technical system attributes and ensure that the most current version of +the software has been installed on your system. If you do not want the +Third Party Software to collect this technical information or +automatically send you version updates, you should uninstall the +software prior to connecting to the Internet. + +9. DISCLAIMER OF WARRANTIES. TO THE MAXIMUM EXTENT +PERMITTED BY APPLICABLE LAW, HP AND ITS SUPPLIERS PROVIDE THE +SOFTWARE PRODUCT �AS IS� AND WITH ALL FAULTS, AND HEREBY +DISCLAIM ALL OTHER WARRANTIES, GUARANTEES, AND CONDITIONS, +EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT +LIMITED TO, WARRANTIES OF TITLE AND NON-INFRINGEMENT, ANY +IMPLIED WARRANTIES, DUTIES, GUARANTEES, OR CONDITIONS OF +MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A +PARTICULAR PURPOSE, AND OF LACK OF VIRUSES ALL WITH REGARD +TO THE SOFTWARE PRODUCT. Some states/jurisdictions do not allow +exclusion of implied warranties or limitations on the duration of implied +warranties, so the above disclaimer may not apply to you in its entirety. +IN AUSTRALIA AND NEW ZEALAND, THE SOFTWARE COMES WITH +GUARANTEES THAT CANNOT BE EXCLUDED UNDER AUSTRALIAN AND +NEW ZEALAND CONSUMER LAWS. AUSTRALIAN CONSUMERS ARE +ENTITLED TO A REPLACEMENT OR A REFUND FOR A MAJOR FAILURE +AND COMPENSATION FOR OTHER REASONABLY FORESEEABLE LOSS +OR DAMAGE. AUSTRALIAN CONSUMERS ARE ALSO ENTITLED TO +HAVE THE SOFTWARE REPAIRED OR REPLACED IF IT FAILS TO BE OF +ACCEPTABLE QUALITY AND THE FAILURE DOES NOT AMOUNT TO A +MAJOR FAILURE. NEW ZEALAND CONSUMERS WHO ARE PURCHASING +GOODS FOR PERSONAL, DOMESTIC OR HOUSEHOLD USE OR +CONSUMPTION AND NOT FOR THE PURPOSE OF A BUSINESS (�NEW +ZEALAND CONSUMERS�) ARE ENTITLED TO REPAIR, REPLACEMENT OR +REFUND FOR A FAILURE AND COMPENSATION FOR OTHER +REASONABLY FORESEEABLE LOSS OR DAMAGE. + +10. LIMITATION OF LIABILITY. Subject to local law, notwithstanding +any damages that you might incur, the entire liability of HP and any of +its suppliers under any provision of this EULA and your exclusive +remedy for all of the foregoing shall be limited to the greater of the +amount actually paid by you separately for the Software Product or U.S. +$5.00. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN +NO EVENT SHALL HP OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, +INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES +WHATSOEVER, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR +LOSS OF PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR +BUSINESS INTERRUPTION, FOR PERSONAL INJURY, FOR LOSS OF +PRIVACY ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF +OR INABILITY TO USE THE SOFTWARE PRODUCT, OR OTHERWISE IN +CONNECTION WITH ANY PROVISION OF THIS EULA, EVEN IF HP OR +ANY SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES AND EVEN IF THE REMEDY FAILS OF ITS ESSENTIAL +PURPOSE. Some states/jurisdictions do not allow the exclusion or +limitation of incidental or consequential damages, so the above +limitation or exclusion may not apply to you. + +11. U.S. GOVERNMENT CUSTOMERS. Consistent with FAR 12.211 +and 12.212, Commercial Computer Software, Computer Software +Documentation, and Technical Data for Commercial Items are licensed +to the U.S. Government under HP's standard commercial license. + +12. COMPLIANCE WITH EXPORT LAWS. You shall comply with all +laws and regulations of the United States and other countries ("Export +Laws") to assure that the Software Product is not (1) exported, directly +or indirectly, in violation of Export Laws, or (2) used for any purpose +prohibited by Export Laws, including, without limitation, nuclear, +chemical, or biological weapons proliferation. + +13. CAPACITY AND AUTHORITY TO CONTRACT. You represent that +you are of the legal age of majority in your state of residence and, if +applicable, you are duly authorized by your employer to enter into this +contract. + +14. APPLICABLE LAW. This EULA is governed by the laws of the +country in which the equipment was purchased. + +15. ENTIRE AGREEMENT. This EULA (including any addendum or +amendment to this EULA which is included with the HP Product) is the +entire agreement between you and HP relating to the Software Product +and it supersedes all prior or contemporaneous oral or written +communications, proposals and representations with respect to the +Software Product or any other subject matter covered by this EULA. To +the extent the terms of any HP policies or programs for support +services conflict with the terms of this EULA, the terms of this EULA +shall control. + +�Copyright 2018-2024 HP Development Company, L.P.. + +The information contained herein is subject to change without notice. +All other product names mentioned herein may be trademarks of their +respective companies. To the extent permitted by applicable law, the +only warranties for HP products and services are set forth in the express +warranty statements accompanying such products and services. +Nothing herein should be construed as constituting an additional +warranty. To the extent permitted by applicable law, HP shall not be +liable for technical or editorial errors or omissions contained herein. + +First Edition: August 2015 +817678-001 + diff --git a/Bios-Update-HP-v2.0/module/HP.Retail/HP.Retail.psd1 b/Bios-Update-HP-v2.0/module/HP.Retail/HP.Retail.psd1 new file mode 100644 index 0000000..c092d63 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Retail/HP.Retail.psd1 @@ -0,0 +1,256 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + + + +@{ + + RootModule = 'HP.Retail.psm1' + #FullModuleVersion = '1.7.2.774' + ModuleVersion = '1.7.2' + GUID = '735c53e1-1a4c-4512-88a6-77137a8ba45a' + Author = 'HP Development Company, L.P.' + CompanyName = 'HP Inc' + Copyright = '(C) Copyright 2018-2024 HP Development Company, L.P.' + Description = 'Retail Point of Sale Module for HP Client Management Script Library' + PowerShellVersion = '5.1' + + FunctionsToExport = + 'Get-HPRetailSmartDockConfiguration', + 'Set-HPRetailSmartDockConfiguration' + + PrivateData = @{ + PSData = @{ + LicenseUri = 'https://developers.hp.com/node/11493' + RequireLicenseAcceptance = $true + } +} + +} + + +# SIG # Begin signature block +# MIIoHQYJKoZIhvcNAQcCoIIoDjCCKAoCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBiLedthf43OXBf +# d6ith9R+z2cx5nH/K4JvKog5Js8FKaCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6TCCGeUCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIDc6yU+w +# YiZFHcS4rJ0alYziGlLqiKXCmymgsce2apMTMA0GCSqGSIb3DQEBAQUABIIBgADQ +# EgSWTI8CNtYdsILh/FUQVHlO0Ta23nyoJ7gaiBarTPMHTbQoZeIa3J8GShNTMkmD +# HT53KttTgo47bXB/3ID0KO1r7flQ3z8kzGFbQtdgVtlaJfQY3CFOAhNAJMJEKkic +# q9g50BsrGHsdoI3C+vndznXWYCCTU905ShCs88tj9ZtYpvBsmO9NQxucoP6SyP+1 +# XnepDZMfslX31iHE+XFtM2B/qIHUkWNm0WtXb4uw6qRbbOQFYPZIPLX9OC9vzfUP +# V4XMQ6qX7CuqV8AOKefTd1Wi+2D6IttbA7ARY57ENHiz5NAvd8FOWi8FRUyuEDUJ +# rJARXK5KAP/3xkkHZpoLLafLAPdAvUJEUF85JBBSrdvqleh2SVXk06Rz9Yq+Q9dO +# NA6H+EviVJN/B1W+BDZx1dWV1ZWcwKTtZ7ptWOf+bCP2G5smHzSwewOdPnLTWkw7 +# LK7xhdUIyN7tyMvayHJXrjG9ZuApVrGMLVPfkb4yqQXQGK2TyvGpyTWOUIg7OqGC +# Fz8wghc7BgorBgEEAYI3AwMBMYIXKzCCFycGCSqGSIb3DQEHAqCCFxgwghcUAgED +# MQ8wDQYJYIZIAWUDBAIBBQAwdwYLKoZIhvcNAQkQAQSgaARmMGQCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCChYFAOdU58FGAdlUa6atOduYR3m4+1RZ9a +# y0OntcSH0wIQW/oAmAM/59ggdtaN91xbKhgPMjAyNDA4MjcxNjU1NTBaoIITCTCC +# BsIwggSqoAMCAQICEAVEr/OUnQg5pr/bP1/lYRYwDQYJKoZIhvcNAQELBQAwYzEL +# MAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJE +# aWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBD +# QTAeFw0yMzA3MTQwMDAwMDBaFw0zNDEwMTMyMzU5NTlaMEgxCzAJBgNVBAYTAlVT +# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEgMB4GA1UEAxMXRGlnaUNlcnQgVGlt +# ZXN0YW1wIDIwMjMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjU0WH +# HYOOW6w+VLMj4M+f1+XS512hDgncL0ijl3o7Kpxn3GIVWMGpkxGnzaqyat0QKYoe +# YmNp01icNXG/OpfrlFCPHCDqx5o7L5Zm42nnaf5bw9YrIBzBl5S0pVCB8s/LB6Yw +# aMqDQtr8fwkklKSCGtpqutg7yl3eGRiF+0XqDWFsnf5xXsQGmjzwxS55DxtmUuPI +# 1j5f2kPThPXQx/ZILV5FdZZ1/t0QoRuDwbjmUpW1R9d4KTlr4HhZl+NEK0rVlc7v +# CBfqgmRN/yPjyobutKQhZHDr1eWg2mOzLukF7qr2JPUdvJscsrdf3/Dudn0xmWVH +# VZ1KJC+sK5e+n+T9e3M+Mu5SNPvUu+vUoCw0m+PebmQZBzcBkQ8ctVHNqkxmg4ho +# Yru8QRt4GW3k2Q/gWEH72LEs4VGvtK0VBhTqYggT02kefGRNnQ/fztFejKqrUBXJ +# s8q818Q7aESjpTtC/XN97t0K/3k0EH6mXApYTAA+hWl1x4Nk1nXNjxJ2VqUk+tfE +# ayG66B80mC866msBsPf7Kobse1I4qZgJoXGybHGvPrhvltXhEBP+YUcKjP7wtsfV +# x95sJPC/QoLKoHE9nJKTBLRpcCcNT7e1NtHJXwikcKPsCvERLmTgyyIryvEoEyFJ +# UX4GZtM7vvrrkTjYUQfKlLfiUKHzOtOKg8tAewIDAQABo4IBizCCAYcwDgYDVR0P +# AQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# IAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQYMBaAFLoW +# 2W1NhS9zKXaaL3WMaiCPnshvMB0GA1UdDgQWBBSltu8T5+/N0GSh1VapZTGj3tXj +# STBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln +# aUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3JsMIGQ +# BggrBgEFBQcBAQSBgzCBgDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl +# cnQuY29tMFgGCCsGAQUFBzAChkxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v +# RGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3J0 +# MA0GCSqGSIb3DQEBCwUAA4ICAQCBGtbeoKm1mBe8cI1PijxonNgl/8ss5M3qXSKS +# 7IwiAqm4z4Co2efjxe0mgopxLxjdTrbebNfhYJwr7e09SI64a7p8Xb3CYTdoSXej +# 65CqEtcnhfOOHpLawkA4n13IoC4leCWdKgV6hCmYtld5j9smViuw86e9NwzYmHZP +# VrlSwradOKmB521BXIxp0bkrxMZ7z5z6eOKTGnaiaXXTUOREEr4gDZ6pRND45Ul3 +# CFohxbTPmJUaVLq5vMFpGbrPFvKDNzRusEEm3d5al08zjdSNd311RaGlWCZqA0Xe +# 2VC1UIyvVr1MxeFGxSjTredDAHDezJieGYkD6tSRN+9NUvPJYCHEVkft2hFLjDLD +# iOZY4rbbPvlfsELWj+MXkdGqwFXjhr+sJyxB0JozSqg21Llyln6XeThIX8rC3D0y +# 33XWNmdaifj2p8flTzU8AL2+nCpseQHc2kTmOt44OwdeOVj0fHMxVaCAEcsUDH6u +# vP6k63llqmjWIso765qCNVcoFstp8jKastLYOrixRoZruhf9xHdsFWyuq69zOuhJ +# RrfVf8y2OMDY7Bz1tqG4QyzfTkx9HmhwwHcK1ALgXGC7KP845VJa1qwXIiNO9OzT +# F/tQa/8Hdx9xl0RBybhG02wyfFgvZ0dl5Rtztpn5aywGRu9BHvDwX+Db2a2QgESv +# gBBBijCCBq4wggSWoAMCAQICEAc2N7ckVHzYR6z9KGYqXlswDQYJKoZIhvcNAQEL +# BQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UE +# CxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBS +# b290IEc0MB4XDTIyMDMyMzAwMDAwMFoXDTM3MDMyMjIzNTk1OVowYzELMAkGA1UE +# BhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2Vy +# dCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMaGNQZJs8E9cklRVcclA8TykTep +# l1Gh1tKD0Z5Mom2gsMyD+Vr2EaFEFUJfpIjzaPp985yJC3+dH54PMx9QEwsmc5Zt +# +FeoAn39Q7SE2hHxc7Gz7iuAhIoiGN/r2j3EF3+rGSs+QtxnjupRPfDWVtTnKC3r +# 07G1decfBmWNlCnT2exp39mQh0YAe9tEQYncfGpXevA3eZ9drMvohGS0UvJ2R/dh +# gxndX7RUCyFobjchu0CsX7LeSn3O9TkSZ+8OpWNs5KbFHc02DVzV5huowWR0QKfA +# csW6Th+xtVhNef7Xj3OTrCw54qVI1vCwMROpVymWJy71h6aPTnYVVSZwmCZ/oBpH +# IEPjQ2OAe3VuJyWQmDo4EbP29p7mO1vsgd4iFNmCKseSv6De4z6ic/rnH1pslPJS +# lRErWHRAKKtzQ87fSqEcazjFKfPKqpZzQmiftkaznTqj1QPgv/CiPMpC3BhIfxQ0 +# z9JMq++bPf4OuGQq+nUoJEHtQr8FnGZJUlD0UfM2SU2LINIsVzV5K6jzRWC8I41Y +# 99xh3pP+OcD5sjClTNfpmEpYPtMDiP6zj9NeS3YSUZPJjAw7W4oiqMEmCPkUEBID +# fV8ju2TjY+Cm4T72wnSyPx4JduyrXUZ14mCjWAkBKAAOhFTuzuldyF4wEr1GnrXT +# drnSDmuZDNIztM2xAgMBAAGjggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBS6FtltTYUvcyl2mi91jGogj57IbzAfBgNVHSMEGDAWgBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUH +# AwgwdwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp +# Y2VydC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv +# bS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0 +# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3Js +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsF +# AAOCAgEAfVmOwJO2b5ipRCIBfmbW2CFC4bAYLhBNE88wU86/GPvHUF3iSyn7cIoN +# qilp/GnBzx0H6T5gyNgL5Vxb122H+oQgJTQxZ822EpZvxFBMYh0MCIKoFr2pVs8V +# c40BIiXOlWk/R3f7cnQU1/+rT4osequFzUNf7WC2qk+RZp4snuCKrOX9jLxkJods +# kr2dfNBwCnzvqLx1T7pa96kQsl3p/yhUifDVinF2ZdrM8HKjI/rAJ4JErpknG6sk +# HibBt94q6/aesXmZgaNWhqsKRcnfxI2g55j7+6adcq/Ex8HBanHZxhOACcS2n82H +# hyS7T6NJuXdmkfFynOlLAlKnN36TU6w7HQhJD5TNOXrd/yVjmScsPT9rp/Fmw0HN +# T7ZAmyEhQNC3EyTN3B14OuSereU0cZLXJmvkOHOrpgFPvT87eK1MrfvElXvtCl8z +# OYdBeHo46Zzh3SP9HSjTx/no8Zhf+yvYfvJGnXUsHicsJttvFXseGYs2uJPU5vIX +# mVnKcPA3v5gA3yAWTyf7YGcWoWa63VXAOimGsJigK+2VQbc61RWYMbRiCQ8KvYHZ +# E/6/pNHzV9m8BPqC3jLfBInwAM1dwvnQI38AC+R2AibZ8GV2QqYphwlHK+Z/GqSF +# D/yYlvZVVCsfgPrA8g4r5db7qS9EFUrnEw4d2zc4GqEr9u3WfPwwggWNMIIEdaAD +# AgECAhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYT +# AlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2Vy +# dC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0y +# MjA4MDEwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYD +# VQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAf +# BgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEB +# BQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4Smn +# PVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6f +# qVcWWVVyr2iTcMKyunWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O +# 7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZ +# Vu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4F +# fYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLm +# qaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMre +# Sx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/ch +# srIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+U +# DCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xM +# dT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUb +# AgMBAAGjggE6MIIBNjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAO +# BgNVHQ8BAf8EBAMCAYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRw +# Oi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRz +# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0f +# BD4wPDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNz +# dXJlZElEUm9vdENBLmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEM +# BQADggEBAHCgv0NcVec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLt +# pIh3bb0aFPQTSnovLbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouy +# XtTP0UNEm0Mh65ZyoUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jS +# TEAZNUZqaVSwuKFWjuyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAc +# AgPLILCsWKAOQGPFmCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2 +# h5b9W9FcrBjDTZ9ztwGpn1eqXijiuZQxggN2MIIDcgIBATB3MGMxCzAJBgNVBAYT +# AlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQg +# VHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OU +# nQg5pr/bP1/lYRYwDQYJYIZIAWUDBAIBBQCggdEwGgYJKoZIhvcNAQkDMQ0GCyqG +# SIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNDA4MjcxNjU1NTBaMCsGCyqGSIb3 +# DQEJEAIMMRwwGjAYMBYEFGbwKzLCwskPgl3OqorJxk8ZnM9AMC8GCSqGSIb3DQEJ +# BDEiBCCestyEDxVi6AOMT5sj8egc3mks0Y2g0TWz+114UpCUJjA3BgsqhkiG9w0B +# CRACLzEoMCYwJDAiBCDS9uRt7XQizNHUQFdoQTZvgoraVZquMxavTRqa1Ax4KDAN +# BgkqhkiG9w0BAQEFAASCAgCXJ2gfRme254ZcZvF3/7FxqR3IrPp+AsnNSbmPPOKt +# fGgRHcJ84II4xPuETQZiR1mjgqxS31JoFQP/orA/LAqjm49AI5j+Qv9UCQuZbD4/ +# lXW+KepwHyntdEXZO7Fkyav1EzKfjlT/6Ji3Ajl4aieRGwNl1o+WzZUmmWOlz9NV +# I/DpzfUxL4a2AKsmvi2J+fipKr+kSvijEHHQsJkEo20I7xD4X8q5qYHqG0hHQLfS +# TZf0fd86jSd2L0zJdEmfoDD9foPi9Z17CojgRVvZcfqd0TAMMY38T/yFkMqOixX+ +# oJ4C7DGte00Ibr8Uvmcequ23aJeL1jcH9SqRB46/WH25qx7AadJbH7J7L2acdSX5 +# qxqXsSVWWXUf/D+L9xuWJCop7UVEoDYOFXSOoVEvDj94SjqBNGGlZiPrrBRgVCyW +# PI0NlLUfpOYJCl6YaR0nzV+61hT+rkkU7hFUhzku4zOrt9NpnkJfm/6hi/D3PoA1 +# 9OLvKgyp0+ZNjPUwtlDzhOfY7epQg1wTg6dcFUKvoCV3f5MSwFBImi8XalTxjswl +# IqzAI00rXsx7wR4GgPtthGhdEJ8+iSOWgt2EPUvYMkHIedG/viFcf2SqnC3r13Kc +# 8zgQH3GEfu8T//y7CVcQQ7oFBQPf+Hb/sJoNEL4a6iGC4GgvgirVxEnXdeQvszPM +# RQ== +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Retail/HP.Retail.psm1 b/Bios-Update-HP-v2.0/module/HP.Retail/HP.Retail.psm1 new file mode 100644 index 0000000..910b118 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Retail/HP.Retail.psm1 @@ -0,0 +1,478 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + +using namespace HP.CMSLHelper + +Set-StrictMode -Version 3.0 +#requires -Modules "HP.Private", "HP.Firmware" + +# CMSL is normally installed in C:\Program Files\WindowsPowerShell\Modules +# but if installed via PSGallery and via PS7, it is installed in a different location +if (Test-Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll") { + Add-Type -Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll" +} +else{ + Add-Type -Path "$PSScriptRoot\..\..\HP.Private\1.7.2\HP.CMSLHelper.dll" +} + +enum RetailDockStatus{ + NotDocked = 0 + Docked = 1 + Jammed = 2 + Unknown = 0xff +} + + +enum RetailHubType{ + NotPresent = 0 + AdvancedConnectivityBase = 1 + BasicConnectivityBase = 2 + Unknown = 0xff +} + + +enum RetailDockMode{ + FastRelease = 0 + FastReleaseAndPIN = 1 + Privileged = 2 + PrivilegedAndPIN = 3 + Application = 4 + Unknown = 0xff +} + + +<# +.SYNOPSIS + Retrieves information about an HP Retail system + +.DESCRIPTION + This command retrieves information about an HP Retail system such as the HP Engage system. + + +.PARAMETER ShowPin + If specified, this command will show the PIN in the output. + + +.EXAMPLE + Get-HPRetailSmartDockConfiguration -ShowPin + + +.NOTES + - This command requires elevated privileges. + - This is a special purpose command that will only execute successfully in the presence of supported hardware. + +#> +function Get-HPRetailSmartDockConfiguration { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPRetailSmartDockConfiguration")] + param( + [switch]$ShowPin + ) + + [RetailInformation]$c = Get-HPPrivateRetailConfiguration + $configuration = [ordered]@{ + RetailSmartDockSupported = $false + } + if ($c.IsSupported) { + + Write-Verbose 'Firmware supports retail smart dock' + $configuration.RetailSmartDockSupported = $true + $configuration.Add("RetailSmartDockMode",[RetailDockMode]$c.Mode) + $configuration.Add("RetailSmartDockTimeoutSeconds",$c.Timeout) # what is 'timeout' ? + $configuration.Add("RetailSmartDockState",[RetailDockStatus]$c.DockState) + $configuration.Add("RetailSmartDockHub",[RetailHubType]$c.HubState) + $configuration.Add("RetailSmartDockDockCounter",$c.DockCounter) + #$configuration.Add("RetailSmartDockUndockCounter",$c.UndockCounter) + $configuration.Add("RetailSmartDockBaseLockoutSeconds",$c.BaseLockoutTimer) + $configuration.Add("RetailSmartDockRelockSeconds",$c.RelockTimer) + + + if ($c.PinSize) { + $configuration.PinIsSet = $true + + if ($ShowPin.IsPresent) { + $configuration.Add("ActivePIN",[System.Text.Encoding]::UTF8.GetString($c.Pin).trim()) + + } + } + else { + $configuration.PinIsSet = $false + } + + } + else { + Write-Verbose 'Firmware does not support retail smart dock' + } + $configuration +} + + +<# +.SYNOPSIS + Configures an HP Retail System + +.DESCRIPTION + This command configures the settings of an HP Retail system such as the HP Engage Go system. + +.PARAMETER Mode + Specifies the mode to activate. The value must be one of the following values: + + - FastRelease: Default mode where no authentication is required. Simply unlock the tablet with the touch of a button. Do not use the -PIN parameter. + - FastReleaseAndPIN: A PIN is required to unlock the tablet. + - Privileged: Only privileged users (users with admin login) can unlock the tablet. Do not use PIN parameter. + - PrivilegedAndPIN: Only privileged users (users with admin login) with a PIN can unlock the tablet. + - Application: Mode for applications. A PIN is required. + +.PARAMETER PIN + Specifies the PIN to set. The PIN must be a numeric string between 4 and 10 characters. This parameter is mandatory for 'FastReleaseAndPIN', 'PrivilegedAndPIN', and 'Application'. This parameter must not be supplied for the other modes. + +.PARAMETER PINData + Specifies the SecureString PINData to use + +.PARAMETER BaseLockoutTime + Sets the base lockout time in seconds. This must be a value between 30 and 1800 seconds. + +.PARAMETER RelockTime + Sets the relock time in seconds. This must be a value between 10 and 300 seconds. + + +.EXAMPLE + Set-HPRetailSmartDockConfiguration -Mode PrivilegedAndPIN -PIN 123456 + +.NOTES + - This command requires elevated privileges. + - This is a special purpose command that will only execute successfully in the presence of supported hardware. + +#> + +function Set-HPRetailSmartDockConfiguration { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Set-HPRetailSmartDockConfiguration")] + param( + [Parameter(ParameterSetName = 'Mode',Position = 0,Mandatory = $true)] + [Parameter(ParameterSetName = 'ModePin',Position = 0,Mandatory = $true)] + [Parameter(ParameterSetName = 'ModeSPin',Position = 0,Mandatory = $true)] + [ValidateSet('FastRelease','FastReleaseAndPIN','Privileged','PrivilegedAndPIN','Application')] + [RetailDockMode]$Mode = 'Unknown', + + + [Parameter(ParameterSetName = 'ModePin',Position = 1,Mandatory = $true)] + [ValidatePattern("^\d*$")] + [ValidateLength(4,10)] + [string]$PIN, + + [Parameter(ParameterSetName = 'ModeSPin',Position = 1,Mandatory = $true)] + [securestring]$PINData, + + + [Parameter(ParameterSetName = 'All',Position = 2,Mandatory = $false)] + [Parameter(ParameterSetName = 'Mode',Position = 2,Mandatory = $false)] + [Parameter(ParameterSetName = 'ModePin',Position = 2,Mandatory = $false)] + [Parameter(ParameterSetName = 'ModeSPin',Position = 2,Mandatory = $false)] + [ValidatePattern("^\d*$")] + [ValidateRange(30,1800)] + [int]$BaseLockoutTime = 0, + + [Parameter(ParameterSetName = 'All',Position = 3,Mandatory = $false)] + [Parameter(ParameterSetName = 'Mode',Position = 3,Mandatory = $false)] + [Parameter(ParameterSetName = 'ModePin',Position = 3,Mandatory = $false)] + [Parameter(ParameterSetName = 'ModeSPin',Position = 3,Mandatory = $false)] + [ValidatePattern("^\d*$")] + [ValidateRange(10,300)] + [int]$RelockTime = 0 + + ) + if (($Mode -eq "Unknown") -and (-not $BaseLockoutTime) -and (-not $RelockTime)) { + + Write-Verbose "Nothing to do." + return + } + [RetailInformation]$r = Get-HPPrivateRetailConfiguration -Verbose:$VerbosePreference + + if ($r -and $r.IsSupported) { + if ($Mode -eq "FastRelease" -or $Mode -eq "Privileged") { + Write-Verbose "Handling docking mode $Mode (this mode doesn't require a PIN)" + if ($Pin -or $PINData) { + Write-Verbose "PIN Specified for mode '$Mode' which does not accept a PIN" + throw [ArgumentException]"PIN or PINData is not valid for this mode." + } + $r.PinSize = 0 + $r.Pin = @(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) + } + + + if ($mode -eq "FastReleaseAndPIN" -or $mode -eq "PrivilegedAndPIN" -or $mode -eq "Application") { + Write-Verbose "Handling docking mode $Mode (this mode requires a PIN)" + if (-not $Pin -and -not $PinData) { + Write-Verbose "PIN not specified for mode '$Mode' which requires a PIN" + throw [ArgumentException]"PIN or PINData may not be null for this mode." + } + if ($PinData) { + Write-Verbose 'Using SecureString PIN' + $pin = (New-Object System.Net.NetworkCredential -ArgumentList "",$PinData).Password + if (($pin.Length -lt 4) -or ($pin.Length -gt 10)) { + throw [ArgumentException]("PIN must be between 4 and 10 characters in length.") + + } + if (-not $pin -match "^\d*$") { + throw [ArgumentException]("PIN can only contain characters 0 through 9") + } + } + else { + Write-Verbose 'Using plain test PIN' + } + + if ($Pin -or $PinData) { + $pinbytes = ([System.Text.Encoding]::UTF8.GetBytes($Pin) | ForEach-Object { $_ - 0x30 }) + $padding = New-Object byte[] (16 - $pinbytes.Length) + $r.Pin = $pinbytes + $padding + $r.PinSize = $Pin.Length + } + } + + $r.Mode = $Mode + if (-not $pin -and -not $pindata) { + $r.Pin = $r.Pin | ForEach-Object { if ($_ -ge 0x30) { $_ - 0x30 } else { $_ } } + } + if ($BaseLockoutTime) { + Write-Verbose "Setting BaseLockoutTimer to $BaseLockoutTime seconds" + $r.BaseLockoutTimer = $BaseLockoutTime + } + + if ($RelockTime) { + Write-Verbose "Setting RelockTimer to $RelockTime seconds" + $r.RelockTimer = $RelockTime + } + + Set-HPPrivateRetailConfiguration -configuration $r + } + else { + throw [NotSupportedException]"This platform does not support HP Retail Smart Dock" + } +} + + + +# SIG # Begin signature block +# MIIoHQYJKoZIhvcNAQcCoIIoDjCCKAoCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCB2oKP0pK/cNH1M +# geLCFgvkN/KwLafQDvwSQeJhXi8UBqCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6TCCGeUCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIKXrGlVZ +# OiiJH6oZTXqI+gCHu6fJq5ewnKzqJ0V74RoiMA0GCSqGSIb3DQEBAQUABIIBgBsL +# YrDPsxMEX/SXZKGijtFiiDi/jwkSKnmlwaAWMNc/b7jIzav2vjAMNP/yRhTle+sQ +# jgXCOHHqlC6MNcUE0kP+Y8dtBLr386KEnwIjroCMsdaXbvbD8ap/MSYW8WtcmTJ2 +# q54FPlGY5Xv/3n55je1do1NolbqwHgvwndV2d2Vu8DsIgx6CmBxds+FxSzMDfWpW +# Hgdia8n15JB7WE5d58Z5IjcSXNV2bUypw42H+ZsHA6bJL29E74RMUKUyVyoa7nSz +# 5HMEGkK3IX6hO8rcfyz3Lpw7mtF8d8H5Z+GElUP2FUkg/Tu81my+ymOE/E0+2uw2 +# lfGd8eYUGQpKuIW8dXYAxZuHxRQ54zEl5BiUoRmGYogKCiaPQrq3Dt5A68HfLpcX +# /c2wYELj9YNzEsECld0sxbhiA+/KbB+m3hST/JF4Xx5DBXXWSEhij8fZkUpcuaA+ +# 8wYaUvcE/L17Yx9WmrjQim5UrPFUaBPoWbcb+91gZL0A6dn6WzYdYFIkGOHJvaGC +# Fz8wghc7BgorBgEEAYI3AwMBMYIXKzCCFycGCSqGSIb3DQEHAqCCFxgwghcUAgED +# MQ8wDQYJYIZIAWUDBAIBBQAwdwYLKoZIhvcNAQkQAQSgaARmMGQCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCBDqX/zisAFtIHbDZDtfIGV/E00HpyNiEkJ +# CrkCEfM70AIQJxS53Do1xBQz26aiz/JaNxgPMjAyNDA4MjcxNjU1NTBaoIITCTCC +# BsIwggSqoAMCAQICEAVEr/OUnQg5pr/bP1/lYRYwDQYJKoZIhvcNAQELBQAwYzEL +# MAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJE +# aWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBD +# QTAeFw0yMzA3MTQwMDAwMDBaFw0zNDEwMTMyMzU5NTlaMEgxCzAJBgNVBAYTAlVT +# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEgMB4GA1UEAxMXRGlnaUNlcnQgVGlt +# ZXN0YW1wIDIwMjMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjU0WH +# HYOOW6w+VLMj4M+f1+XS512hDgncL0ijl3o7Kpxn3GIVWMGpkxGnzaqyat0QKYoe +# YmNp01icNXG/OpfrlFCPHCDqx5o7L5Zm42nnaf5bw9YrIBzBl5S0pVCB8s/LB6Yw +# aMqDQtr8fwkklKSCGtpqutg7yl3eGRiF+0XqDWFsnf5xXsQGmjzwxS55DxtmUuPI +# 1j5f2kPThPXQx/ZILV5FdZZ1/t0QoRuDwbjmUpW1R9d4KTlr4HhZl+NEK0rVlc7v +# CBfqgmRN/yPjyobutKQhZHDr1eWg2mOzLukF7qr2JPUdvJscsrdf3/Dudn0xmWVH +# VZ1KJC+sK5e+n+T9e3M+Mu5SNPvUu+vUoCw0m+PebmQZBzcBkQ8ctVHNqkxmg4ho +# Yru8QRt4GW3k2Q/gWEH72LEs4VGvtK0VBhTqYggT02kefGRNnQ/fztFejKqrUBXJ +# s8q818Q7aESjpTtC/XN97t0K/3k0EH6mXApYTAA+hWl1x4Nk1nXNjxJ2VqUk+tfE +# ayG66B80mC866msBsPf7Kobse1I4qZgJoXGybHGvPrhvltXhEBP+YUcKjP7wtsfV +# x95sJPC/QoLKoHE9nJKTBLRpcCcNT7e1NtHJXwikcKPsCvERLmTgyyIryvEoEyFJ +# UX4GZtM7vvrrkTjYUQfKlLfiUKHzOtOKg8tAewIDAQABo4IBizCCAYcwDgYDVR0P +# AQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# IAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQYMBaAFLoW +# 2W1NhS9zKXaaL3WMaiCPnshvMB0GA1UdDgQWBBSltu8T5+/N0GSh1VapZTGj3tXj +# STBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln +# aUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3JsMIGQ +# BggrBgEFBQcBAQSBgzCBgDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl +# cnQuY29tMFgGCCsGAQUFBzAChkxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v +# RGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3J0 +# MA0GCSqGSIb3DQEBCwUAA4ICAQCBGtbeoKm1mBe8cI1PijxonNgl/8ss5M3qXSKS +# 7IwiAqm4z4Co2efjxe0mgopxLxjdTrbebNfhYJwr7e09SI64a7p8Xb3CYTdoSXej +# 65CqEtcnhfOOHpLawkA4n13IoC4leCWdKgV6hCmYtld5j9smViuw86e9NwzYmHZP +# VrlSwradOKmB521BXIxp0bkrxMZ7z5z6eOKTGnaiaXXTUOREEr4gDZ6pRND45Ul3 +# CFohxbTPmJUaVLq5vMFpGbrPFvKDNzRusEEm3d5al08zjdSNd311RaGlWCZqA0Xe +# 2VC1UIyvVr1MxeFGxSjTredDAHDezJieGYkD6tSRN+9NUvPJYCHEVkft2hFLjDLD +# iOZY4rbbPvlfsELWj+MXkdGqwFXjhr+sJyxB0JozSqg21Llyln6XeThIX8rC3D0y +# 33XWNmdaifj2p8flTzU8AL2+nCpseQHc2kTmOt44OwdeOVj0fHMxVaCAEcsUDH6u +# vP6k63llqmjWIso765qCNVcoFstp8jKastLYOrixRoZruhf9xHdsFWyuq69zOuhJ +# RrfVf8y2OMDY7Bz1tqG4QyzfTkx9HmhwwHcK1ALgXGC7KP845VJa1qwXIiNO9OzT +# F/tQa/8Hdx9xl0RBybhG02wyfFgvZ0dl5Rtztpn5aywGRu9BHvDwX+Db2a2QgESv +# gBBBijCCBq4wggSWoAMCAQICEAc2N7ckVHzYR6z9KGYqXlswDQYJKoZIhvcNAQEL +# BQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UE +# CxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBS +# b290IEc0MB4XDTIyMDMyMzAwMDAwMFoXDTM3MDMyMjIzNTk1OVowYzELMAkGA1UE +# BhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2Vy +# dCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMaGNQZJs8E9cklRVcclA8TykTep +# l1Gh1tKD0Z5Mom2gsMyD+Vr2EaFEFUJfpIjzaPp985yJC3+dH54PMx9QEwsmc5Zt +# +FeoAn39Q7SE2hHxc7Gz7iuAhIoiGN/r2j3EF3+rGSs+QtxnjupRPfDWVtTnKC3r +# 07G1decfBmWNlCnT2exp39mQh0YAe9tEQYncfGpXevA3eZ9drMvohGS0UvJ2R/dh +# gxndX7RUCyFobjchu0CsX7LeSn3O9TkSZ+8OpWNs5KbFHc02DVzV5huowWR0QKfA +# csW6Th+xtVhNef7Xj3OTrCw54qVI1vCwMROpVymWJy71h6aPTnYVVSZwmCZ/oBpH +# IEPjQ2OAe3VuJyWQmDo4EbP29p7mO1vsgd4iFNmCKseSv6De4z6ic/rnH1pslPJS +# lRErWHRAKKtzQ87fSqEcazjFKfPKqpZzQmiftkaznTqj1QPgv/CiPMpC3BhIfxQ0 +# z9JMq++bPf4OuGQq+nUoJEHtQr8FnGZJUlD0UfM2SU2LINIsVzV5K6jzRWC8I41Y +# 99xh3pP+OcD5sjClTNfpmEpYPtMDiP6zj9NeS3YSUZPJjAw7W4oiqMEmCPkUEBID +# fV8ju2TjY+Cm4T72wnSyPx4JduyrXUZ14mCjWAkBKAAOhFTuzuldyF4wEr1GnrXT +# drnSDmuZDNIztM2xAgMBAAGjggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBS6FtltTYUvcyl2mi91jGogj57IbzAfBgNVHSMEGDAWgBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUH +# AwgwdwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp +# Y2VydC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv +# bS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0 +# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3Js +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsF +# AAOCAgEAfVmOwJO2b5ipRCIBfmbW2CFC4bAYLhBNE88wU86/GPvHUF3iSyn7cIoN +# qilp/GnBzx0H6T5gyNgL5Vxb122H+oQgJTQxZ822EpZvxFBMYh0MCIKoFr2pVs8V +# c40BIiXOlWk/R3f7cnQU1/+rT4osequFzUNf7WC2qk+RZp4snuCKrOX9jLxkJods +# kr2dfNBwCnzvqLx1T7pa96kQsl3p/yhUifDVinF2ZdrM8HKjI/rAJ4JErpknG6sk +# HibBt94q6/aesXmZgaNWhqsKRcnfxI2g55j7+6adcq/Ex8HBanHZxhOACcS2n82H +# hyS7T6NJuXdmkfFynOlLAlKnN36TU6w7HQhJD5TNOXrd/yVjmScsPT9rp/Fmw0HN +# T7ZAmyEhQNC3EyTN3B14OuSereU0cZLXJmvkOHOrpgFPvT87eK1MrfvElXvtCl8z +# OYdBeHo46Zzh3SP9HSjTx/no8Zhf+yvYfvJGnXUsHicsJttvFXseGYs2uJPU5vIX +# mVnKcPA3v5gA3yAWTyf7YGcWoWa63VXAOimGsJigK+2VQbc61RWYMbRiCQ8KvYHZ +# E/6/pNHzV9m8BPqC3jLfBInwAM1dwvnQI38AC+R2AibZ8GV2QqYphwlHK+Z/GqSF +# D/yYlvZVVCsfgPrA8g4r5db7qS9EFUrnEw4d2zc4GqEr9u3WfPwwggWNMIIEdaAD +# AgECAhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYT +# AlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2Vy +# dC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0y +# MjA4MDEwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYD +# VQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAf +# BgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEB +# BQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4Smn +# PVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6f +# qVcWWVVyr2iTcMKyunWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O +# 7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZ +# Vu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4F +# fYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLm +# qaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMre +# Sx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/ch +# srIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+U +# DCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xM +# dT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUb +# AgMBAAGjggE6MIIBNjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAO +# BgNVHQ8BAf8EBAMCAYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRw +# Oi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRz +# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0f +# BD4wPDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNz +# dXJlZElEUm9vdENBLmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEM +# BQADggEBAHCgv0NcVec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLt +# pIh3bb0aFPQTSnovLbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouy +# XtTP0UNEm0Mh65ZyoUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jS +# TEAZNUZqaVSwuKFWjuyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAc +# AgPLILCsWKAOQGPFmCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2 +# h5b9W9FcrBjDTZ9ztwGpn1eqXijiuZQxggN2MIIDcgIBATB3MGMxCzAJBgNVBAYT +# AlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQg +# VHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OU +# nQg5pr/bP1/lYRYwDQYJYIZIAWUDBAIBBQCggdEwGgYJKoZIhvcNAQkDMQ0GCyqG +# SIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNDA4MjcxNjU1NTBaMCsGCyqGSIb3 +# DQEJEAIMMRwwGjAYMBYEFGbwKzLCwskPgl3OqorJxk8ZnM9AMC8GCSqGSIb3DQEJ +# BDEiBCCzaRaq/zishAnYC9ivj5ucEFINEYBea0HcTW01RQN10jA3BgsqhkiG9w0B +# CRACLzEoMCYwJDAiBCDS9uRt7XQizNHUQFdoQTZvgoraVZquMxavTRqa1Ax4KDAN +# BgkqhkiG9w0BAQEFAASCAgBCK9defdw4A0OE6OE/NTHms6PKaXEvlQiBq3PJCln0 +# WpyYR9RwExCfFb32jvVFMgQlcWEgImXO+AsKRKemNBTMQs2U3YSvEpwngFBuvfKO +# pOM6fH6xxkWmKkb29Zn02vlcHfqZkKX7jmogYlP9TngZz/3BpqWVCULeETeT2Ztk +# EEBP0oWi1BIyk/wxp1to9A4uAFydehMVTSweelKSVT7UMtLhcduaM+hiJkEGCuDi +# dRpYaBUykoVMC29ubs3j8jSjEv1k+KjV2qBolNpcaCUlArjwjTbJrReWteYbu9lD +# di6ng8JKD0p7rvxJzZH9HyP5M9dx6Cq8IeAMTAzgtraVbzpy5rdcxGFeDfh3x9LW +# IvIIWOdv+Lq7bTa04eDVkZ1AIi67rSMZS2OrnyWwQ2Imo6IPnRTJXsKKezoigX0E +# ZpfGlhMSuv9XcF0gGGF/ii3TlP/0dJ4BiW2Q+UB5JK3L4bBbFPFnfDFrV40QrP35 +# 85/wOXkj50ItZ5tl/OUAfv2Y+LIUJlqJvfZ/hqRTF6R6hvwnvPzDpS9OVtUq1cda +# pQYsUizvGYBSYi4qS4ifCz1c3FiBnUJLKfOq6p6Qk+UQBT42ya1Nzm531T57DcBz +# AW5gjNyOzM3yIkJ664KSe3+tGkaOp+DVTcZfQlPZqHIUW0SYll0S3BXSd/IaaDg2 +# qA== +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Retail/license.txt b/Bios-Update-HP-v2.0/module/HP.Retail/license.txt new file mode 100644 index 0000000..b93ca37 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Retail/license.txt @@ -0,0 +1,248 @@ +End-User License Agreement + +READ CAREFULLY BEFORE USING THIS SOFTWARE + +This End-User license Agreement ("EULA") is a legal agreement +between (a) you (either an individual or a single entity) and (b) HP Inc. +("HP") that governs your use of any Software Product, installed on or +made available by HP for use with your HP product ("HP Product"), that +is not otherwise subject to a separate license agreement between you +and HP or its suppliers. Other software may contain a EULA in its online +documentation. The term "Software Product" means computer software +and may include associated media, printed materials and "online" or +electronic documentation. + +An amendment or addendum to this EULA may accompany the HP +Product. + +RIGHTS IN THE SOFTWARE PRODUCT ARE OFFERED ONLY ON THE +CONDITION THAT YOU AGREE TO ALL TERMS AND CONDITIONS OF +THIS EULA. BY INSTALLING, COPYING, DOWNLOADING, OR +OTHERWISE USING THE SOFTWARE PRODUCT, YOU AGREE TO BE +BOUND BY THE TERMS OF THIS EULA. IF YOU DO NOT ACCEPT THESE +LICENSE TERMS, YOUR SOLE REMEDY IS TO RETURN THE ENTIRE +UNUSED PRODUCT (HARDWARE AND SOFTWARE) WITHIN 14 DAYS +FOR A REFUND SUBJECT TO THE REFUND POLICY OF YOUR PLACE OF +PURCHASE. + +1. GRANT OF LICENSE. HP grants you the following rights provided +you comply with all terms and conditions of this EULA: + +a. Use. You may use the Software Product on a single computer ("Your +Computer"). If the Software Product is provided to you via the internet +and was originally licensed for use on more than one computer, you +may install and use the Software Product only on those computers. You +may not separate component parts of the Software Product for use on +more than one computer. You do not have the right to distribute the +Software Product. You may load the Software Product into Your +Computer's temporary memory (RAM) for purposes of using the +Software Product. + +b. Storage. You may copy the Software Product into the local memory +or storage device of the HP Product. + +c. Copying. You may make archival or back-up copies of the Software +Product, provided the copy contains all of the original Software +Product's proprietary notices and that it is used only for back-up +purposes. + +d. Reservation of Rights. HP and its suppliers reserve all rights not +expressly granted to you in this EULA. + +e. Freeware. Notwithstanding the terms and conditions of this EULA, all +or any portion of the Software Product which constitutes non- +proprietary HP software or software provided under public license by +third parties ("Freeware"), is licensed to you subject to the terms and +conditions of the software license agreement accompanying such +Freeware whether in the form of a discrete agreement, shrink wrap +license or electronic license terms accepted at time of download. Use of +the Freeware by you shall be governed entirely by the terms and +conditions of such license. + +f. Recovery Solution. Any software recovery solution provided with/for +your HP Product, whether in the form of a hard disk drive-based +solution, an external media-based recovery solution (e.g. floppy disk, +CD or DVD) or an equivalent solution delivered in any other form, may +only be used for restoring the hard disk of the HP Product with/for +which the recovery solution was originally purchased. The use of any +Microsoft operating system software contained in such recovery +solution shall be governed by the Microsoft License Agreement. + +2. UPGRADES. To use a Software Product identified as an upgrade, +you must first be licensed for the original Software Product identified +by HP as eligible for the upgrade. After upgrading, you may no longer +use the original Software Product that formed the basis for your +upgrade eligibility. By using the Software Product, you also agree that +HP may automatically access your HP Product when connected to the +internet to check the version or status of certain Software Products and +may automatically download and install upgrades or updates to such +Software Products on to your HP Product to provide new versions or +updates required to maintain the functionality, performance, or security +of the HP Software and your HP Product and facilitate the provision of +support or other services provided to you. In certain cases, and +depending on the type of upgrade or update, notifications will be +provided to you (via pop-up or other means), which may require you to +initiate the upgrade or update. + +3. ADDITIONAL SOFTWARE. This EULA applies to updates or +supplements to the original Software Product provided by HP unless +HP provides other terms along with the update or supplement. In case +of a conflict between such terms, the other terms will prevail. + +4. TRANSFER. + +a. Third Party. The initial user of the Software Product may make a +one-time transfer of the Software Product to another end user. Any +transfer must include all component parts, media, printed materials, +this EULA, and if applicable, the Certificate of Authenticity. The transfer +may not be an indirect transfer, such as a consignment. Prior to the +transfer, the end user receiving the transferred product must agree to +all the EULA terms. Upon transfer of the Software Product, your license +is automatically terminated. + +b. Restrictions. You may not rent, lease or lend the Software Product or +use the Software Product for commercial timesharing or bureau use. +You may not sublicense, assign or transfer the license or Software +Product except as expressly provided in this EULA. + +5. PROPRIETARY RIGHTS. All intellectual property rights in the +Software Product and user documentation are owned by HP or its +suppliers and are protected by law, including but not limited to United +States copyright, trade secret, and trademark law, as well as other +applicable laws and international treaty provisions. You shall not +remove any product identification, copyright notices or proprietary +restrictions from the Software Product. + +6. LIMITATION ON REVERSE ENGINEERING. You may not reverse +engineer, decompile, or disassemble the Software Product, except and +only to the extent that the right to do so is mandated under applicable +law notwithstanding this limitation or it is expressly provided for in this +EULA. + +7. TERM. This EULA is effective unless terminated or rejected. This +EULA will also terminate upon conditions set forth elsewhere in this +EULA or if you fail to comply with any term or condition of this EULA. + +8. CONSENT TO COLLECTION/USE OF DATA. + +a. HP will use cookies and other web technology tools to collect +anonymous technical information related to HP Software and your HP +Product. This data will be used to provide the upgrades and related +support or other services described in Section 2. HP will also collect +personal information including your Internet Protocol address or other +unique identifier information associated with your HP Product and data +provided by you on registration of your HP Product. As well as +providing the upgrades and related support or other services, this data +will be used for sending marketing communications to you (in each +case with your express consent where required by applicable law). +To the extent permitted by applicable law, by accepting these terms +and conditions you consent to the collection and use of anonymous +and personal data by HP, its subsidiaries, and affiliates as described in +this EULA and as further described in HP�s privacy policy +www.hp.com/go/privacy + +b. Collection/Use by Third Parties. Certain software programs included +in your HP Product are provided and separately licensed to you by third +party providers (�Third Party Software�). Third Party Software may be +installed and operational on your HP Product even if you choose not to +activate/purchase such software. Third Party Software may collect and +transmit technical information about your system (i.e., IP address, +unique device identifier, software version installed, etc.) and other +system data. This information is used by the third party to identify +technical system attributes and ensure that the most current version of +the software has been installed on your system. If you do not want the +Third Party Software to collect this technical information or +automatically send you version updates, you should uninstall the +software prior to connecting to the Internet. + +9. DISCLAIMER OF WARRANTIES. TO THE MAXIMUM EXTENT +PERMITTED BY APPLICABLE LAW, HP AND ITS SUPPLIERS PROVIDE THE +SOFTWARE PRODUCT �AS IS� AND WITH ALL FAULTS, AND HEREBY +DISCLAIM ALL OTHER WARRANTIES, GUARANTEES, AND CONDITIONS, +EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT +LIMITED TO, WARRANTIES OF TITLE AND NON-INFRINGEMENT, ANY +IMPLIED WARRANTIES, DUTIES, GUARANTEES, OR CONDITIONS OF +MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A +PARTICULAR PURPOSE, AND OF LACK OF VIRUSES ALL WITH REGARD +TO THE SOFTWARE PRODUCT. Some states/jurisdictions do not allow +exclusion of implied warranties or limitations on the duration of implied +warranties, so the above disclaimer may not apply to you in its entirety. +IN AUSTRALIA AND NEW ZEALAND, THE SOFTWARE COMES WITH +GUARANTEES THAT CANNOT BE EXCLUDED UNDER AUSTRALIAN AND +NEW ZEALAND CONSUMER LAWS. AUSTRALIAN CONSUMERS ARE +ENTITLED TO A REPLACEMENT OR A REFUND FOR A MAJOR FAILURE +AND COMPENSATION FOR OTHER REASONABLY FORESEEABLE LOSS +OR DAMAGE. AUSTRALIAN CONSUMERS ARE ALSO ENTITLED TO +HAVE THE SOFTWARE REPAIRED OR REPLACED IF IT FAILS TO BE OF +ACCEPTABLE QUALITY AND THE FAILURE DOES NOT AMOUNT TO A +MAJOR FAILURE. NEW ZEALAND CONSUMERS WHO ARE PURCHASING +GOODS FOR PERSONAL, DOMESTIC OR HOUSEHOLD USE OR +CONSUMPTION AND NOT FOR THE PURPOSE OF A BUSINESS (�NEW +ZEALAND CONSUMERS�) ARE ENTITLED TO REPAIR, REPLACEMENT OR +REFUND FOR A FAILURE AND COMPENSATION FOR OTHER +REASONABLY FORESEEABLE LOSS OR DAMAGE. + +10. LIMITATION OF LIABILITY. Subject to local law, notwithstanding +any damages that you might incur, the entire liability of HP and any of +its suppliers under any provision of this EULA and your exclusive +remedy for all of the foregoing shall be limited to the greater of the +amount actually paid by you separately for the Software Product or U.S. +$5.00. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN +NO EVENT SHALL HP OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, +INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES +WHATSOEVER, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR +LOSS OF PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR +BUSINESS INTERRUPTION, FOR PERSONAL INJURY, FOR LOSS OF +PRIVACY ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF +OR INABILITY TO USE THE SOFTWARE PRODUCT, OR OTHERWISE IN +CONNECTION WITH ANY PROVISION OF THIS EULA, EVEN IF HP OR +ANY SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES AND EVEN IF THE REMEDY FAILS OF ITS ESSENTIAL +PURPOSE. Some states/jurisdictions do not allow the exclusion or +limitation of incidental or consequential damages, so the above +limitation or exclusion may not apply to you. + +11. U.S. GOVERNMENT CUSTOMERS. Consistent with FAR 12.211 +and 12.212, Commercial Computer Software, Computer Software +Documentation, and Technical Data for Commercial Items are licensed +to the U.S. Government under HP's standard commercial license. + +12. COMPLIANCE WITH EXPORT LAWS. You shall comply with all +laws and regulations of the United States and other countries ("Export +Laws") to assure that the Software Product is not (1) exported, directly +or indirectly, in violation of Export Laws, or (2) used for any purpose +prohibited by Export Laws, including, without limitation, nuclear, +chemical, or biological weapons proliferation. + +13. CAPACITY AND AUTHORITY TO CONTRACT. You represent that +you are of the legal age of majority in your state of residence and, if +applicable, you are duly authorized by your employer to enter into this +contract. + +14. APPLICABLE LAW. This EULA is governed by the laws of the +country in which the equipment was purchased. + +15. ENTIRE AGREEMENT. This EULA (including any addendum or +amendment to this EULA which is included with the HP Product) is the +entire agreement between you and HP relating to the Software Product +and it supersedes all prior or contemporaneous oral or written +communications, proposals and representations with respect to the +Software Product or any other subject matter covered by this EULA. To +the extent the terms of any HP policies or programs for support +services conflict with the terms of this EULA, the terms of this EULA +shall control. + +�Copyright 2018-2024 HP Development Company, L.P.. + +The information contained herein is subject to change without notice. +All other product names mentioned herein may be trademarks of their +respective companies. To the extent permitted by applicable law, the +only warranties for HP products and services are set forth in the express +warranty statements accompanying such products and services. +Nothing herein should be construed as constituting an additional +warranty. To the extent permitted by applicable law, HP shall not be +liable for technical or editorial errors or omissions contained herein. + +First Edition: August 2015 +817678-001 + diff --git a/Bios-Update-HP-v2.0/module/HP.Sinks/HP.Sinks.psd1 b/Bios-Update-HP-v2.0/module/HP.Sinks/HP.Sinks.psd1 new file mode 100644 index 0000000..79a562c --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Sinks/HP.Sinks.psd1 @@ -0,0 +1,284 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + + + +@{ + + # Script module or binary module file associated with this manifest. + RootModule = 'HP.Sinks.psm1' + + # Version number of this module. + #FullModuleVersion = '1.7.2.774' + ModuleVersion = '1.7.2' + + # ID used to uniquely identify this module + GUID = '6c52dac6-35ee-4c4b-b0f1-a9dba3df70d8' + + # Author of this module + Author = 'HP Development Company, L.P.' + + # Company or vendor of this module + CompanyName = 'HP Inc' + + # Copyright statement for this module + Copyright = '(C) Copyright 2018-2024 HP Development Company, L.P.' + + + # Description of the functionality provided by this module + Description = 'Output sinks module' + + # Minimum version of the Windows PowerShell engine required by this module + PowerShellVersion = '5.1' + + FunctionsToExport = + 'Send-ToEventLog', + 'Unregister-EventLogSink', + 'Register-EventLogSink', + 'Send-ToSyslog', + 'Send-ToCMTraceLog', + 'Log-Warning', + 'Log-Error', + 'Log-Info', + 'Set-HPCMSLLogFormat', + 'Get-HPCMSLLogFormat', + 'Write-LogError', + 'Write-LogWarning', + "Write-LogInfo" + + + PrivateData = @{ + PSData = @{ + LicenseUri = 'https://developers.hp.com/node/11493' + RequireLicenseAcceptance = $true + } # End of PSData hashtable +} # End of PrivateData hashtable + +} + + +# SIG # Begin signature block +# MIIoHQYJKoZIhvcNAQcCoIIoDjCCKAoCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBGq7B4wVU1GC5x +# M2tqctokDOhGbJR40+A++HI3JjJ9WaCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6TCCGeUCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIO6ftisi +# kssXr2Xjbgl8q6bdgMhL4fuAlosk3Oy6zmg4MA0GCSqGSIb3DQEBAQUABIIBgIFT +# M0X55z4x6Bkt/SOdubmEWT9RHrseV1nwVcsmkbM+FOJERxQtSl2FBGV5vfCE1Rq9 +# 3fuz30Vx8ybS6xC2n0QE+nKDQQlbBc7LhSJ6T29wfYQPn8gr2iodLOAac0vXr8UZ +# 8VCfDDOBEXDXzaffoLz+6wHRMHxO1UDVL0fXPt3PIafO2IRPZvyXEyzKioWbXdVK +# O00DtkRKmuBK2+5XoxZ1K9Vc7aXkNVEAoq6grr4PcEzSsmzPYNpymMsD8sBqgVpU +# ofWAbj+cEfDspTTW8cdRHZ6W8wwIhDdI+H9kduZbrRq70FcYpRRYrgzuc8pG/ZoP +# /nJmq7DkwNcGOZki/KA1VjuZ62OZToiZV1a+wvV0JBjmrvo1dZt6Gc65Br7YL+0I +# XitIHwkrXQFglKM52jVQWna5pXQkuhPuRzOvgV73VNnRoq4+vnOHZbWAI5rmWGx3 +# jnAxB9BEqzezJnqq3jDtExe3A9CPTFESa5rSuXiOFpAynKce8Mwqpj1njTUGmqGC +# Fz8wghc7BgorBgEEAYI3AwMBMYIXKzCCFycGCSqGSIb3DQEHAqCCFxgwghcUAgED +# MQ8wDQYJYIZIAWUDBAIBBQAwdwYLKoZIhvcNAQkQAQSgaARmMGQCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCDROSXgoSB5p/3+E0UK/cY548BfkHGDrED1 +# 0VKiZFKbcwIQGUVFFPvslB8mDDNyxtqrChgPMjAyNDA4MjcxNjU1NTBaoIITCTCC +# BsIwggSqoAMCAQICEAVEr/OUnQg5pr/bP1/lYRYwDQYJKoZIhvcNAQELBQAwYzEL +# MAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJE +# aWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBD +# QTAeFw0yMzA3MTQwMDAwMDBaFw0zNDEwMTMyMzU5NTlaMEgxCzAJBgNVBAYTAlVT +# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEgMB4GA1UEAxMXRGlnaUNlcnQgVGlt +# ZXN0YW1wIDIwMjMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjU0WH +# HYOOW6w+VLMj4M+f1+XS512hDgncL0ijl3o7Kpxn3GIVWMGpkxGnzaqyat0QKYoe +# YmNp01icNXG/OpfrlFCPHCDqx5o7L5Zm42nnaf5bw9YrIBzBl5S0pVCB8s/LB6Yw +# aMqDQtr8fwkklKSCGtpqutg7yl3eGRiF+0XqDWFsnf5xXsQGmjzwxS55DxtmUuPI +# 1j5f2kPThPXQx/ZILV5FdZZ1/t0QoRuDwbjmUpW1R9d4KTlr4HhZl+NEK0rVlc7v +# CBfqgmRN/yPjyobutKQhZHDr1eWg2mOzLukF7qr2JPUdvJscsrdf3/Dudn0xmWVH +# VZ1KJC+sK5e+n+T9e3M+Mu5SNPvUu+vUoCw0m+PebmQZBzcBkQ8ctVHNqkxmg4ho +# Yru8QRt4GW3k2Q/gWEH72LEs4VGvtK0VBhTqYggT02kefGRNnQ/fztFejKqrUBXJ +# s8q818Q7aESjpTtC/XN97t0K/3k0EH6mXApYTAA+hWl1x4Nk1nXNjxJ2VqUk+tfE +# ayG66B80mC866msBsPf7Kobse1I4qZgJoXGybHGvPrhvltXhEBP+YUcKjP7wtsfV +# x95sJPC/QoLKoHE9nJKTBLRpcCcNT7e1NtHJXwikcKPsCvERLmTgyyIryvEoEyFJ +# UX4GZtM7vvrrkTjYUQfKlLfiUKHzOtOKg8tAewIDAQABo4IBizCCAYcwDgYDVR0P +# AQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# IAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQYMBaAFLoW +# 2W1NhS9zKXaaL3WMaiCPnshvMB0GA1UdDgQWBBSltu8T5+/N0GSh1VapZTGj3tXj +# STBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln +# aUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3JsMIGQ +# BggrBgEFBQcBAQSBgzCBgDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl +# cnQuY29tMFgGCCsGAQUFBzAChkxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v +# RGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3J0 +# MA0GCSqGSIb3DQEBCwUAA4ICAQCBGtbeoKm1mBe8cI1PijxonNgl/8ss5M3qXSKS +# 7IwiAqm4z4Co2efjxe0mgopxLxjdTrbebNfhYJwr7e09SI64a7p8Xb3CYTdoSXej +# 65CqEtcnhfOOHpLawkA4n13IoC4leCWdKgV6hCmYtld5j9smViuw86e9NwzYmHZP +# VrlSwradOKmB521BXIxp0bkrxMZ7z5z6eOKTGnaiaXXTUOREEr4gDZ6pRND45Ul3 +# CFohxbTPmJUaVLq5vMFpGbrPFvKDNzRusEEm3d5al08zjdSNd311RaGlWCZqA0Xe +# 2VC1UIyvVr1MxeFGxSjTredDAHDezJieGYkD6tSRN+9NUvPJYCHEVkft2hFLjDLD +# iOZY4rbbPvlfsELWj+MXkdGqwFXjhr+sJyxB0JozSqg21Llyln6XeThIX8rC3D0y +# 33XWNmdaifj2p8flTzU8AL2+nCpseQHc2kTmOt44OwdeOVj0fHMxVaCAEcsUDH6u +# vP6k63llqmjWIso765qCNVcoFstp8jKastLYOrixRoZruhf9xHdsFWyuq69zOuhJ +# RrfVf8y2OMDY7Bz1tqG4QyzfTkx9HmhwwHcK1ALgXGC7KP845VJa1qwXIiNO9OzT +# F/tQa/8Hdx9xl0RBybhG02wyfFgvZ0dl5Rtztpn5aywGRu9BHvDwX+Db2a2QgESv +# gBBBijCCBq4wggSWoAMCAQICEAc2N7ckVHzYR6z9KGYqXlswDQYJKoZIhvcNAQEL +# BQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UE +# CxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBS +# b290IEc0MB4XDTIyMDMyMzAwMDAwMFoXDTM3MDMyMjIzNTk1OVowYzELMAkGA1UE +# BhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2Vy +# dCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMaGNQZJs8E9cklRVcclA8TykTep +# l1Gh1tKD0Z5Mom2gsMyD+Vr2EaFEFUJfpIjzaPp985yJC3+dH54PMx9QEwsmc5Zt +# +FeoAn39Q7SE2hHxc7Gz7iuAhIoiGN/r2j3EF3+rGSs+QtxnjupRPfDWVtTnKC3r +# 07G1decfBmWNlCnT2exp39mQh0YAe9tEQYncfGpXevA3eZ9drMvohGS0UvJ2R/dh +# gxndX7RUCyFobjchu0CsX7LeSn3O9TkSZ+8OpWNs5KbFHc02DVzV5huowWR0QKfA +# csW6Th+xtVhNef7Xj3OTrCw54qVI1vCwMROpVymWJy71h6aPTnYVVSZwmCZ/oBpH +# IEPjQ2OAe3VuJyWQmDo4EbP29p7mO1vsgd4iFNmCKseSv6De4z6ic/rnH1pslPJS +# lRErWHRAKKtzQ87fSqEcazjFKfPKqpZzQmiftkaznTqj1QPgv/CiPMpC3BhIfxQ0 +# z9JMq++bPf4OuGQq+nUoJEHtQr8FnGZJUlD0UfM2SU2LINIsVzV5K6jzRWC8I41Y +# 99xh3pP+OcD5sjClTNfpmEpYPtMDiP6zj9NeS3YSUZPJjAw7W4oiqMEmCPkUEBID +# fV8ju2TjY+Cm4T72wnSyPx4JduyrXUZ14mCjWAkBKAAOhFTuzuldyF4wEr1GnrXT +# drnSDmuZDNIztM2xAgMBAAGjggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBS6FtltTYUvcyl2mi91jGogj57IbzAfBgNVHSMEGDAWgBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUH +# AwgwdwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp +# Y2VydC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv +# bS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0 +# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3Js +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsF +# AAOCAgEAfVmOwJO2b5ipRCIBfmbW2CFC4bAYLhBNE88wU86/GPvHUF3iSyn7cIoN +# qilp/GnBzx0H6T5gyNgL5Vxb122H+oQgJTQxZ822EpZvxFBMYh0MCIKoFr2pVs8V +# c40BIiXOlWk/R3f7cnQU1/+rT4osequFzUNf7WC2qk+RZp4snuCKrOX9jLxkJods +# kr2dfNBwCnzvqLx1T7pa96kQsl3p/yhUifDVinF2ZdrM8HKjI/rAJ4JErpknG6sk +# HibBt94q6/aesXmZgaNWhqsKRcnfxI2g55j7+6adcq/Ex8HBanHZxhOACcS2n82H +# hyS7T6NJuXdmkfFynOlLAlKnN36TU6w7HQhJD5TNOXrd/yVjmScsPT9rp/Fmw0HN +# T7ZAmyEhQNC3EyTN3B14OuSereU0cZLXJmvkOHOrpgFPvT87eK1MrfvElXvtCl8z +# OYdBeHo46Zzh3SP9HSjTx/no8Zhf+yvYfvJGnXUsHicsJttvFXseGYs2uJPU5vIX +# mVnKcPA3v5gA3yAWTyf7YGcWoWa63VXAOimGsJigK+2VQbc61RWYMbRiCQ8KvYHZ +# E/6/pNHzV9m8BPqC3jLfBInwAM1dwvnQI38AC+R2AibZ8GV2QqYphwlHK+Z/GqSF +# D/yYlvZVVCsfgPrA8g4r5db7qS9EFUrnEw4d2zc4GqEr9u3WfPwwggWNMIIEdaAD +# AgECAhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYT +# AlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2Vy +# dC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0y +# MjA4MDEwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYD +# VQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAf +# BgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEB +# BQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4Smn +# PVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6f +# qVcWWVVyr2iTcMKyunWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O +# 7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZ +# Vu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4F +# fYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLm +# qaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMre +# Sx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/ch +# srIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+U +# DCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xM +# dT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUb +# AgMBAAGjggE6MIIBNjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAO +# BgNVHQ8BAf8EBAMCAYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRw +# Oi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRz +# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0f +# BD4wPDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNz +# dXJlZElEUm9vdENBLmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEM +# BQADggEBAHCgv0NcVec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLt +# pIh3bb0aFPQTSnovLbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouy +# XtTP0UNEm0Mh65ZyoUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jS +# TEAZNUZqaVSwuKFWjuyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAc +# AgPLILCsWKAOQGPFmCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2 +# h5b9W9FcrBjDTZ9ztwGpn1eqXijiuZQxggN2MIIDcgIBATB3MGMxCzAJBgNVBAYT +# AlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQg +# VHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OU +# nQg5pr/bP1/lYRYwDQYJYIZIAWUDBAIBBQCggdEwGgYJKoZIhvcNAQkDMQ0GCyqG +# SIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNDA4MjcxNjU1NTBaMCsGCyqGSIb3 +# DQEJEAIMMRwwGjAYMBYEFGbwKzLCwskPgl3OqorJxk8ZnM9AMC8GCSqGSIb3DQEJ +# BDEiBCCwO6x18mkPSK4pzkuioX4CPl/LvmRjct5ZuAr8yOeN8TA3BgsqhkiG9w0B +# CRACLzEoMCYwJDAiBCDS9uRt7XQizNHUQFdoQTZvgoraVZquMxavTRqa1Ax4KDAN +# BgkqhkiG9w0BAQEFAASCAgA+DyUe9M6QLzuXfbzVmL7JuUhB4IPNcDrdK5+yj9EW +# aN+AsDfbyYDBc7trSIT2KuqOm+15QFYnpIfARidF31ykRkwTBxKEKyfDMTE8AYsP +# G70scYc/wtiW1tGJHJ2FjxiBpWiP2Tzfkj/hmIfq2YHNK1AV0esIbSMaoqW/Db8o +# S1pRkfVf5NyTQvBxfR5lyhT+6ssJ7jpFbA+x+IP3imfT+ybvS21zNPlZY8eX8Tod +# u7jzJng+nsNadgur9xk143qS9YXNDkD9whd+xbXMa1rQKpR63HLKkU42E/miSwYw +# 4PF1b+7+MZYJe2pBT9QvBiuGKoIAUECXASxzKM3OiC/BBhaG5I4XzfU253t7Qb1S +# y+Q0jKqkmy/Ib1MCn813sZbqFVPUlWyR0f9jk/uWENAkYerIPfXHDRxbJRpfty7w +# fe24kXJT8bey/9+lDx/17BZE7F8J/N3yRlhWbxyNIanxQq+Uat6zJ///DhKJeDMp +# 9IlRvD3ZsbFMT3McE977bpDEFSwiUuc3NGbMYPsgUykLTlGHUKBbgmFG5pPlunGb +# TZUNEgH1xZkldF7RYHg2TH8sSRahS273LAUFGp8WNiOxydnjtmPyoTSELG2trRHT +# /sm//18lwLj8Sv5+iux+ND06lORTjmrlfWq8L8gXo34c8QXicr+vD0MJWzAAz2gS +# Gw== +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Sinks/HP.Sinks.psm1 b/Bios-Update-HP-v2.0/module/HP.Sinks/HP.Sinks.psm1 new file mode 100644 index 0000000..571e283 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Sinks/HP.Sinks.psm1 @@ -0,0 +1,1096 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + +using namespace HP.CMSLHelper + +# CMSL is normally installed in C:\Program Files\WindowsPowerShell\Modules +# but if installed via PSGallery and via PS7, it is installed in a different location +if (Test-Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll") { + Add-Type -Path "$PSScriptRoot\..\HP.Private\HP.CMSLHelper.dll" +} +else{ + Add-Type -Path "$PSScriptRoot\..\..\HP.Private\1.7.2\HP.CMSLHelper.dll" +} + + +enum LogType{ + Simple + CMTrace +} + +enum LogSeverity{ + Information = 1 + Warning = 2 + Error = 3 +} + +function Get-HPPrivateThreadID { [Threading.Thread]::CurrentThread.ManagedThreadId } +function Get-HPPrivateUserIdentity { [System.Security.Principal.WindowsIdentity]::GetCurrent().Name } +function Get-HPPrivateLogVar { $Env:HPCMSL_LOG_FORMAT } + +<# +.SYNOPSIS + Sends a message to a syslog server + +.DESCRIPTION + This command forwards data to a syslog server. This command currently supports UDP (default) and TCP connections. For more information, see RFC 5424 in the 'See also' section. + +.PARAMETER message + Specifies the message to send + +.PARAMETER severity + Specifies the severity of the message. If not specified, the severity defaults to 'Informational'. + +.PARAMETER facility + Specifies the facility of the message. If not specified, the facility defaults to 'User Message'. + +.PARAMETER clientname + Specifies the client name. If not specified, this command uses the current computer name. + +.PARAMETER timestamp + Specifies the event time stamp. If not specified, this command uses the current time. + +.PARAMETER port + Specifies the target port. If not specified and HPSINK_SYSLOG_MESSAGE_TARGET_PORT is not set, this command uses port 514 for both TCP and UDP. + +.PARAMETER tcp + If specified, this command uses TCP instead of UDP. Default is UDP. Switching to TCP may generate additional traffic but allows the protocol to acknowledge delivery. + +.PARAMETER tcpframing + Specifies octet-counting or non-transparent-framing TCP framing. This parameter only applies if the -tcp parameter is specified. Default value is octet-counting unless HPSINK_SYSLOG_MESSAGE_TCPFRAMING is specified. For more information, see RFC 6587 in the "See also" section. + +.PARAMETER maxlen + Specifies maximum length (in bytes) of message that the syslog server accepts. Common sizes are between 480 and 2048 bytes. Default is 2048 if not specified and HPSINK_SYSLOG_MESSAGE_MAXLEN is not set. + +.PARAMETER target + Specifies the target computer on which to perform this operation. Local computer is assumed if not specified and HPSINK_SYSLOG_MESSAGE_TARGET is not set. + +.PARAMETER PassThru + If specified, this command sends the message to the pipeline upon completion and any error in the command is non-terminating. + + +.NOTES + + This command supports the following environment variables. These overwrite the defaults documented above. + + - HPSINK_SYSLOG_MESSAGE_TARGET_PORT: override default target port + - HPSINK_SYSLOG_MESSAGE_TCPFRAMING: override TCP Framing format + - HPSINK_SYSLOG_MESSAGE_MAXLEN: override syslog message max length + - HPSINK_SYSLOG_MESSAGE_TARGET: override host name of the syslog server + + + Defaults can be configured via the environment. This affects all related commands. For example, when applying them to eventlog-related commands, all eventlog-related commands are affected. + + In the following example, the HPSINK_EVENTLOG_MESSAGE_TARGET and HPSINK_EVENTLOG_MESSAGE_SOURCE variables affect both the Register-EventLogSink and Send-ToEventLog commands. + + ```PowerShell + $ENV:HPSINK_EVENTLOG_MESSAGE_TARGET="remotesyslog.mycompany.com" + $ENV:HPSINK_EVENTLOG_MESSAGE_SOURCE="mysource" + Register-EventLogSink + "hello" | Send-ToEventLog + ``` + + +.INPUTS + The message can be piped to this command, rather than provided via the -message parameter. + +.OUTPUTS + If the -PassThru parameter is specified, the original message is returned. This allows chaining multiple SendTo-XXX commands. + +.EXAMPLE + "hello" | Send-ToSyslog -tcp -server mysyslogserver.mycompany.com + + This sends "hello" to the syslog server on mysyslogserver.mycompany.com via TCP. Alternately, the syslog server could be set in the environment variable HPSINK_SYSLOG_MESSAGE_TARGET. + +.LINK + [RFC 5424 - "The Syslog Protocol"](https://tools.ietf.org/html/rfc5424) + +.LINK + [RFC 6587 - "Transmission of Syslog Messages over TCP"](https://tools.ietf.org/html/rfc6587) + +.LINK + [Send-ToEventlog](https://developers.hp.com/hp-client-management/doc/Send-ToEventLog) + + +#> +function Send-ToSyslog +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Send-ToSyslog")] + param + ( + [ValidateNotNullOrEmpty()][Parameter(Position = 0,ValueFromPipeline = $True,Mandatory = $True)] $message, + [Parameter(Position = 1,Mandatory = $false)] [syslog_severity_t]$severity = [syslog_severity_t]::informational, + [Parameter(Position = 2,Mandatory = $false)] [syslog_facility_t]$facility = [syslog_facility_t]::user_message, + [Parameter(Position = 3,Mandatory = $false)] [string]$clientname, + [Parameter(Position = 4,Mandatory = $false)] [string]$timestamp, + [Parameter(Position = 5,Mandatory = $false)] [int]$port = $HPSINK:HPSINK_SYSLOG_MESSAGE_TARGET_PORT, + [Parameter(Position = 6,Mandatory = $false)] [switch]$tcp, + [ValidateSet("octet-counting","non-transparent-framing")][Parameter(Position = 7,Mandatory = $false)] [string]$tcpframing = $ENV:HPSINK_SYSLOG_MESSAGE_TCPFRAMING, + [Parameter(Position = 8,Mandatory = $false)] [int]$maxlen = $ENV:HPSINK_SYSLOG_MESSAGE_MAXLEN, + [Parameter(Position = 9,Mandatory = $false)] [switch]$PassThru, + [Parameter(Position = 10,Mandatory = $false)] [string]$target = $ENV:HPSINK_SYSLOG_MESSAGE_TARGET + ) + + # Create a UDP Client Object + $tcpclient = $null + $use_tcp = $false + + + #defaults (change these in environment) + if ($target -eq $null -or $target -eq "") { throw "parameter $target is required" } + if ($tcpframing -eq $null -or $tcpframing -eq "") { $tcpframing = "octet-counting" } + if ($port -eq 0) { $port = 514 } + if ($maxlen -eq 0) { $maxlen = 2048 } + + + if ($tcp.IsPresent -eq $false) { + switch ([int]$ENV:HPSINK_SYSLOG_MESSAGE_USE_TCP) { + 0 { $use_tcp = $false } + 1 { $use_tcp = $true } + } + } + else { $use_tcp = $tcp.IsPresent } + + + Write-Verbose "Sending message to syslog server" + if ($use_tcp) { + Write-Verbose "TCP Connection to $target`:$port" + $client = New-Object System.Net.Sockets.TcpClient + } + else + { + Write-Verbose "UDP Connection to $target`:$port" + $client = New-Object System.Net.Sockets.UdpClient + } + + try { + $client.Connect($target,$port) + } + catch { + if ($_.Exception.innerException -ne $null) { + Write-Error $_.Exception.innerException.Message -Category ConnectionError -ErrorAction Stop + } else { + Write-Error $_.Exception.Message -Category ConnectionError -ErrorAction Stop + } + } + + if ($use_tcp -and -not $client.Connected) + { + $prefix = "udp" + if ($use_tcp) { $prefix = $tcp } + throw "Could not connect to syslog host $prefix`://$target`:$port" + } + + + Write-Verbose "Syslog faciliy=$($facility.value__), severity=$($severity.value__)" + + $priority = ($facility.value__ * 8) + $severity.value__ + Write-Verbose "Priority is $priority" + + if (($clientname -eq "") -or ($clientname -eq $null)) { + Write-Verbose "Defaulting to client = $($ENV:computername)" + $clientname = $env:computername + } + + if (($timestamp -eq "") -or ($timestamp -eq $null)) { + $timestamp = Get-Date -Format "yyyy:MM:dd:-HH:mm:ss zzz" + Write-Verbose "Defaulting to timestamp = $timestamp" + } + + $msg = "<{0}>{1} {2} {3}" -f $priority,$timestamp,$hostname,$message + + Write-Verbose ("Sending the message: $msg") + if ($use_tcp) { + Write-Verbose ("Sending via TCP") + + + if ($msg.Length -gt $maxlen) { + $maxlen = $maxlen - ([string]$maxlen).Length + Write-Verbose ("This message has been truncated because maximum effective length is $maxlen but the message is $($msg.length) ") + $msg = $msg.substring(0,$maxlen - ([string]$maxlen).Length) + } + + switch ($tcpframing) { + "octet-counting" { + Write-Verbose "Encoding TCP payload with 'octet-counting'" + $encoded = '{0} {1}' -f $msg.Length,$msg + $bytes = [System.Text.Encoding]::ASCII.GetBytes($encoded) + } + + "non-transparent-framing" { + Write-Verbose "Encoding with 'non-transparent-framing'" + $encoded = '{0}{1}' -f $msg.Length,$msg + $bytes = [System.Text.Encoding]::ASCII.GetBytes($encoded) + } + } + + try { + [void]$client.getStream().Write($bytes,0,$bytes.Length) + } + catch { + throw ("Could not send syslog message: $($_.Exception.Message)") + } + } + else + { + + Write-Verbose ("Sending via UDP") + try { + $bytes = [System.Text.Encoding]::ASCII.GetBytes($msg) + if ($bytes.Length -gt $maxlen) { + Write-Verbose ("This message has been truncated, because maximum length is $maxlen but the message is $($bytes.length) ") + $bytes = $bytes[0..($maxlen - 1)] + } + [void]$client.Send($bytes,$bytes.Length) + } + catch { + if (-not $PassThru.IsPresent) { + throw ("Could not send syslog message: $($_.Exception.Message)") + } + else + { + Write-Error -Message $_.Exception.Message -ErrorAction Continue + } + + } + } + + Write-Verbose "Send complete" + $client.Close(); + if ($PassThru) { return $message } +} + + +<# +.SYNOPSIS + Registers a source in an event log + +.DESCRIPTION + This command registers a source in an event log. must be executed before sending messages to the event log via the Send-ToEventLog command. + The source must match the source in the Send-ToEventLog command. By default, it is assumed that the source is 'HP-CSL'. + + This command can be unregistered using the Unregister-EventLogSink command. + +.PARAMETER logname + Specifies the log section in which to register this source + +.PARAMETER source + Specifies the event log source that will be used when logging. + + The source can also be specified via the HPSINK_EVENTLOG_MESSAGE_SOURCE environment variable. + +.PARAMETER target + Specifies the target computer on which to perform this command. Local computer is assumed if not specified, unless environment variable HPSINK_EVENTLOG_MESSAGE_TARGET is defined. + + Important: the user identity running the PowerShell script must have permissions to write to the remote event log. + +.NOTES + This command reads the following environment variables for setting defaults: + + - HPSINK_EVENTLOG_MESSAGE_SOURCE: override default source name + - HPSINK_EVENTLOG_MESSAGE_LOG: override default message log name + - HPSINK_EVENTLOG_MESSAGE_TARGET: override event log server name + +.LINK + [Unregister-EventLogSink](https://developers.hp.com/hp-client-management/doc/Unregister-EventLogSink) + +.LINK + [Send-ToEventLog](https://developers.hp.com/hp-client-management/doc/Send-ToEventLog) + +.EXAMPLE + Register-EventLogSink +#> +function Register-EventLogSink +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Register-EventLogSink")] + param + ( + [Parameter(Position = 0,Mandatory = $false)] [string]$logname = $ENV:HPSINK_EVENTLOG_MESSAGE_LOG, + [Parameter(Position = 1,Mandatory = $false)] [string]$source = $ENV:HPSINK_EVENTLOG_MESSAGE_SOURCE, + [Parameter(Position = 2,Mandatory = $false)] [string]$target = $ENV:HPSINK_EVENTLOG_MESSAGE_TARGET + ) + + + #defaults (change these in environment) + if ($source -eq $null -or $source -eq "") { $source = "HP-CSL" } + if ($logname -eq $null -or $logname -eq "") { $logname = "Application" } + if ($target -eq $null -or $target -eq "") { $target = "." } + + + Write-Verbose "Registering source $logname / $source" + $params = @{ + LogName = $logname + source = $source + } + + if ($target -ne ".") { $params.Add("ComputerName",$target) } + New-EventLog @params +} + +<# +.SYNOPSIS + Unregisters a source registered by the Register-EventLogSink command + +.DESCRIPTION + This command removes a registration that was previously registered by the Register-EventLogSink command. + +Note: +Switching between formats changes the file encoding. The 'Simple' mode uses unicode encoding (UTF-16) while the 'CMTrace' mode uses UTF-8. This is partly due to historical reasons +(default encoding in UTF1-16 and existing log is UTF-16) and partly due to limitations in CMTrace tool, which seems to have trouble with UTF-16 in some cases. + +As a result, it is important to start with a new log when switching modes. Writing UTF-8 to UTF-16 files or vice versa will cause encoding and display issues. + +.PARAMETER source + Specifies the event log source that was registered via the Register-EventLogSink command. The source can also be specified via the HPSINK_EVENTLOG_MESSAGE_SOURCE environment variable. + +.PARAMETER target + Specifies the target computer on which to perform this command. Local computer is assumed if not specified, unless environment variable + HPSINK_EVENTLOG_MESSAGE_TARGET is defined. + + Important: the user identity running the PowerShell script must have permissions to write to the remote event log. + +.NOTES + This command reads the following environment variables for setting defaults: + + - HPSINK_EVENTLOG_MESSAGE_SOURCE: override default source name + - HPSINK_EVENTLOG_MESSAGE_TARGET: override event log server name + +.LINK + [Register-EventLogSink](https://developers.hp.com/hp-client-management/doc/Register-EventLogSink) + +.LINK + [Send-ToEventLog](https://developers.hp.com/hp-client-management/doc/Send-ToEventLog) + +.EXAMPLE + Unregister-EventLogSink +#> +function Unregister-EventLogSink +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Unregister-EventLogSink")] + param + ( + [Parameter(Position = 0,Mandatory = $false)] [string]$source = $ENV:HPSINK_EVENTLOG_MESSAGE_SOURCE, + [Parameter(Position = 1,Mandatory = $false)] [string]$target = $ENV:HPSINK_EVENTLOG_MESSAGE_TARGET + ) + + #defaults (change these in environment) + if ($source -eq $null -or $source -eq "") { $source = "HP-CSL" } + if ($target -eq $null -or $target -eq "") { $target = "." } + + + Write-Verbose "Unregistering source $source" + $params = @{ + source = $source + } + + if ($target -ne ".") { $params.Add("ComputerName",$target) } + Remove-EventLog @params +} + +<# +.SYNOPSIS + Sends a message to an event log + +.DESCRIPTION + This command sends a message to an event log. + + The source should be initialized with the Register-EventLogSink command to register the source name prior to using this command. + +.PARAMETER id + Specifies the event id that will be registered under the 'Event ID' column in the event log. Default value is 0. + +.PARAMETER source + Specifies the event log source that will be used when logging. This source should be registered via the Register-EventLogSink command. + + The source can also be specified via the HPSINK_EVENTLOG_MESSAGE_SOURCE environment variable. + +.PARAMETER message + Specifies the message to log. This parameter is required. + +.PARAMETER severity + Specifies the severity of the message. If not specified, the severity is set as 'Information'. + +.PARAMETER category + Specifies the category of the message. The category shows up under the 'Task Category' column. If not specified, it is 'General', unless environment variable HPSINK_EVENTLOG_MESSAGE_CATEGORY is defined. + +.PARAMETER logname + Specifies the log in which to log (e.g. Application, System, etc). If not specified, it will log to Application, unless environment variable HPSINK_EVENTLOG_MESSAGE_LOG is defined. + +.PARAMETER rawdata + Specifies any raw data to add to the log entry + +.PARAMETER target + Specifies the target computer on which to perform this operation. Local computer is assumed if not specified, unless environment variable HPSINK_EVENTLOG_MESSAGE_TARGET is defined. + + Important: the user identity running the PowerShell script must have permissions to write to the remote event log. + +.PARAMETER PassThru + If specified, this command sends the message to the pipeline upon completion and any error in the command is non-terminating. + +.EXAMPLE + "hello" | Send-ToEventLog + +.NOTES + This command reads the following environment variables for setting defaults. + + - HPSINK_EVENTLOG_MESSAGE_SOURCE: override default source name + - HPSINK_EVENTLOG_MESSAGE_CATEGORY: override default category id + - HPSINK_EVENTLOG_MESSAGE_LOG: override default message log name + - HPSINK_EVENTLOG_MESSAGE_TARGET: override event log server name + + Defaults can be configured via the environment. This affects all related commands. For example, when applying them to eventlog-related commands, all eventlog-related commands are affected. + + In the following example, the HPSINK_EVENTLOG_MESSAGE_TARGET and HPSINK_EVENTLOG_MESSAGE_SOURCE variables affect both the Register-EventLogSink and Send-ToEventLog commands. + + ```PowerShell + $ENV:HPSINK_EVENTLOG_MESSAGE_TARGET="remotesyslog.mycompany.com" + $ENV:HPSINK_EVENTLOG_MESSAGE_SOURCE="mysource" + Register-EventLogSink + "hello" | Send-ToEventLog + ``` + + +.LINK + [Unregister-EventLogSink](https://developers.hp.com/hp-client-management/doc/Unregister-EventLogSink) + +.LINK + [Register-EventLogSink](https://developers.hp.com/hp-client-management/doc/Register-EventLogSink) + +.LINK + [Send-ToSyslog](https://developers.hp.com/hp-client-management/doc/Send-ToSyslog) + + +#> +function Send-ToEventLog +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Send-ToEventlog")] + param + ( + + [Parameter(Position = 0,Mandatory = $false)] [string]$source = $ENV:HPSINK_EVENTLOG_MESSAGE_SOURCE, + [Parameter(Position = 1,Mandatory = $false)] [int]$id = 0, + [ValidateNotNullOrEmpty()][Parameter(Position = 2,ValueFromPipeline = $true,Mandatory = $True)] $message, + [Parameter(Position = 3,Mandatory = $false)] [eventlog_severity_t]$severity = [eventlog_severity_t]::informational, + [Parameter(Position = 4,Mandatory = $false)] [int16]$category = $ENV:HPSINK_EVENTLOG_MESSAGE_CATEGORY, + [Parameter(Position = 5,Mandatory = $false)] [string]$logname = $ENV:HPSINK_EVENTLOG_MESSAGE_LOG, + [Parameter(Position = 6,Mandatory = $false)] [byte[]]$rawdata = $null, + [Parameter(Position = 7,Mandatory = $false)] [string]$target = $ENV:HPSINK_EVENTLOG_MESSAGE_TARGET, + [Parameter(Position = 8,Mandatory = $false)] [switch]$PassThru + ) + + #defaults (change these in environment) + if ($source -eq $null -or $source -eq "") { $source = "HP-CSL" } + if ($logname -eq $null -or $logname -eq "") { $logname = "Application" } + if ($target -eq $null -or $target -eq "") { $target = "." } + + Write-Verbose "Sending message (category=$category, id=$id) to eventlog $logname with source $source" + $params = @{ + EntryType = $severity.value__ + Category = $category + Message = $message + LogName = $logname + source = $source + EventId = $id + } + + + if ($target -ne ".") { + $params.Add("ComputerName",$target) + Write-Verbose ("The target machine is remote ($target)") + } + + if ($rawdata -ne $null) { $params.Add("RawData",$rawdata) } + + try { + Write-EventLog @params + } + catch { + if (-not $PassThru.IsPresent) { + throw ("Could not send eventlog message: $($_.Exception.Message)") + } + else + { + Write-Error -Message $_.Exception.Message -ErrorAction Continue + } + } + if ($PassThru) { return $message } +} + + + + +<# +.SYNOPSIS + Writes a 'simple' LOG entry + Private command. Do not export +#> +function Write-HPPrivateSimple { + + [CmdletBinding()] + param + ( + [Parameter(Mandatory = $True,Position = 0)] + [LogSeverity]$Severity, + [Parameter(Mandatory = $True,Position = 1)] + [string]$Message, + [Parameter(Mandatory = $True,Position = 2)] + [string]$Component, + [Parameter(Mandatory = $False,Position = 3)] + [string]$File = $Null + ) + $prefix = switch ($severity) { + Error { " [ERROR] " } + Warning { " [WARN ] " } + default { "" } + } + + if ($File) { + if (-not [System.IO.Directory]::Exists([System.IO.Path]::GetDirectoryName($File))) + { + throw [System.IO.DirectoryNotFoundException]"Path not found: $([System.IO.Path]::GetDirectoryName($File))" + } + } + + $context = Get-HPPrivateUserIdentity + + $line = "[$(Get-Date -Format o)] $Context - $Prefix $Message" + if ($File) { + $line | Out-File -Width 1024 -Append -Encoding unicode -FilePath $File + } + else { + $line + } + +} + +<# +.SYNOPSIS + Writes a 'CMTrace' LOG entry + Private command. Do not export +#> +function Write-HPPrivateCMTrace { + [CmdletBinding()] + param + ( + [Parameter(Mandatory = $True,Position = 0)] + [LogSeverity]$Severity, + [Parameter(Mandatory = $True,Position = 1)] + [string]$Message, + [Parameter(Mandatory = $True,Position = 2)] + [string]$Component, + [Parameter(Mandatory = $False,Position = 3)] + [string]$File + + ) + + $line = "" + ` + "" + + if ($File) { + if (-not [System.IO.Directory]::Exists([System.IO.Path]::GetDirectoryName($File))) + { + throw [System.IO.DirectoryNotFoundException]"Path not found: $([System.IO.Path]::GetDirectoryName($File))" + } + } + + if ($File) { + $line | Out-File -Append -Encoding UTF8 -FilePath $File -Width 1024 + } + else { + $line + } + +} + + + + +<# +.SYNOPSIS + Sets the format used by the Write-Log* commands + +.DESCRIPTION + This command sets the log format used by the Write-Log* commands. The two formats supported are simple (human readable) format and CMtrace format used by configuration manager. + + The format is stored in the HPCMSL_LOG_FORMAT environment variable. To set the default format without using this command, update the variable by setting it to either 'Simple' or 'CMTrace' ahead of time. + + The default format is 'Simple'. + +.PARAMETER Format + Specifies the log format. The value must be one of the following values: + - Simple: human readable + - CMTrace: XML format used by the CMTrace tool + +.EXAMPLE + Set-HPCMSLLogFormat -Format CMTrace + +.LINK + [Write-LogInfo](https://developers.hp.com/hp-client-management/doc/Write-LogInfo) + +.LINK + [Write-LogWarning](https://developers.hp.com/hp-client-management/doc/Write-LogWarning) + +.LINK + [Write-LogError](https://developers.hp.com/hp-client-management/doc/Write-LogError) + +.LINK + [Get-HPCMSLLogFormat](https://developers.hp.com/hp-client-management/doc/Get-HPCMSLLogFormat) + +#> +function Set-HPCMSLLogFormat +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Set-HPCMSLLogFormat")] + param( + [Parameter(Mandatory = $True,Position = 0)] + [LogType]$Format + ) + $Env:HPCMSL_LOG_FORMAT = $Format + $Global:CmslLog = $Global:CmslLogType + + Write-Debug "Set log type to $($Global:CmslLog)" +} + +<# +.SYNOPSIS + Retrieves the format used by the log commands + +.DESCRIPTION + This command retrieves the configured log format used by the Write-Log* commands. This command returns the value of the HPCMSL_LOG_FORMAT environment variable or 'Simple' if the variable is not configured. + +.PARAMETER Format + Specifies the log format. The value must be one of the following values: + - Simple: human readable + - CMTrace: XML format used by the CMTrace tool + +.EXAMPLE + Get-HPCMSLLogFormat -Format CMTrace + +.LINK + [Write-LogInfo](https://developers.hp.com/hp-client-management/doc/Write-LogInfo) +.LINK + [Write-LogWarning](https://developers.hp.com/hp-client-management/doc/Write-LogWarning) +.LINK + [Write-LogError](https://developers.hp.com/hp-client-management/doc/Write-LogError) +.LINK + [Set-HPCMSLLogFormat](https://developers.hp.com/hp-client-management/doc/Set-HPCMSLLogFormat) + +#> +function Get-HPCMSLLogFormat +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPCMSLLogFormat")] + param() + + if (-not $Global::CmslLog) + { + $Global:CmslLog = Get-HPPrivateLogVar + } + + if (-not $Global:CmslLog) + { + $Global:CmslLog = 'Simple' + } + + Write-Verbose "Configured log type is $($Global:CmslLog)" + + switch ($Global:CmslLog) + { + 'CMTrace' { 'CMTrace' } + Default { 'Simple' } + } + +} + + +<# +.SYNOPSIS + Writes a 'warning' log entry + +.DESCRIPTION + This command writes a 'warning' log entry to default output or a specified file. + +.PARAMETER Message + Specifies the message to write + +.PARAMETER Component + Specifies a 'Component' tag for the message entry. Some log readers use this parameter to group messages. If not specified, the component tag is 'General'. + This parameter is ignored in 'Simple' mode due to backwards compatibility reasons. + +.PARAMETER File + Specifies the file to update with the new log entry. If not specified, the log entry is written to the pipeline. + +.EXAMPLE + Write-LogWarning -Component "Repository" -Message "Something bad may have happened" -File myfile.log + +.LINK + [Write-LogInfo](https://developers.hp.com/hp-client-management/doc/Write-LogInfo) +.LINK + [Write-LogError](https://developers.hp.com/hp-client-management/doc/Write-LogError) +.LINK + [Get-HPCMSLLogFormat](https://developers.hp.com/hp-client-management/doc/Get-HPCMSLLogFormat) +.LINK + [Set-HPCMSLLogFormat](https://developers.hp.com/hp-client-management/doc/Set-HPCMSLLogFormat) + +#> +function Write-LogWarning +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Write-LogWarning")] + param( + [Parameter(Mandatory = $True,Position = 0)] + [string]$Message, + [Parameter(Mandatory = $False,Position = 1)] + [string]$Component = "General", + [Parameter(Mandatory = $False,Position = 2)] + [string]$File + ) + if ($File) { + $file = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($file) + } + switch (Get-HPCMSLLogFormat) + { + CMTrace { + Write-HPPrivateCMTrace -Severity Warning -Message $Message -Component $Component -File $File + } + default { + Write-HPPrivateSimple -Severity Warning -Message $Message -Component $Component -File $file + } + } + + +} + + +<# +.SYNOPSIS + Writes an 'error' log entry + +.DESCRIPTION + This command writes an 'error' log entry to default output or a specified file. + +.PARAMETER Message + Specifies the message to write + +.PARAMETER Component + Specifies a 'Component' tag for the message entry. Some log readers use this parameter to group messages. If not specified, the component tag is 'General'. + This parameter is ignored in 'Simple' mode due to backwards compatibility reasons. + +.PARAMETER File + Specifies the file to update with the new log entry. If not specified, the log entry is written to pipeline. + +.EXAMPLE + Write-LogError -Component "Repository" -Message "Something bad happened" -File myfile.log + +.LINK + [Write-LogInfo](https://developers.hp.com/hp-client-management/doc/Write-LogInfo) +.LINK + [Write-LogWarning](https://developers.hp.com/hp-client-management/doc/Write-LogWarning) +.LINK + [Get-HPCMSLLogFormat](https://developers.hp.com/hp-client-management/doc/Get-HPCMSLLogFormat) +.LINK + [Set-HPCMSLLogFormat](https://developers.hp.com/hp-client-management/doc/Set-HPCMSLLogFormat) + +#> +function Write-LogError +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Write-LogError")] + param( + [Parameter(Mandatory = $True,Position = 0)] + [string]$Message, + [Parameter(Mandatory = $False,Position = 1)] + [string]$Component = "General", + [Parameter(Mandatory = $False,Position = 2)] + [string]$File + ) + + if ($File) { + $file = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($file) + } + switch (Get-HPCMSLLogFormat) + { + CMTrace { + Write-HPPrivateCMTrace -Severity Error -Message $Message -Component $Component -File $file + } + default { + Write-HPPrivateSimple -Severity Error -Message $Message -Component $Component -File $file + } + } + +} + +<# +.SYNOPSIS + Writes an 'informational' log entry + +.DESCRIPTION + This command writes an 'informational' log entry to default output or a specified file. + +.PARAMETER Message + Specifies the message to write + +.PARAMETER Component + Specifies a 'Component' tag for the message entry. Some log readers use this parameter to group messages. If not specified, the component tag is 'General'. + This parameter is ignored in 'Simple' mode due to backwards compatibility reasons. + +.PARAMETER File + Specifies the file to update with the new log entry. If not specified, the log entry is written to pipeline. + +.EXAMPLE + Write-LogInfo -Component "Repository" -Message "Nothing bad happened" -File myfile.log +#> +function Write-LogInfo +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Write-LogInfo")] + param( + [Parameter(Mandatory = $True,Position = 0)] + [string]$Message, + [Parameter(Mandatory = $False,Position = 1)] + [string]$Component = "General", + [Parameter(Mandatory = $False,Position = 2)] + [string]$File + ) + if ($File) { + $file = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($file) + } + + switch (Get-HPCMSLLogFormat) + { + CMTrace { + Write-HPPrivateCMTrace -Severity Information -Message $Message -Component $Component -File $file + } + default { + Write-HPPrivateSimple -Severity Information -Message $Message -Component $Component -File $file + } + } + +} + +# SIG # Begin signature block +# MIIoHgYJKoZIhvcNAQcCoIIoDzCCKAsCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAwQ+lh7DkBBUB4 +# u1fCdErgz8T1p2rSBQGP8GHNumypzaCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6jCCGeYCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIMM7PqHS +# tmKjaCSwKi4tDN2FLn4VAeEUIDH2pW3tFs3kMA0GCSqGSIb3DQEBAQUABIIBgFHz +# YzUPbXUWq/0Uq9DdNrS2bWpYRJ6fAKPsDRy1k3XRQlDD4I36Amc2jYb7458EW1IR +# saUu4+j78rPfnACSSLUp96TSnYz//XYX1szrqsutz3EFc3WDOSm0ivmBHinttGKf +# wdOfXAxSg9qKQ027NOh3426ThO+C1pzvKpxnc0P+LQIw7l7zAx19zvnIE8S+zJmq +# 7dKqMxj3QdcGXRXCW8g59wMkRe5G0DrX7qTs1SbiRRyEjB8+NqkVCjR7wNX3sWTH +# I3FXCfweHJ54dQJLBMtkXYy37glO9phVzcdw4SXssRrL2pWEXYWygb9IC/6bLr9/ +# D2EX1TAb1SrC65GAI1Koz8OLy/W34bhWrAHt179yDEiZbmqEn2rMYgibeCn4QTOa +# gOkukG88LicMFGheNZBuyl4B9iPzThymbnAyglVRQzb4gf23DYQyAnb89IoX45xM +# vub/RwaRJv8UCz4gRTgDPirsu1VtHNaXSBxQ9tU9vMdFAGCvo4kpQDDnXCZpm6GC +# F0Awghc8BgorBgEEAYI3AwMBMYIXLDCCFygGCSqGSIb3DQEHAqCCFxkwghcVAgED +# MQ8wDQYJYIZIAWUDBAIBBQAweAYLKoZIhvcNAQkQAQSgaQRnMGUCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCB32B+UIW6aD2WNJw5LcUa7yTGpw93HlkuY +# iNqOny3m7gIRAN1uupOXG4f7qBTQk1K2aXUYDzIwMjQwODI3MTY1NTUwWqCCEwkw +# ggbCMIIEqqADAgECAhAFRK/zlJ0IOaa/2z9f5WEWMA0GCSqGSIb3DQEBCwUAMGMx +# CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMy +# RGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcg +# Q0EwHhcNMjMwNzE0MDAwMDAwWhcNMzQxMDEzMjM1OTU5WjBIMQswCQYDVQQGEwJV +# UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xIDAeBgNVBAMTF0RpZ2lDZXJ0IFRp +# bWVzdGFtcCAyMDIzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo1NF +# hx2DjlusPlSzI+DPn9fl0uddoQ4J3C9Io5d6OyqcZ9xiFVjBqZMRp82qsmrdECmK +# HmJjadNYnDVxvzqX65RQjxwg6seaOy+WZuNp52n+W8PWKyAcwZeUtKVQgfLPywem +# MGjKg0La/H8JJJSkghraarrYO8pd3hkYhftF6g1hbJ3+cV7EBpo88MUueQ8bZlLj +# yNY+X9pD04T10Mf2SC1eRXWWdf7dEKEbg8G45lKVtUfXeCk5a+B4WZfjRCtK1ZXO +# 7wgX6oJkTf8j48qG7rSkIWRw69XloNpjsy7pBe6q9iT1HbybHLK3X9/w7nZ9MZll +# R1WdSiQvrCuXvp/k/XtzPjLuUjT71Lvr1KAsNJvj3m5kGQc3AZEPHLVRzapMZoOI +# aGK7vEEbeBlt5NkP4FhB+9ixLOFRr7StFQYU6mIIE9NpHnxkTZ0P387RXoyqq1AV +# ybPKvNfEO2hEo6U7Qv1zfe7dCv95NBB+plwKWEwAPoVpdceDZNZ1zY8SdlalJPrX +# xGshuugfNJgvOuprAbD3+yqG7HtSOKmYCaFxsmxxrz64b5bV4RAT/mFHCoz+8LbH +# 1cfebCTwv0KCyqBxPZySkwS0aXAnDU+3tTbRyV8IpHCj7ArxES5k4MsiK8rxKBMh +# SVF+BmbTO77665E42FEHypS34lCh8zrTioPLQHsCAwEAAaOCAYswggGHMA4GA1Ud +# DwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATAfBgNVHSMEGDAWgBS6 +# FtltTYUvcyl2mi91jGogj57IbzAdBgNVHQ4EFgQUpbbvE+fvzdBkodVWqWUxo97V +# 40kwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp +# Z2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNybDCB +# kAYIKwYBBQUHAQEEgYMwgYAwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj +# ZXJ0LmNvbTBYBggrBgEFBQcwAoZMaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t +# L0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNy +# dDANBgkqhkiG9w0BAQsFAAOCAgEAgRrW3qCptZgXvHCNT4o8aJzYJf/LLOTN6l0i +# kuyMIgKpuM+AqNnn48XtJoKKcS8Y3U623mzX4WCcK+3tPUiOuGu6fF29wmE3aEl3 +# o+uQqhLXJ4Xzjh6S2sJAOJ9dyKAuJXglnSoFeoQpmLZXeY/bJlYrsPOnvTcM2Jh2 +# T1a5UsK2nTipgedtQVyMadG5K8TGe8+c+njikxp2oml101DkRBK+IA2eqUTQ+OVJ +# dwhaIcW0z5iVGlS6ubzBaRm6zxbygzc0brBBJt3eWpdPM43UjXd9dUWhpVgmagNF +# 3tlQtVCMr1a9TMXhRsUo063nQwBw3syYnhmJA+rUkTfvTVLzyWAhxFZH7doRS4wy +# w4jmWOK22z75X7BC1o/jF5HRqsBV44a/rCcsQdCaM0qoNtS5cpZ+l3k4SF/Kwtw9 +# Mt911jZnWon49qfH5U81PAC9vpwqbHkB3NpE5jreODsHXjlY9HxzMVWggBHLFAx+ +# rrz+pOt5Zapo1iLKO+uagjVXKBbLafIymrLS2Dq4sUaGa7oX/cR3bBVsrquvczro +# SUa31X/MtjjA2Owc9bahuEMs305MfR5ocMB3CtQC4Fxguyj/OOVSWtasFyIjTvTs +# 0xf7UGv/B3cfcZdEQcm4RtNsMnxYL2dHZeUbc7aZ+WssBkbvQR7w8F/g29mtkIBE +# r4AQQYowggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqGSIb3DQEB +# CwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNV +# BAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQg +# Um9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMxCzAJBgNV +# BAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNl +# cnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggIi +# MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXHJQPE8pE3 +# qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMfUBMLJnOW +# bfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w1lbU5ygt +# 69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRktFLydkf3 +# YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYbqMFkdECn +# wHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUmcJgmf6Aa +# RyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP65x9abJTy +# UpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzKQtwYSH8U +# NM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo80VgvCON +# WPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjBJgj5FBAS +# A31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXcheMBK9Rp61 +# 03a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAd +# BgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF +# BwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln +# aWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJo +# dHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy +# bDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQEL +# BQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd4ksp+3CK +# Daopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiCqBa9qVbP +# FXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl/Yy8ZCaH +# bJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeCRK6ZJxur +# JB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYTgAnEtp/N +# h4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/a6fxZsNB +# zU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37xJV77Qpf +# MzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmLNriT1Oby +# F5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0YgkPCr2B +# 2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJRyvmfxqk +# hQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIFjTCCBHWg +# AwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +# EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +# cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcN +# MjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEVMBMG +# A1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +# HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqGSIb3DQEB +# AQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +# pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+ +# n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYykt +# zuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw +# 2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6Qu +# BX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC +# 5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK +# 3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3 +# IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEP +# lAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98 +# THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t9dmpsh3l +# GwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8w +# DgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0 +# cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0 +# cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MEUGA1Ud +# HwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz +# c3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAowCDAGBgRVHSAAMA0GCSqGSIb3DQEB +# DAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9mqyhhyzshV6pGrsi+IcaaVQi +# 7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxSA8hO0Cre+i1Wz/n096wwepqL +# sl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE1Od/6Fmo8L8vC6bp8jQ87PcDx4eo +# 0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSMb++hUD38dglohJ9vytsgjTVg +# HAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbObyMt9H5xaiNrIv8SuFQtJ37YOtnw +# toeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMYIDdjCCA3ICAQEwdzBjMQswCQYDVQQG +# EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0 +# IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAFRK/z +# lJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUAoIHRMBoGCSqGSIb3DQEJAzENBgsq +# hkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwODI3MTY1NTUwWjArBgsqhkiG +# 9w0BCRACDDEcMBowGDAWBBRm8CsywsLJD4JdzqqKycZPGZzPQDAvBgkqhkiG9w0B +# CQQxIgQgs1j86GrPiS6qrv9Vd/N+Fec+BPNHKO591o2bSsP25B0wNwYLKoZIhvcN +# AQkQAi8xKDAmMCQwIgQg0vbkbe10IszR1EBXaEE2b4KK2lWarjMWr00amtQMeCgw +# DQYJKoZIhvcNAQEBBQAEggIAiGJmLCDA8fqFyU9lG3rmMxCcxex/VrB74WFTRxZi +# hJLeQfB9ZiNAX2qAvX4SgEfYPlYyA9JZczXTuLH8N2PxujPW7ubqiOyEczI6r/jJ +# WkvGwvD2i1am4RRCGi6lbuzsvwZkJaUhmYdbI8Ibh7H6WmZ4ajSNKstzHHmSHBh8 +# Bsttv4rWpupqTodY3ixwphZk9wFEk+MV2oaYWG12fZM4Yxa2yyHDWJGAB23A2qOj +# mN4TowoupHmJgklzDU7gvlQSfg9oQAvg4OtR+N1pwQlNqH+BDUz1g3NK6v1MO7FT +# eH+dvh7j7PTA/aMg02lPztBdEYIgUlICyCIz60mbWLmpLZ9U7vdzOoQrEW2LPSHL +# LC3cc9ay9OmkuNOpC9IrZu8w/PugI7wLFn5PzONtVQO0tM2But0TJY0x2gLbP6Mo +# 0MdqCbrorVEkiBStq7k41qa/+9ZxmofXcxL764bbZGdWGxtH6UY2WR8gjtpMWmMA +# WW5c92Sl+krPKHo3F5Ifqvnt0Avx+ihL7zgicP7q39Q4II3eCBpZuqjalFckCfup +# r8/QEsxYFTYN2uwEA4xBB6OHe71j56gmcG1Ro5Hcg9Y7OyKIgIV44OUThFf0HbDu +# cwP42/IMhfPETIOqYbhPYXCZcUq/mEEJhT9NXOgw2eLSHlyucPgtpLIh+J6ObxfN +# aX4= +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Sinks/license.txt b/Bios-Update-HP-v2.0/module/HP.Sinks/license.txt new file mode 100644 index 0000000..b93ca37 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Sinks/license.txt @@ -0,0 +1,248 @@ +End-User License Agreement + +READ CAREFULLY BEFORE USING THIS SOFTWARE + +This End-User license Agreement ("EULA") is a legal agreement +between (a) you (either an individual or a single entity) and (b) HP Inc. +("HP") that governs your use of any Software Product, installed on or +made available by HP for use with your HP product ("HP Product"), that +is not otherwise subject to a separate license agreement between you +and HP or its suppliers. Other software may contain a EULA in its online +documentation. The term "Software Product" means computer software +and may include associated media, printed materials and "online" or +electronic documentation. + +An amendment or addendum to this EULA may accompany the HP +Product. + +RIGHTS IN THE SOFTWARE PRODUCT ARE OFFERED ONLY ON THE +CONDITION THAT YOU AGREE TO ALL TERMS AND CONDITIONS OF +THIS EULA. BY INSTALLING, COPYING, DOWNLOADING, OR +OTHERWISE USING THE SOFTWARE PRODUCT, YOU AGREE TO BE +BOUND BY THE TERMS OF THIS EULA. IF YOU DO NOT ACCEPT THESE +LICENSE TERMS, YOUR SOLE REMEDY IS TO RETURN THE ENTIRE +UNUSED PRODUCT (HARDWARE AND SOFTWARE) WITHIN 14 DAYS +FOR A REFUND SUBJECT TO THE REFUND POLICY OF YOUR PLACE OF +PURCHASE. + +1. GRANT OF LICENSE. HP grants you the following rights provided +you comply with all terms and conditions of this EULA: + +a. Use. You may use the Software Product on a single computer ("Your +Computer"). If the Software Product is provided to you via the internet +and was originally licensed for use on more than one computer, you +may install and use the Software Product only on those computers. You +may not separate component parts of the Software Product for use on +more than one computer. You do not have the right to distribute the +Software Product. You may load the Software Product into Your +Computer's temporary memory (RAM) for purposes of using the +Software Product. + +b. Storage. You may copy the Software Product into the local memory +or storage device of the HP Product. + +c. Copying. You may make archival or back-up copies of the Software +Product, provided the copy contains all of the original Software +Product's proprietary notices and that it is used only for back-up +purposes. + +d. Reservation of Rights. HP and its suppliers reserve all rights not +expressly granted to you in this EULA. + +e. Freeware. Notwithstanding the terms and conditions of this EULA, all +or any portion of the Software Product which constitutes non- +proprietary HP software or software provided under public license by +third parties ("Freeware"), is licensed to you subject to the terms and +conditions of the software license agreement accompanying such +Freeware whether in the form of a discrete agreement, shrink wrap +license or electronic license terms accepted at time of download. Use of +the Freeware by you shall be governed entirely by the terms and +conditions of such license. + +f. Recovery Solution. Any software recovery solution provided with/for +your HP Product, whether in the form of a hard disk drive-based +solution, an external media-based recovery solution (e.g. floppy disk, +CD or DVD) or an equivalent solution delivered in any other form, may +only be used for restoring the hard disk of the HP Product with/for +which the recovery solution was originally purchased. The use of any +Microsoft operating system software contained in such recovery +solution shall be governed by the Microsoft License Agreement. + +2. UPGRADES. To use a Software Product identified as an upgrade, +you must first be licensed for the original Software Product identified +by HP as eligible for the upgrade. After upgrading, you may no longer +use the original Software Product that formed the basis for your +upgrade eligibility. By using the Software Product, you also agree that +HP may automatically access your HP Product when connected to the +internet to check the version or status of certain Software Products and +may automatically download and install upgrades or updates to such +Software Products on to your HP Product to provide new versions or +updates required to maintain the functionality, performance, or security +of the HP Software and your HP Product and facilitate the provision of +support or other services provided to you. In certain cases, and +depending on the type of upgrade or update, notifications will be +provided to you (via pop-up or other means), which may require you to +initiate the upgrade or update. + +3. ADDITIONAL SOFTWARE. This EULA applies to updates or +supplements to the original Software Product provided by HP unless +HP provides other terms along with the update or supplement. In case +of a conflict between such terms, the other terms will prevail. + +4. TRANSFER. + +a. Third Party. The initial user of the Software Product may make a +one-time transfer of the Software Product to another end user. Any +transfer must include all component parts, media, printed materials, +this EULA, and if applicable, the Certificate of Authenticity. The transfer +may not be an indirect transfer, such as a consignment. Prior to the +transfer, the end user receiving the transferred product must agree to +all the EULA terms. Upon transfer of the Software Product, your license +is automatically terminated. + +b. Restrictions. You may not rent, lease or lend the Software Product or +use the Software Product for commercial timesharing or bureau use. +You may not sublicense, assign or transfer the license or Software +Product except as expressly provided in this EULA. + +5. PROPRIETARY RIGHTS. All intellectual property rights in the +Software Product and user documentation are owned by HP or its +suppliers and are protected by law, including but not limited to United +States copyright, trade secret, and trademark law, as well as other +applicable laws and international treaty provisions. You shall not +remove any product identification, copyright notices or proprietary +restrictions from the Software Product. + +6. LIMITATION ON REVERSE ENGINEERING. You may not reverse +engineer, decompile, or disassemble the Software Product, except and +only to the extent that the right to do so is mandated under applicable +law notwithstanding this limitation or it is expressly provided for in this +EULA. + +7. TERM. This EULA is effective unless terminated or rejected. This +EULA will also terminate upon conditions set forth elsewhere in this +EULA or if you fail to comply with any term or condition of this EULA. + +8. CONSENT TO COLLECTION/USE OF DATA. + +a. HP will use cookies and other web technology tools to collect +anonymous technical information related to HP Software and your HP +Product. This data will be used to provide the upgrades and related +support or other services described in Section 2. HP will also collect +personal information including your Internet Protocol address or other +unique identifier information associated with your HP Product and data +provided by you on registration of your HP Product. As well as +providing the upgrades and related support or other services, this data +will be used for sending marketing communications to you (in each +case with your express consent where required by applicable law). +To the extent permitted by applicable law, by accepting these terms +and conditions you consent to the collection and use of anonymous +and personal data by HP, its subsidiaries, and affiliates as described in +this EULA and as further described in HP�s privacy policy +www.hp.com/go/privacy + +b. Collection/Use by Third Parties. Certain software programs included +in your HP Product are provided and separately licensed to you by third +party providers (�Third Party Software�). Third Party Software may be +installed and operational on your HP Product even if you choose not to +activate/purchase such software. Third Party Software may collect and +transmit technical information about your system (i.e., IP address, +unique device identifier, software version installed, etc.) and other +system data. This information is used by the third party to identify +technical system attributes and ensure that the most current version of +the software has been installed on your system. If you do not want the +Third Party Software to collect this technical information or +automatically send you version updates, you should uninstall the +software prior to connecting to the Internet. + +9. DISCLAIMER OF WARRANTIES. TO THE MAXIMUM EXTENT +PERMITTED BY APPLICABLE LAW, HP AND ITS SUPPLIERS PROVIDE THE +SOFTWARE PRODUCT �AS IS� AND WITH ALL FAULTS, AND HEREBY +DISCLAIM ALL OTHER WARRANTIES, GUARANTEES, AND CONDITIONS, +EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT +LIMITED TO, WARRANTIES OF TITLE AND NON-INFRINGEMENT, ANY +IMPLIED WARRANTIES, DUTIES, GUARANTEES, OR CONDITIONS OF +MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A +PARTICULAR PURPOSE, AND OF LACK OF VIRUSES ALL WITH REGARD +TO THE SOFTWARE PRODUCT. Some states/jurisdictions do not allow +exclusion of implied warranties or limitations on the duration of implied +warranties, so the above disclaimer may not apply to you in its entirety. +IN AUSTRALIA AND NEW ZEALAND, THE SOFTWARE COMES WITH +GUARANTEES THAT CANNOT BE EXCLUDED UNDER AUSTRALIAN AND +NEW ZEALAND CONSUMER LAWS. AUSTRALIAN CONSUMERS ARE +ENTITLED TO A REPLACEMENT OR A REFUND FOR A MAJOR FAILURE +AND COMPENSATION FOR OTHER REASONABLY FORESEEABLE LOSS +OR DAMAGE. AUSTRALIAN CONSUMERS ARE ALSO ENTITLED TO +HAVE THE SOFTWARE REPAIRED OR REPLACED IF IT FAILS TO BE OF +ACCEPTABLE QUALITY AND THE FAILURE DOES NOT AMOUNT TO A +MAJOR FAILURE. NEW ZEALAND CONSUMERS WHO ARE PURCHASING +GOODS FOR PERSONAL, DOMESTIC OR HOUSEHOLD USE OR +CONSUMPTION AND NOT FOR THE PURPOSE OF A BUSINESS (�NEW +ZEALAND CONSUMERS�) ARE ENTITLED TO REPAIR, REPLACEMENT OR +REFUND FOR A FAILURE AND COMPENSATION FOR OTHER +REASONABLY FORESEEABLE LOSS OR DAMAGE. + +10. LIMITATION OF LIABILITY. Subject to local law, notwithstanding +any damages that you might incur, the entire liability of HP and any of +its suppliers under any provision of this EULA and your exclusive +remedy for all of the foregoing shall be limited to the greater of the +amount actually paid by you separately for the Software Product or U.S. +$5.00. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN +NO EVENT SHALL HP OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, +INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES +WHATSOEVER, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR +LOSS OF PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR +BUSINESS INTERRUPTION, FOR PERSONAL INJURY, FOR LOSS OF +PRIVACY ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF +OR INABILITY TO USE THE SOFTWARE PRODUCT, OR OTHERWISE IN +CONNECTION WITH ANY PROVISION OF THIS EULA, EVEN IF HP OR +ANY SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES AND EVEN IF THE REMEDY FAILS OF ITS ESSENTIAL +PURPOSE. Some states/jurisdictions do not allow the exclusion or +limitation of incidental or consequential damages, so the above +limitation or exclusion may not apply to you. + +11. U.S. GOVERNMENT CUSTOMERS. Consistent with FAR 12.211 +and 12.212, Commercial Computer Software, Computer Software +Documentation, and Technical Data for Commercial Items are licensed +to the U.S. Government under HP's standard commercial license. + +12. COMPLIANCE WITH EXPORT LAWS. You shall comply with all +laws and regulations of the United States and other countries ("Export +Laws") to assure that the Software Product is not (1) exported, directly +or indirectly, in violation of Export Laws, or (2) used for any purpose +prohibited by Export Laws, including, without limitation, nuclear, +chemical, or biological weapons proliferation. + +13. CAPACITY AND AUTHORITY TO CONTRACT. You represent that +you are of the legal age of majority in your state of residence and, if +applicable, you are duly authorized by your employer to enter into this +contract. + +14. APPLICABLE LAW. This EULA is governed by the laws of the +country in which the equipment was purchased. + +15. ENTIRE AGREEMENT. This EULA (including any addendum or +amendment to this EULA which is included with the HP Product) is the +entire agreement between you and HP relating to the Software Product +and it supersedes all prior or contemporaneous oral or written +communications, proposals and representations with respect to the +Software Product or any other subject matter covered by this EULA. To +the extent the terms of any HP policies or programs for support +services conflict with the terms of this EULA, the terms of this EULA +shall control. + +�Copyright 2018-2024 HP Development Company, L.P.. + +The information contained herein is subject to change without notice. +All other product names mentioned herein may be trademarks of their +respective companies. To the extent permitted by applicable law, the +only warranties for HP products and services are set forth in the express +warranty statements accompanying such products and services. +Nothing herein should be construed as constituting an additional +warranty. To the extent permitted by applicable law, HP shall not be +liable for technical or editorial errors or omissions contained herein. + +First Edition: August 2015 +817678-001 + diff --git a/Bios-Update-HP-v2.0/module/HP.SmartExperiences/HP.SmartExperiences.psd1 b/Bios-Update-HP-v2.0/module/HP.SmartExperiences/HP.SmartExperiences.psd1 new file mode 100644 index 0000000..54403a6 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.SmartExperiences/HP.SmartExperiences.psd1 @@ -0,0 +1,256 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + +@{ + + RootModule = 'HP.SmartExperiences.psm1' + #FullModuleVersion = '1.7.2.774' + ModuleVersion = '1.7.2' + GUID = '04c79fde-7cc7-49e4-b11b-d2892e11f6d1' + Author = 'HP Development Company, L.P.' + CompanyName = 'HP Inc' + Copyright = '(C) Copyright 2018-2024 HP Development Company, L.P.' + Description = 'SmartExperiences module' + PowerShellVersion = '5.1' + + FunctionsToExport = + 'Set-HPeAISettingValue', + 'Get-HPeAISettingValue', + 'Test-HPSmartExperiencesIsSupported', + 'Set-HPeAIManaged', + 'Get-HPeAIManaged' + + PrivateData = @{ + PSData = @{ + LicenseUri = 'https://developers.hp.com/node/11493' + RequireLicenseAcceptance = $true + } # End of PSData hashtable + } # End of PrivateData hashtable + + +} +# SIG # Begin signature block +# MIIoHQYJKoZIhvcNAQcCoIIoDjCCKAoCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBVLVYQIi8O7s3j +# dkuZREWShmuvX/0YW/TYtwjK10eZ9KCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6TCCGeUCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEINJ9fM/T +# yefGDd60CcLRwIA62SonsxqYTW1+DeDChXanMA0GCSqGSIb3DQEBAQUABIIBgHGY +# xb1oUSq+hq+/pwmbmTRJHpsq7Vm6jhLTOOnudXAytEOnENEGHwK/Tu4n4r6zdYZm +# yQ0xZrKEHml263e/26HVzN56834EvlbpP3/7CgneenK9ZB5otmLk3Hugykyyw64/ +# U7Vd5+9QTQDkrUZC+8/yYYwvqpiK6vYXWLYvYE7Wdh7lIG7lsXF+bgs59DV5HVf3 +# d9RV5TZ/Cv+AJm1rL5pJuxvJEzi7iv5UgJlqWKtZEcS7wF3/TeavjiSyD53Mn6UH +# jpmhqojAwwLe75P+DSt7rrDnWnBVrW6oPQwx/bM2lcX8Rq7MxqWxyObtry9hnnng +# ifZKSWsh1WoZ0woD0bcla32xYH5zbgf+cAcR+Z8SH6Q0fLy8exXrslG07U0McoI3 +# NN90uZa9IttXZg6GZaiShWsDQg+BZ3jaHVuwh8550HvtYMKikkEgPfM+xVhQdarR +# tBedtz4IUeHJDIPpUAs1CBGEY6df/AZIkib5NICC1CNf78mweCrp1rXc2SIOzaGC +# Fz8wghc7BgorBgEEAYI3AwMBMYIXKzCCFycGCSqGSIb3DQEHAqCCFxgwghcUAgED +# MQ8wDQYJYIZIAWUDBAIBBQAwdwYLKoZIhvcNAQkQAQSgaARmMGQCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCAzFkIi+6OJ8Q/BKnuoL8joIUrB3YlreLLk +# sLsPAD/l9gIQCcz82RDC35a3/c7ks0DapRgPMjAyNDA4MjcxNjU1NTBaoIITCTCC +# BsIwggSqoAMCAQICEAVEr/OUnQg5pr/bP1/lYRYwDQYJKoZIhvcNAQELBQAwYzEL +# MAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJE +# aWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBD +# QTAeFw0yMzA3MTQwMDAwMDBaFw0zNDEwMTMyMzU5NTlaMEgxCzAJBgNVBAYTAlVT +# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEgMB4GA1UEAxMXRGlnaUNlcnQgVGlt +# ZXN0YW1wIDIwMjMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjU0WH +# HYOOW6w+VLMj4M+f1+XS512hDgncL0ijl3o7Kpxn3GIVWMGpkxGnzaqyat0QKYoe +# YmNp01icNXG/OpfrlFCPHCDqx5o7L5Zm42nnaf5bw9YrIBzBl5S0pVCB8s/LB6Yw +# aMqDQtr8fwkklKSCGtpqutg7yl3eGRiF+0XqDWFsnf5xXsQGmjzwxS55DxtmUuPI +# 1j5f2kPThPXQx/ZILV5FdZZ1/t0QoRuDwbjmUpW1R9d4KTlr4HhZl+NEK0rVlc7v +# CBfqgmRN/yPjyobutKQhZHDr1eWg2mOzLukF7qr2JPUdvJscsrdf3/Dudn0xmWVH +# VZ1KJC+sK5e+n+T9e3M+Mu5SNPvUu+vUoCw0m+PebmQZBzcBkQ8ctVHNqkxmg4ho +# Yru8QRt4GW3k2Q/gWEH72LEs4VGvtK0VBhTqYggT02kefGRNnQ/fztFejKqrUBXJ +# s8q818Q7aESjpTtC/XN97t0K/3k0EH6mXApYTAA+hWl1x4Nk1nXNjxJ2VqUk+tfE +# ayG66B80mC866msBsPf7Kobse1I4qZgJoXGybHGvPrhvltXhEBP+YUcKjP7wtsfV +# x95sJPC/QoLKoHE9nJKTBLRpcCcNT7e1NtHJXwikcKPsCvERLmTgyyIryvEoEyFJ +# UX4GZtM7vvrrkTjYUQfKlLfiUKHzOtOKg8tAewIDAQABo4IBizCCAYcwDgYDVR0P +# AQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# IAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQYMBaAFLoW +# 2W1NhS9zKXaaL3WMaiCPnshvMB0GA1UdDgQWBBSltu8T5+/N0GSh1VapZTGj3tXj +# STBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln +# aUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3JsMIGQ +# BggrBgEFBQcBAQSBgzCBgDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl +# cnQuY29tMFgGCCsGAQUFBzAChkxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v +# RGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3J0 +# MA0GCSqGSIb3DQEBCwUAA4ICAQCBGtbeoKm1mBe8cI1PijxonNgl/8ss5M3qXSKS +# 7IwiAqm4z4Co2efjxe0mgopxLxjdTrbebNfhYJwr7e09SI64a7p8Xb3CYTdoSXej +# 65CqEtcnhfOOHpLawkA4n13IoC4leCWdKgV6hCmYtld5j9smViuw86e9NwzYmHZP +# VrlSwradOKmB521BXIxp0bkrxMZ7z5z6eOKTGnaiaXXTUOREEr4gDZ6pRND45Ul3 +# CFohxbTPmJUaVLq5vMFpGbrPFvKDNzRusEEm3d5al08zjdSNd311RaGlWCZqA0Xe +# 2VC1UIyvVr1MxeFGxSjTredDAHDezJieGYkD6tSRN+9NUvPJYCHEVkft2hFLjDLD +# iOZY4rbbPvlfsELWj+MXkdGqwFXjhr+sJyxB0JozSqg21Llyln6XeThIX8rC3D0y +# 33XWNmdaifj2p8flTzU8AL2+nCpseQHc2kTmOt44OwdeOVj0fHMxVaCAEcsUDH6u +# vP6k63llqmjWIso765qCNVcoFstp8jKastLYOrixRoZruhf9xHdsFWyuq69zOuhJ +# RrfVf8y2OMDY7Bz1tqG4QyzfTkx9HmhwwHcK1ALgXGC7KP845VJa1qwXIiNO9OzT +# F/tQa/8Hdx9xl0RBybhG02wyfFgvZ0dl5Rtztpn5aywGRu9BHvDwX+Db2a2QgESv +# gBBBijCCBq4wggSWoAMCAQICEAc2N7ckVHzYR6z9KGYqXlswDQYJKoZIhvcNAQEL +# BQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UE +# CxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBS +# b290IEc0MB4XDTIyMDMyMzAwMDAwMFoXDTM3MDMyMjIzNTk1OVowYzELMAkGA1UE +# BhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2Vy +# dCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMaGNQZJs8E9cklRVcclA8TykTep +# l1Gh1tKD0Z5Mom2gsMyD+Vr2EaFEFUJfpIjzaPp985yJC3+dH54PMx9QEwsmc5Zt +# +FeoAn39Q7SE2hHxc7Gz7iuAhIoiGN/r2j3EF3+rGSs+QtxnjupRPfDWVtTnKC3r +# 07G1decfBmWNlCnT2exp39mQh0YAe9tEQYncfGpXevA3eZ9drMvohGS0UvJ2R/dh +# gxndX7RUCyFobjchu0CsX7LeSn3O9TkSZ+8OpWNs5KbFHc02DVzV5huowWR0QKfA +# csW6Th+xtVhNef7Xj3OTrCw54qVI1vCwMROpVymWJy71h6aPTnYVVSZwmCZ/oBpH +# IEPjQ2OAe3VuJyWQmDo4EbP29p7mO1vsgd4iFNmCKseSv6De4z6ic/rnH1pslPJS +# lRErWHRAKKtzQ87fSqEcazjFKfPKqpZzQmiftkaznTqj1QPgv/CiPMpC3BhIfxQ0 +# z9JMq++bPf4OuGQq+nUoJEHtQr8FnGZJUlD0UfM2SU2LINIsVzV5K6jzRWC8I41Y +# 99xh3pP+OcD5sjClTNfpmEpYPtMDiP6zj9NeS3YSUZPJjAw7W4oiqMEmCPkUEBID +# fV8ju2TjY+Cm4T72wnSyPx4JduyrXUZ14mCjWAkBKAAOhFTuzuldyF4wEr1GnrXT +# drnSDmuZDNIztM2xAgMBAAGjggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBS6FtltTYUvcyl2mi91jGogj57IbzAfBgNVHSMEGDAWgBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUH +# AwgwdwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp +# Y2VydC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv +# bS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0 +# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3Js +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsF +# AAOCAgEAfVmOwJO2b5ipRCIBfmbW2CFC4bAYLhBNE88wU86/GPvHUF3iSyn7cIoN +# qilp/GnBzx0H6T5gyNgL5Vxb122H+oQgJTQxZ822EpZvxFBMYh0MCIKoFr2pVs8V +# c40BIiXOlWk/R3f7cnQU1/+rT4osequFzUNf7WC2qk+RZp4snuCKrOX9jLxkJods +# kr2dfNBwCnzvqLx1T7pa96kQsl3p/yhUifDVinF2ZdrM8HKjI/rAJ4JErpknG6sk +# HibBt94q6/aesXmZgaNWhqsKRcnfxI2g55j7+6adcq/Ex8HBanHZxhOACcS2n82H +# hyS7T6NJuXdmkfFynOlLAlKnN36TU6w7HQhJD5TNOXrd/yVjmScsPT9rp/Fmw0HN +# T7ZAmyEhQNC3EyTN3B14OuSereU0cZLXJmvkOHOrpgFPvT87eK1MrfvElXvtCl8z +# OYdBeHo46Zzh3SP9HSjTx/no8Zhf+yvYfvJGnXUsHicsJttvFXseGYs2uJPU5vIX +# mVnKcPA3v5gA3yAWTyf7YGcWoWa63VXAOimGsJigK+2VQbc61RWYMbRiCQ8KvYHZ +# E/6/pNHzV9m8BPqC3jLfBInwAM1dwvnQI38AC+R2AibZ8GV2QqYphwlHK+Z/GqSF +# D/yYlvZVVCsfgPrA8g4r5db7qS9EFUrnEw4d2zc4GqEr9u3WfPwwggWNMIIEdaAD +# AgECAhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYT +# AlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2Vy +# dC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0y +# MjA4MDEwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYD +# VQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAf +# BgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEB +# BQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4Smn +# PVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6f +# qVcWWVVyr2iTcMKyunWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O +# 7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZ +# Vu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4F +# fYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLm +# qaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMre +# Sx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/ch +# srIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+U +# DCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xM +# dT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUb +# AgMBAAGjggE6MIIBNjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAO +# BgNVHQ8BAf8EBAMCAYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRw +# Oi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRz +# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0f +# BD4wPDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNz +# dXJlZElEUm9vdENBLmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEM +# BQADggEBAHCgv0NcVec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLt +# pIh3bb0aFPQTSnovLbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouy +# XtTP0UNEm0Mh65ZyoUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jS +# TEAZNUZqaVSwuKFWjuyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAc +# AgPLILCsWKAOQGPFmCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2 +# h5b9W9FcrBjDTZ9ztwGpn1eqXijiuZQxggN2MIIDcgIBATB3MGMxCzAJBgNVBAYT +# AlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQg +# VHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OU +# nQg5pr/bP1/lYRYwDQYJYIZIAWUDBAIBBQCggdEwGgYJKoZIhvcNAQkDMQ0GCyqG +# SIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNDA4MjcxNjU1NTBaMCsGCyqGSIb3 +# DQEJEAIMMRwwGjAYMBYEFGbwKzLCwskPgl3OqorJxk8ZnM9AMC8GCSqGSIb3DQEJ +# BDEiBCCrbebXIfce6E/YIhG69DytgGJhtsfu9vGQO6X02edCJDA3BgsqhkiG9w0B +# CRACLzEoMCYwJDAiBCDS9uRt7XQizNHUQFdoQTZvgoraVZquMxavTRqa1Ax4KDAN +# BgkqhkiG9w0BAQEFAASCAgA3/yWgUwNYmIdAII2lkwGZfpJ/W1v5ryGeSyxvAZEa +# jVL+QyMvE1D7MAhajecs6/tY2ew3bBf7PZddiXjU4hgRk2bu/TV84D5MMkLyOWbB +# zgka8EXgO7+LkpKocS7S8h06lzrEIpxW3LpQejP3y27as+eic145nbhZzljcUX2L +# mhGb0rWv+WvO7MtKKkrhW5VmSuorK5OOH3iijQOG8ThSEg565oiprkGgDX2jdFO7 +# NKfSuIVC3OzvKwesiiGb59NfiOMW7/okO7u4Bz2Zu5YIBYFskMvY8TX6YqXbhdDl +# QTZV0gVbOnoSzqjVb/mL1EhhwX9GqrAAYyYjs23wIoCwywZqTYdxrrIMDexE8bo9 +# Tp48rrn0lTWAJiq/f2Yb/xx8bMrQXAL6QgQ0EuudKrbEQXCpXRynVwwk3wes6mAM +# KByTErE40hWn4/4YNbRoxl6mhV49JTQXOXQ7mMmKmAx6pzgGqpC3l06WS3G9FdL2 +# LSAHAS0++05BMq9jROBElZCq1ec5dWYGTuGQJCNSKej35Fq4lT2hzziDrD2GKlw5 +# eG5FP/TjiqIs1Lntz3nwTIgse33Ze0oHXV4WEvxK9g99Db+q3EUB/57xKZT70Jck +# t4F7jB6Q5bPaAwqluJSKGGlrZB5rvTuVEJsLcv/vmeCRIHTYZMQV2J0GPJ7cNHR9 +# JA== +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.SmartExperiences/HP.SmartExperiences.psm1 b/Bios-Update-HP-v2.0/module/HP.SmartExperiences/HP.SmartExperiences.psm1 new file mode 100644 index 0000000..8307d6f --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.SmartExperiences/HP.SmartExperiences.psm1 @@ -0,0 +1,617 @@ +Set-StrictMode -Version 3.0 +#requires -Modules "HP.Private","HP.ClientManagement" + +<# +.SYNOPSIS + Sets Smart Experiences as managed or unmanaged + +.DESCRIPTION + If Smart Experiences\Policy is not found on the registry, this command sets the 'Privacy Alert' and 'Auto Screen Dimming' features to the default values. + + The default values for both 'Privacy Alert' and 'Auto Screen Dimming' are: + - AllowEdit: $true + - Default: Off + - Enabled: $false + + Use the Set-HPeAISettingValue command to configure the values of the eAI features. + +.PARAMETER Enabled + If set to $true, this command will configure eAi as managed. If set to $false, this command will configure eAI as unmanaged. + +.EXAMPLE + Set-HPeAIManaged -Enabled $true + +.NOTES + Admin privilege is required. + +.LINK + [Get-HPeAISettingValue](https://developers.hp.com/hp-client-management/doc/Get-HPeAISettingValue) + +.LINK + [Set-HPeAISettingValue](https://developers.hp.com/hp-client-management/doc/Set-HPeAISettingValue) +#> +function Set-HPeAIManaged { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Set-HPeAIManaged")] + param( + [Parameter(Mandatory = $true,Position = 0,ValueFromPipeline = $true)] + [bool]$Enabled + ) + $eAIRegPath = 'HKLM:\Software\Policies\HP\SmartExperiences' + + if ((Test-HPSmartExperiencesIsSupported) -eq $false) { + throw [System.NotSupportedException]"HP Smart Experiences is currently not supported on this platform." + } + + if (-not (Test-IsElevatedAdmin)) { + throw [System.Security.AccessControl.PrivilegeNotHeldException]"elevated administrator" + } + + $reg = Get-Item -Path $eAIRegPath -ErrorAction SilentlyContinue + if ($null -eq $reg) { + Write-Verbose "Creating registry entry $eAIRegPath" + New-Item -Path $eAIRegPath -Force | Out-Null + } + + if ($true -eq $Enabled) { + $managed = 1 + + # Check if eAI attributes exist, if not, set the defaults + Write-Verbose "Reading registry path $eAIRegPath\Policy" + $reg = Get-ItemProperty -Path $eAIRegPath -ErrorAction SilentlyContinue -Name Policy + if ($reg) { + Write-Verbose "$eAIRegPath\Policy attributes found" + try { + Write-Verbose "Data read: $($reg.Policy)" + $current = $reg.Policy | ConvertFrom-Json + } + catch { + throw [System.FormatException]"$($_.Exception.Message): Please ensure Policy property contains a valid JSON." + } + } + else { + $current = [ordered]@{ + attentionDim = [ordered]@{ + allowEdit = $true + default = 0 + isEnabled = $false + } + shoulderSurf = [ordered]@{ + allowEdit = $true + default = 0 + isEnabled = $false + } + } + + $value = $current | ConvertTo-Json -Compress + Write-Verbose "Setting $eAIRegPath\Policy to defaults $value" + + if ($reg) { + Set-ItemProperty -Path $eAIRegPath -Value $value -Name Policy -Force | Out-Null + } + else { + New-ItemProperty -Path $eAIRegPath -Value $value -Name Policy -Force | Out-Null + } + } + } + else { + $managed = 0 + } + + Write-Verbose "Setting $eAIRegPath\Managed to $managed" + $reg = Get-ItemProperty -Path $eAIRegPath -ErrorAction SilentlyContinue -Name Managed + if ($reg) { + Set-ItemProperty -Path $eAIRegPath -Value $managed -Name Managed -Force | Out-Null + } + else { + New-ItemProperty -Path $eAIRegPath -Value $managed -Name Managed -Force | Out-Null + } +} + +<# +.SYNOPSIS + Checks if eAI is managed on the current device +.DESCRIPTION + If eAI is managed, this command returns true. Otherwise, this command returns false. If 'SmartExperiences' entry is not found in the registry, false is returned by default. + +.EXAMPLE + Get-HPeAIManaged + +.NOTES + Admin privilege is required. + +.LINK + [Set-HPeAIManaged](https://developers.hp.com/hp-client-management/doc/Set-HPeAIManaged) +#> +function Get-HPeAIManaged { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPeAIManaged")] + param() + $eAIRegPath = 'HKLM:\Software\Policies\HP\SmartExperiences' + + if ((Test-HPSmartExperiencesIsSupported) -eq $false) { + throw [System.NotSupportedException]"HP Smart Experiences is currently not supported on this platform." + } + + if (-not (Test-IsElevatedAdmin)) { + throw [System.Security.AccessControl.PrivilegeNotHeldException]"elevated administrator" + } + + Write-Verbose "Reading $eAIRegPath\Managed" + $reg = Get-ItemProperty -Path $eAIRegPath -ErrorAction SilentlyContinue -Name Managed + + if ($reg) { + return ($reg.Managed -eq 1) + } + + return $false +} + +<# +.SYNOPSIS + Configures HP eAI features on the current device + +.DESCRIPTION + Configures HP eAI features on the current device. At this time, only the 'Privacy Alert' feature and the 'Auto Screen Dimming' feature are available to be configured. + +.PARAMETER Name + Specifies the eAI feature name to configure. The value must be one of the following values: + - Privacy Alert + - Auto Screen Dimming + +.PARAMETER Enabled + If set to $true, this command will enable the feature specified in the Name parameter. If set to $false, this command will disable the feature specified in the -Name parameter. + +.PARAMETER AllowEdit + If set to $true, editing is allowed for the feature specified in the Name parameter. If set to $false, editing is not allowed for the feature specified in the -Name parameter. + +.PARAMETER Default + Sets default value of the feature specified in the -Name parameter. The value must be one of the following values: + - On + - Off + +.EXAMPLE + Set-HPeAISettingValue -Name 'Privacy Alert' -Enabled $true -Default 'On' -AllowEdit $false + +.EXAMPLE + Set-HPeAISettingValue -Name 'Privacy Alert' -Enabled $true + +.EXAMPLE + Set-HPeAISettingValue -Name 'Auto Screen Dimming' -Default 'On' + +.EXAMPLE + Set-HPeAISettingValue -Name 'Auto Screen Dimming' -AllowEdit $false + +.NOTES + Admin privilege is required. + +.LINK + [Set-HPeAIManaged](https://developers.hp.com/hp-client-management/doc/Set-HPeAIManaged) + +.LINK + [Get-HPeAISettingValue](https://developers.hp.com/hp-client-management/doc/Get-HPeAISettingValue) +#> +function Set-HPeAISettingValue { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Set-HPeAISettingValue")] + param( + [Parameter(Mandatory = $true,Position = 0,ParameterSetName = 'Enabled')] + [Parameter(Mandatory = $true,Position = 0,ParameterSetName = 'AllowEdit')] + [Parameter(Mandatory = $true,Position = 0,ParameterSetName = 'Default')] + [ValidateSet('Privacy Alert','Auto Screen Dimming')] + [string]$Name, + + [Parameter(Mandatory = $true,Position = 1,ParameterSetName = 'Enabled')] + [bool]$Enabled, + + [Parameter(Mandatory = $false,Position = 2,ParameterSetName = 'Enabled')] + [Parameter(Mandatory = $true,Position = 1,ParameterSetName = 'AllowEdit')] + [bool]$AllowEdit, + + [Parameter(Mandatory = $false,Position = 3,ParameterSetName = 'Enabled')] + [Parameter(Mandatory = $false,Position = 2,ParameterSetName = 'AllowEdit')] + [Parameter(Mandatory = $true,Position = 1,ParameterSetName = 'Default')] + [ValidateSet('On','Off')] + [string]$Default + ) + $eAIFeatures = @{ + 'Privacy Alert' = 'shoulderSurf' + 'Auto Screen Dimming' = 'attentionDim' + } + $eAIRegPath = 'HKLM:\Software\Policies\HP\SmartExperiences' + + if ((Test-HPSmartExperiencesIsSupported) -eq $false) { + throw [System.NotSupportedException]"HP Smart Experiences is currently not supported on this platform." + } + + if (-not (Test-IsElevatedAdmin)) { + throw [System.Security.AccessControl.PrivilegeNotHeldException]"elevated administrator" + } + + Write-Verbose "Reading registry path $eAIRegPath\Policy" + $reg = Get-ItemProperty -Path $eAIRegPath -ErrorAction SilentlyContinue -Name Policy + if ($reg) { + try { + Write-Verbose "Data read: $($reg.Policy)" + $current = $reg.Policy | ConvertFrom-Json + } + catch { + throw [System.FormatException]"$($_.Exception.Message): Please ensure Policy property contains a valid JSON." + } + } + else { + $current = [ordered]@{ + attentionDim = [ordered]@{ + allowEdit = $true + default = 0 + isEnabled = $false + } + shoulderSurf = [ordered]@{ + allowEdit = $true + default = 0 + isEnabled = $false + } + } + Write-Verbose "Creating registry entry with the default values to $eAIRegPath" + New-Item -Path $eAIRegPath -Force | Out-Null + } + + Write-Verbose "$($eAIFeatures[$Name]) selected" + $config = $current.$($eAIFeatures[$Name]) + if ($PSBoundParameters.Keys.Contains('Enabled')) { + $config.isEnabled = $Enabled + } + if ($PSBoundParameters.Keys.Contains('AllowEdit')) { + $config.allowEdit = $AllowEdit + } + if ($PSBoundParameters.Keys.Contains('Default')) { + $config.default = if ($Default -eq 'On') { 1 } else { 0 } + } + + $value = $current | ConvertTo-Json -Compress + Write-Verbose "Setting $eAIRegPath\Policy to $value" + + if ($reg) { + Set-ItemProperty -Path $eAIRegPath -Value $value -Name Policy -Force | Out-Null + } + else { + New-ItemProperty -Path $eAIRegPath -Value $value -Name Policy -Force | Out-Null + } + + $reg = Get-ItemProperty -Path $eAIRegPath -ErrorAction SilentlyContinue -Name Managed + if ($reg) { + $managed = $reg.Managed + } + else { + $managed = 0 + Write-Verbose "Creating registry entry $eAIRegPath\Managed with default value $managed" + New-ItemProperty -Path $eAIRegPath -Value $managed -Name Managed -Force | Out-Null + } + if ($managed -eq 0) { + Write-Warning "eAI managed attribute has not been set. Refer to Set-HPeAIManaged function documentation on how to set it." + } +} + +<# +.SYNOPSIS + Checks if Smart Experiences is supported on the current device + +.DESCRIPTION + This command checks if the BIOS setting "HP Smart Experiences" exists to determine if Smart Experiences is supported on the current device. + +.EXAMPLE + Test-HPSmartExperiencesIsSupported + +.LINK + [Get-HPeAISettingValue](https://developers.hp.com/hp-client-management/doc/Get-HPeAISettingValue) + +.LINK + [Set-HPeAISettingValue](https://developers.hp.com/hp-client-management/doc/Set-HPeAISettingValue) + +.LINK + [Set-HPeAIManaged](https://developers.hp.com/hp-client-management/doc/Set-HPeAIManaged) +#> +function Test-HPSmartExperiencesIsSupported { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Test-HPSmartExperiencesIsSupported")] + param() + + [boolean]$status = $false + try { + $mode = (Get-HPBIOSSettingValue -Name "HP Smart Experiences") + $status = $true + } + catch {} + + return $status +} + +<# +.SYNOPSIS + Retrieves the values of the specified HP eAI feature from the current device + +.DESCRIPTION + This command retrieves the values of the specified HP eAI feature where the feature must be from the current device. The feature must be either 'Privacy Alert' or 'Auto Screen Dimming'. + +.PARAMETER Name + Specifies the eAI feature to read. The value must be one of the following values: + - Privacy Alert + - Auto Screen Dimming + +.EXAMPLE + Get-HPeAISettingValue -Name 'Privacy Alert' + +.EXAMPLE + Get-HPeAISettingValue -Name 'Auto Screen Dimming' + +.NOTES + Admin privilege is required. + +.LINK + [Set-HPeAISettingValue](https://developers.hp.com/hp-client-management/doc/Set-HPeAISettingValue) + +.LINK + [Set-HPeAIManaged](https://developers.hp.com/hp-client-management/doc/Set-HPeAIManaged) +#> +function Get-HPeAISettingValue { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPeAISettingValue")] + param( + [Parameter(Mandatory = $true,Position = 0)] + [ValidateSet('Privacy Alert','Auto Screen Dimming')] + [string]$Name + ) + $eAIFeatures = @{ + 'Privacy Alert' = 'shoulderSurf' + 'Auto Screen Dimming' = 'attentionDim' + } + $eAIRegPath = 'HKLM:\Software\Policies\HP\SmartExperiences' + + if ((Test-HPSmartExperiencesIsSupported) -eq $false) { + throw [System.NotSupportedException]"HP Smart Experiences is currently not supported on this platform." + } + + Write-Verbose "Reading registry path $eAIRegPath\Policy" + $reg = Get-ItemProperty -Path $eAIRegPath -ErrorAction SilentlyContinue -Name Policy + if (-not $reg) { + throw [System.InvalidOperationException]'HP eAI is not currently configured on your device.' + } + else { + try { + Write-Verbose "Data read: $($reg.Policy)" + $current = $reg.Policy | ConvertFrom-Json + } + catch { + throw [System.FormatException]"$($_.Exception.Message): Please ensure Policy property contains a valid JSON." + } + Write-Verbose "$($eAIFeatures[$Name]) selected" + $config = $current.$($eAIFeatures[$Name]) + + $reg = Get-ItemProperty -Path $eAIRegPath -ErrorAction SilentlyContinue -Name Managed + if ($reg) { + $managed = $reg.Managed + } + else { + $managed = $false + } + Write-Verbose "Managed: $managed" + + return [ordered]@{ + Enabled = [bool]$config.isEnabled + Default = if ($config.default -eq 1) { 'On' } else { 'Off' } + AllowEdit = [bool]$config.allowEdit + } + } +} +# SIG # Begin signature block +# MIIoHgYJKoZIhvcNAQcCoIIoDzCCKAsCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCD+zdIXquO7YMDR +# GFZo5716vczwSbHf5W7BzvHLkEW9k6CCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6jCCGeYCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIG3E5D4F +# piA2/YErt8Qydv9icCvR5FyGzPBa13rZG6PoMA0GCSqGSIb3DQEBAQUABIIBgKFg +# 0ODgWLVb8WpmrmT/CsNYq4K2BCdE4NzasY4saU/QuCwf0OgbM1PsVxjscKjy9B2z +# 2epg/Ryt9GEer8buSXBRRPReowX8rPSEud+g9XdBKgdvz8e8HtxrvbE3oH+aogqZ +# YenBk3GDJrNbFE1t/kdrxStUfgzONlOi0xRxL6oHlJCo6EIJ9LyE33LU9qEpNqAY +# KLhTsS4rG+Z5c6CI0dUbsivsChCpfk/rizp+8Ovwh2cW9CjSUVPOEMEJx2QTIFQ4 +# AevxiW2mQuF8yG/RP+FZ9NgbZn6I+Y21mNclTk8+W3Kw19YPfA73KvZZLX8K4G69 +# T8I8kvEFFBEaZQuRV1G9DBaqV5PnrLwB++oKU/t3WBYv4tPiobDK5cri6PWh0JvE +# 6ZuuZ68MWQjMxT/yX7EpnAZuAenL5I4sKfz1Gz63zs/1rE5+ps3jICs+ADaNlfL1 +# s0xNuBLyxELqRgolG8JQwYVQ02/AFsFrUqrV/eKLI4n19FnvcFNDj4YcY5O+MKGC +# F0Awghc8BgorBgEEAYI3AwMBMYIXLDCCFygGCSqGSIb3DQEHAqCCFxkwghcVAgED +# MQ8wDQYJYIZIAWUDBAIBBQAweAYLKoZIhvcNAQkQAQSgaQRnMGUCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCDk3EcGCRMOfPiOVKXPMogflGFSkK0Pk5RS +# PCr48DdI4QIRAOVXI8u0AujA6WUoA2+Pl4oYDzIwMjQwODI3MTY1NTUwWqCCEwkw +# ggbCMIIEqqADAgECAhAFRK/zlJ0IOaa/2z9f5WEWMA0GCSqGSIb3DQEBCwUAMGMx +# CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMy +# RGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcg +# Q0EwHhcNMjMwNzE0MDAwMDAwWhcNMzQxMDEzMjM1OTU5WjBIMQswCQYDVQQGEwJV +# UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xIDAeBgNVBAMTF0RpZ2lDZXJ0IFRp +# bWVzdGFtcCAyMDIzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo1NF +# hx2DjlusPlSzI+DPn9fl0uddoQ4J3C9Io5d6OyqcZ9xiFVjBqZMRp82qsmrdECmK +# HmJjadNYnDVxvzqX65RQjxwg6seaOy+WZuNp52n+W8PWKyAcwZeUtKVQgfLPywem +# MGjKg0La/H8JJJSkghraarrYO8pd3hkYhftF6g1hbJ3+cV7EBpo88MUueQ8bZlLj +# yNY+X9pD04T10Mf2SC1eRXWWdf7dEKEbg8G45lKVtUfXeCk5a+B4WZfjRCtK1ZXO +# 7wgX6oJkTf8j48qG7rSkIWRw69XloNpjsy7pBe6q9iT1HbybHLK3X9/w7nZ9MZll +# R1WdSiQvrCuXvp/k/XtzPjLuUjT71Lvr1KAsNJvj3m5kGQc3AZEPHLVRzapMZoOI +# aGK7vEEbeBlt5NkP4FhB+9ixLOFRr7StFQYU6mIIE9NpHnxkTZ0P387RXoyqq1AV +# ybPKvNfEO2hEo6U7Qv1zfe7dCv95NBB+plwKWEwAPoVpdceDZNZ1zY8SdlalJPrX +# xGshuugfNJgvOuprAbD3+yqG7HtSOKmYCaFxsmxxrz64b5bV4RAT/mFHCoz+8LbH +# 1cfebCTwv0KCyqBxPZySkwS0aXAnDU+3tTbRyV8IpHCj7ArxES5k4MsiK8rxKBMh +# SVF+BmbTO77665E42FEHypS34lCh8zrTioPLQHsCAwEAAaOCAYswggGHMA4GA1Ud +# DwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATAfBgNVHSMEGDAWgBS6 +# FtltTYUvcyl2mi91jGogj57IbzAdBgNVHQ4EFgQUpbbvE+fvzdBkodVWqWUxo97V +# 40kwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp +# Z2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNybDCB +# kAYIKwYBBQUHAQEEgYMwgYAwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj +# ZXJ0LmNvbTBYBggrBgEFBQcwAoZMaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t +# L0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNy +# dDANBgkqhkiG9w0BAQsFAAOCAgEAgRrW3qCptZgXvHCNT4o8aJzYJf/LLOTN6l0i +# kuyMIgKpuM+AqNnn48XtJoKKcS8Y3U623mzX4WCcK+3tPUiOuGu6fF29wmE3aEl3 +# o+uQqhLXJ4Xzjh6S2sJAOJ9dyKAuJXglnSoFeoQpmLZXeY/bJlYrsPOnvTcM2Jh2 +# T1a5UsK2nTipgedtQVyMadG5K8TGe8+c+njikxp2oml101DkRBK+IA2eqUTQ+OVJ +# dwhaIcW0z5iVGlS6ubzBaRm6zxbygzc0brBBJt3eWpdPM43UjXd9dUWhpVgmagNF +# 3tlQtVCMr1a9TMXhRsUo063nQwBw3syYnhmJA+rUkTfvTVLzyWAhxFZH7doRS4wy +# w4jmWOK22z75X7BC1o/jF5HRqsBV44a/rCcsQdCaM0qoNtS5cpZ+l3k4SF/Kwtw9 +# Mt911jZnWon49qfH5U81PAC9vpwqbHkB3NpE5jreODsHXjlY9HxzMVWggBHLFAx+ +# rrz+pOt5Zapo1iLKO+uagjVXKBbLafIymrLS2Dq4sUaGa7oX/cR3bBVsrquvczro +# SUa31X/MtjjA2Owc9bahuEMs305MfR5ocMB3CtQC4Fxguyj/OOVSWtasFyIjTvTs +# 0xf7UGv/B3cfcZdEQcm4RtNsMnxYL2dHZeUbc7aZ+WssBkbvQR7w8F/g29mtkIBE +# r4AQQYowggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqGSIb3DQEB +# CwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNV +# BAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQg +# Um9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMxCzAJBgNV +# BAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNl +# cnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggIi +# MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXHJQPE8pE3 +# qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMfUBMLJnOW +# bfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w1lbU5ygt +# 69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRktFLydkf3 +# YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYbqMFkdECn +# wHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUmcJgmf6Aa +# RyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP65x9abJTy +# UpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzKQtwYSH8U +# NM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo80VgvCON +# WPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjBJgj5FBAS +# A31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXcheMBK9Rp61 +# 03a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAd +# BgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF +# BwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln +# aWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJo +# dHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy +# bDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQEL +# BQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd4ksp+3CK +# Daopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiCqBa9qVbP +# FXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl/Yy8ZCaH +# bJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeCRK6ZJxur +# JB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYTgAnEtp/N +# h4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/a6fxZsNB +# zU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37xJV77Qpf +# MzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmLNriT1Oby +# F5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0YgkPCr2B +# 2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJRyvmfxqk +# hQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIFjTCCBHWg +# AwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +# EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +# cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcN +# MjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEVMBMG +# A1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +# HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqGSIb3DQEB +# AQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +# pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+ +# n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYykt +# zuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw +# 2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6Qu +# BX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC +# 5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK +# 3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3 +# IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEP +# lAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98 +# THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t9dmpsh3l +# GwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8w +# DgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0 +# cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0 +# cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MEUGA1Ud +# HwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz +# c3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAowCDAGBgRVHSAAMA0GCSqGSIb3DQEB +# DAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9mqyhhyzshV6pGrsi+IcaaVQi +# 7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxSA8hO0Cre+i1Wz/n096wwepqL +# sl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE1Od/6Fmo8L8vC6bp8jQ87PcDx4eo +# 0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSMb++hUD38dglohJ9vytsgjTVg +# HAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbObyMt9H5xaiNrIv8SuFQtJ37YOtnw +# toeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMYIDdjCCA3ICAQEwdzBjMQswCQYDVQQG +# EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0 +# IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAFRK/z +# lJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUAoIHRMBoGCSqGSIb3DQEJAzENBgsq +# hkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwODI3MTY1NTUwWjArBgsqhkiG +# 9w0BCRACDDEcMBowGDAWBBRm8CsywsLJD4JdzqqKycZPGZzPQDAvBgkqhkiG9w0B +# CQQxIgQgWQRD2ghfeaImF78bXCa5HIAtTqSXvf1gHvUVq3PoWKIwNwYLKoZIhvcN +# AQkQAi8xKDAmMCQwIgQg0vbkbe10IszR1EBXaEE2b4KK2lWarjMWr00amtQMeCgw +# DQYJKoZIhvcNAQEBBQAEggIAUnAxPfemHAq9yvw51ZkYG2sx3tJy0OAapCvFleWN +# KDdFTTEsmw+yc8By67U33msz0ZEAdxuCZ7VNFn1groOvHBQ+Ryte4m72WmwOneyq +# 2ifStMIpO6yO5fExymbq2S83AnzxLbGZf40NKdRkywzZ5gSPYXvnCfb4d4ONzPNl +# G+AjGi8VBg6g9JKPMF7CGyO6FsL2H4Ab1YoSHbhOCZNF7zFgnSImC81vYggqPhQ3 +# kPJF7oOMRiiZYTliEBFn10VSCfo3x531GAmZWsWknoXHQQE1f7P8iE/LByy63Ig8 +# YQ0E/HcQq4Nayz/uq0lvIgIhmS81SBmO11Sm0Tr9gEFtuO2co7ZZZL67GOFIDp0O +# Gs+WqOqMmiAhV90qk5F0gZGpdsrgm51lLphnDKBxYJcxXKIkiWfQEM9jyPCi0kxh +# G8uUAhkwXrk0lRN4yxiZQdJS2Y3PazMNd+pb73gDixt3er8NHSbao870WaoRISTI +# MjFlgD0L6/bgx1Abs0zLOdnCb6RoiH6Jg6X82nmSbA+CtxTwCXWaCyCjvyid/YsM +# xHf9C8hZisqXV8EF1rjCUrPjV0XB7yuJHpNGn9UkW1qR6I+ehhxSVgZqg5Yhy/F4 +# 1SoKM51xXkYsNti4hOqsfa6Ca7m2gcKUVoWexcnogTOfvSUO1FoScQpEZ7w+6qVU +# +Ts= +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.SmartExperiences/license.txt b/Bios-Update-HP-v2.0/module/HP.SmartExperiences/license.txt new file mode 100644 index 0000000..b93ca37 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.SmartExperiences/license.txt @@ -0,0 +1,248 @@ +End-User License Agreement + +READ CAREFULLY BEFORE USING THIS SOFTWARE + +This End-User license Agreement ("EULA") is a legal agreement +between (a) you (either an individual or a single entity) and (b) HP Inc. +("HP") that governs your use of any Software Product, installed on or +made available by HP for use with your HP product ("HP Product"), that +is not otherwise subject to a separate license agreement between you +and HP or its suppliers. Other software may contain a EULA in its online +documentation. The term "Software Product" means computer software +and may include associated media, printed materials and "online" or +electronic documentation. + +An amendment or addendum to this EULA may accompany the HP +Product. + +RIGHTS IN THE SOFTWARE PRODUCT ARE OFFERED ONLY ON THE +CONDITION THAT YOU AGREE TO ALL TERMS AND CONDITIONS OF +THIS EULA. BY INSTALLING, COPYING, DOWNLOADING, OR +OTHERWISE USING THE SOFTWARE PRODUCT, YOU AGREE TO BE +BOUND BY THE TERMS OF THIS EULA. IF YOU DO NOT ACCEPT THESE +LICENSE TERMS, YOUR SOLE REMEDY IS TO RETURN THE ENTIRE +UNUSED PRODUCT (HARDWARE AND SOFTWARE) WITHIN 14 DAYS +FOR A REFUND SUBJECT TO THE REFUND POLICY OF YOUR PLACE OF +PURCHASE. + +1. GRANT OF LICENSE. HP grants you the following rights provided +you comply with all terms and conditions of this EULA: + +a. Use. You may use the Software Product on a single computer ("Your +Computer"). If the Software Product is provided to you via the internet +and was originally licensed for use on more than one computer, you +may install and use the Software Product only on those computers. You +may not separate component parts of the Software Product for use on +more than one computer. You do not have the right to distribute the +Software Product. You may load the Software Product into Your +Computer's temporary memory (RAM) for purposes of using the +Software Product. + +b. Storage. You may copy the Software Product into the local memory +or storage device of the HP Product. + +c. Copying. You may make archival or back-up copies of the Software +Product, provided the copy contains all of the original Software +Product's proprietary notices and that it is used only for back-up +purposes. + +d. Reservation of Rights. HP and its suppliers reserve all rights not +expressly granted to you in this EULA. + +e. Freeware. Notwithstanding the terms and conditions of this EULA, all +or any portion of the Software Product which constitutes non- +proprietary HP software or software provided under public license by +third parties ("Freeware"), is licensed to you subject to the terms and +conditions of the software license agreement accompanying such +Freeware whether in the form of a discrete agreement, shrink wrap +license or electronic license terms accepted at time of download. Use of +the Freeware by you shall be governed entirely by the terms and +conditions of such license. + +f. Recovery Solution. Any software recovery solution provided with/for +your HP Product, whether in the form of a hard disk drive-based +solution, an external media-based recovery solution (e.g. floppy disk, +CD or DVD) or an equivalent solution delivered in any other form, may +only be used for restoring the hard disk of the HP Product with/for +which the recovery solution was originally purchased. The use of any +Microsoft operating system software contained in such recovery +solution shall be governed by the Microsoft License Agreement. + +2. UPGRADES. To use a Software Product identified as an upgrade, +you must first be licensed for the original Software Product identified +by HP as eligible for the upgrade. After upgrading, you may no longer +use the original Software Product that formed the basis for your +upgrade eligibility. By using the Software Product, you also agree that +HP may automatically access your HP Product when connected to the +internet to check the version or status of certain Software Products and +may automatically download and install upgrades or updates to such +Software Products on to your HP Product to provide new versions or +updates required to maintain the functionality, performance, or security +of the HP Software and your HP Product and facilitate the provision of +support or other services provided to you. In certain cases, and +depending on the type of upgrade or update, notifications will be +provided to you (via pop-up or other means), which may require you to +initiate the upgrade or update. + +3. ADDITIONAL SOFTWARE. This EULA applies to updates or +supplements to the original Software Product provided by HP unless +HP provides other terms along with the update or supplement. In case +of a conflict between such terms, the other terms will prevail. + +4. TRANSFER. + +a. Third Party. The initial user of the Software Product may make a +one-time transfer of the Software Product to another end user. Any +transfer must include all component parts, media, printed materials, +this EULA, and if applicable, the Certificate of Authenticity. The transfer +may not be an indirect transfer, such as a consignment. Prior to the +transfer, the end user receiving the transferred product must agree to +all the EULA terms. Upon transfer of the Software Product, your license +is automatically terminated. + +b. Restrictions. You may not rent, lease or lend the Software Product or +use the Software Product for commercial timesharing or bureau use. +You may not sublicense, assign or transfer the license or Software +Product except as expressly provided in this EULA. + +5. PROPRIETARY RIGHTS. All intellectual property rights in the +Software Product and user documentation are owned by HP or its +suppliers and are protected by law, including but not limited to United +States copyright, trade secret, and trademark law, as well as other +applicable laws and international treaty provisions. You shall not +remove any product identification, copyright notices or proprietary +restrictions from the Software Product. + +6. LIMITATION ON REVERSE ENGINEERING. You may not reverse +engineer, decompile, or disassemble the Software Product, except and +only to the extent that the right to do so is mandated under applicable +law notwithstanding this limitation or it is expressly provided for in this +EULA. + +7. TERM. This EULA is effective unless terminated or rejected. This +EULA will also terminate upon conditions set forth elsewhere in this +EULA or if you fail to comply with any term or condition of this EULA. + +8. CONSENT TO COLLECTION/USE OF DATA. + +a. HP will use cookies and other web technology tools to collect +anonymous technical information related to HP Software and your HP +Product. This data will be used to provide the upgrades and related +support or other services described in Section 2. HP will also collect +personal information including your Internet Protocol address or other +unique identifier information associated with your HP Product and data +provided by you on registration of your HP Product. As well as +providing the upgrades and related support or other services, this data +will be used for sending marketing communications to you (in each +case with your express consent where required by applicable law). +To the extent permitted by applicable law, by accepting these terms +and conditions you consent to the collection and use of anonymous +and personal data by HP, its subsidiaries, and affiliates as described in +this EULA and as further described in HP�s privacy policy +www.hp.com/go/privacy + +b. Collection/Use by Third Parties. Certain software programs included +in your HP Product are provided and separately licensed to you by third +party providers (�Third Party Software�). Third Party Software may be +installed and operational on your HP Product even if you choose not to +activate/purchase such software. Third Party Software may collect and +transmit technical information about your system (i.e., IP address, +unique device identifier, software version installed, etc.) and other +system data. This information is used by the third party to identify +technical system attributes and ensure that the most current version of +the software has been installed on your system. If you do not want the +Third Party Software to collect this technical information or +automatically send you version updates, you should uninstall the +software prior to connecting to the Internet. + +9. DISCLAIMER OF WARRANTIES. TO THE MAXIMUM EXTENT +PERMITTED BY APPLICABLE LAW, HP AND ITS SUPPLIERS PROVIDE THE +SOFTWARE PRODUCT �AS IS� AND WITH ALL FAULTS, AND HEREBY +DISCLAIM ALL OTHER WARRANTIES, GUARANTEES, AND CONDITIONS, +EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT +LIMITED TO, WARRANTIES OF TITLE AND NON-INFRINGEMENT, ANY +IMPLIED WARRANTIES, DUTIES, GUARANTEES, OR CONDITIONS OF +MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A +PARTICULAR PURPOSE, AND OF LACK OF VIRUSES ALL WITH REGARD +TO THE SOFTWARE PRODUCT. Some states/jurisdictions do not allow +exclusion of implied warranties or limitations on the duration of implied +warranties, so the above disclaimer may not apply to you in its entirety. +IN AUSTRALIA AND NEW ZEALAND, THE SOFTWARE COMES WITH +GUARANTEES THAT CANNOT BE EXCLUDED UNDER AUSTRALIAN AND +NEW ZEALAND CONSUMER LAWS. AUSTRALIAN CONSUMERS ARE +ENTITLED TO A REPLACEMENT OR A REFUND FOR A MAJOR FAILURE +AND COMPENSATION FOR OTHER REASONABLY FORESEEABLE LOSS +OR DAMAGE. AUSTRALIAN CONSUMERS ARE ALSO ENTITLED TO +HAVE THE SOFTWARE REPAIRED OR REPLACED IF IT FAILS TO BE OF +ACCEPTABLE QUALITY AND THE FAILURE DOES NOT AMOUNT TO A +MAJOR FAILURE. NEW ZEALAND CONSUMERS WHO ARE PURCHASING +GOODS FOR PERSONAL, DOMESTIC OR HOUSEHOLD USE OR +CONSUMPTION AND NOT FOR THE PURPOSE OF A BUSINESS (�NEW +ZEALAND CONSUMERS�) ARE ENTITLED TO REPAIR, REPLACEMENT OR +REFUND FOR A FAILURE AND COMPENSATION FOR OTHER +REASONABLY FORESEEABLE LOSS OR DAMAGE. + +10. LIMITATION OF LIABILITY. Subject to local law, notwithstanding +any damages that you might incur, the entire liability of HP and any of +its suppliers under any provision of this EULA and your exclusive +remedy for all of the foregoing shall be limited to the greater of the +amount actually paid by you separately for the Software Product or U.S. +$5.00. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN +NO EVENT SHALL HP OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, +INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES +WHATSOEVER, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR +LOSS OF PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR +BUSINESS INTERRUPTION, FOR PERSONAL INJURY, FOR LOSS OF +PRIVACY ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF +OR INABILITY TO USE THE SOFTWARE PRODUCT, OR OTHERWISE IN +CONNECTION WITH ANY PROVISION OF THIS EULA, EVEN IF HP OR +ANY SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES AND EVEN IF THE REMEDY FAILS OF ITS ESSENTIAL +PURPOSE. Some states/jurisdictions do not allow the exclusion or +limitation of incidental or consequential damages, so the above +limitation or exclusion may not apply to you. + +11. U.S. GOVERNMENT CUSTOMERS. Consistent with FAR 12.211 +and 12.212, Commercial Computer Software, Computer Software +Documentation, and Technical Data for Commercial Items are licensed +to the U.S. Government under HP's standard commercial license. + +12. COMPLIANCE WITH EXPORT LAWS. You shall comply with all +laws and regulations of the United States and other countries ("Export +Laws") to assure that the Software Product is not (1) exported, directly +or indirectly, in violation of Export Laws, or (2) used for any purpose +prohibited by Export Laws, including, without limitation, nuclear, +chemical, or biological weapons proliferation. + +13. CAPACITY AND AUTHORITY TO CONTRACT. You represent that +you are of the legal age of majority in your state of residence and, if +applicable, you are duly authorized by your employer to enter into this +contract. + +14. APPLICABLE LAW. This EULA is governed by the laws of the +country in which the equipment was purchased. + +15. ENTIRE AGREEMENT. This EULA (including any addendum or +amendment to this EULA which is included with the HP Product) is the +entire agreement between you and HP relating to the Software Product +and it supersedes all prior or contemporaneous oral or written +communications, proposals and representations with respect to the +Software Product or any other subject matter covered by this EULA. To +the extent the terms of any HP policies or programs for support +services conflict with the terms of this EULA, the terms of this EULA +shall control. + +�Copyright 2018-2024 HP Development Company, L.P.. + +The information contained herein is subject to change without notice. +All other product names mentioned herein may be trademarks of their +respective companies. To the extent permitted by applicable law, the +only warranties for HP products and services are set forth in the express +warranty statements accompanying such products and services. +Nothing herein should be construed as constituting an additional +warranty. To the extent permitted by applicable law, HP shall not be +liable for technical or editorial errors or omissions contained herein. + +First Edition: August 2015 +817678-001 + diff --git a/Bios-Update-HP-v2.0/module/HP.Softpaq/HP.Softpaq.psd1 b/Bios-Update-HP-v2.0/module/HP.Softpaq/HP.Softpaq.psd1 new file mode 100644 index 0000000..f80dbba --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Softpaq/HP.Softpaq.psd1 @@ -0,0 +1,265 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + + + +@{ + + RootModule = 'HP.Softpaq.psm1' + #FullModuleVersion = '1.7.2.774' + ModuleVersion = '1.7.2' + GUID = '994EF32D-25FA-4903-88EF-98D47F052675' + Author = 'HP Development Company, L.P.' + CompanyName = 'HP Inc' + Copyright = '(C) Copyright 2018-2024 HP Development Company, L.P.' + Description = 'Softpaq management module for HP Client Management Script Library' + PowerShellVersion = '5.1' + FunctionsToExport = + 'Clear-SoftpaqCache', + 'Get-Softpaq', + 'Get-SoftpaqList', + 'Get-HPImageAssistantUpdateInfo', + 'Install-HPImageAssistant', + 'Get-SoftpaqMetadata', + 'Get-SoftpaqMetadataFile', + 'Out-SoftpaqField', + 'New-HPDriverPack', + 'New-HPBuildDriverPack', + 'New-HPUWPDriverPack' + + + PrivateData = @{ + PSData = @{ + LicenseUri = 'https://developers.hp.com/node/11493' + RequireLicenseAcceptance = $true + } # End of PSData hashtable +} # End of PrivateData hashtable + +} + + +# SIG # Begin signature block +# MIIoHgYJKoZIhvcNAQcCoIIoDzCCKAsCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBihCIdgiRcMXrt +# 5ZBdQZEkI2JUs31700v4gKB5q95JDaCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6jCCGeYCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIGXch8Pl +# sBMDTgMyY+/jEt4+VaufCgYwNj6t0IDvVqBJMA0GCSqGSIb3DQEBAQUABIIBgJab +# lK7d3Fp0v7AebAbTa45E30Bn1jvyK4vzEFle35RkU7g3opQOgzPWdUPUDbGL6gUZ +# ztWHmRqSKx4EI/1wnWDf4uXZDmD+9N9j2lXCLrFQ2rX0bEp6w5YUyq7HiChwkiv7 +# CHA4dsB6Z0162a+UFT9SKFuYd0n+RtgUVJVv87ZY9bp8Aj5ZlPBBQL990llXaQDH +# 2TEamLuonR2qBCnEc5oBuXPCMUgBEaLs8X5GJpAce/ZYawrqEVvEjqGAxUQBspIp +# kLDUOvIMWAMYgNIESNtdxzAfjA47FpjHmuPm83KF75tPFoGs1lbvDL3sxGgPjjBM +# N4YAOm7wjT5w2aR+CVbNnASgmZn2W0Qn/c6d5rfioZQEtJ2yhLo9+THwRMe6M2Uf +# f+HetmZShOveI44XxZAN38E6etgI6gD/4xmyeK4buITSTy+ud6eTbcCuqMLtNXVq +# 8idD36oAjyV7NDm7LcgAwAVNyVijvvO4I2QSHAGkZOQQ76Q6AmVEVEVGekbqeKGC +# F0Awghc8BgorBgEEAYI3AwMBMYIXLDCCFygGCSqGSIb3DQEHAqCCFxkwghcVAgED +# MQ8wDQYJYIZIAWUDBAIBBQAweAYLKoZIhvcNAQkQAQSgaQRnMGUCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCBeWUhXXx4M3kTu4xaepotaFToqnxgVgabr +# 3/rfceI8RgIRAMTFmEOLccneDoYabhbhJZQYDzIwMjQwODI3MTY1NTUwWqCCEwkw +# ggbCMIIEqqADAgECAhAFRK/zlJ0IOaa/2z9f5WEWMA0GCSqGSIb3DQEBCwUAMGMx +# CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMy +# RGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcg +# Q0EwHhcNMjMwNzE0MDAwMDAwWhcNMzQxMDEzMjM1OTU5WjBIMQswCQYDVQQGEwJV +# UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xIDAeBgNVBAMTF0RpZ2lDZXJ0IFRp +# bWVzdGFtcCAyMDIzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo1NF +# hx2DjlusPlSzI+DPn9fl0uddoQ4J3C9Io5d6OyqcZ9xiFVjBqZMRp82qsmrdECmK +# HmJjadNYnDVxvzqX65RQjxwg6seaOy+WZuNp52n+W8PWKyAcwZeUtKVQgfLPywem +# MGjKg0La/H8JJJSkghraarrYO8pd3hkYhftF6g1hbJ3+cV7EBpo88MUueQ8bZlLj +# yNY+X9pD04T10Mf2SC1eRXWWdf7dEKEbg8G45lKVtUfXeCk5a+B4WZfjRCtK1ZXO +# 7wgX6oJkTf8j48qG7rSkIWRw69XloNpjsy7pBe6q9iT1HbybHLK3X9/w7nZ9MZll +# R1WdSiQvrCuXvp/k/XtzPjLuUjT71Lvr1KAsNJvj3m5kGQc3AZEPHLVRzapMZoOI +# aGK7vEEbeBlt5NkP4FhB+9ixLOFRr7StFQYU6mIIE9NpHnxkTZ0P387RXoyqq1AV +# ybPKvNfEO2hEo6U7Qv1zfe7dCv95NBB+plwKWEwAPoVpdceDZNZ1zY8SdlalJPrX +# xGshuugfNJgvOuprAbD3+yqG7HtSOKmYCaFxsmxxrz64b5bV4RAT/mFHCoz+8LbH +# 1cfebCTwv0KCyqBxPZySkwS0aXAnDU+3tTbRyV8IpHCj7ArxES5k4MsiK8rxKBMh +# SVF+BmbTO77665E42FEHypS34lCh8zrTioPLQHsCAwEAAaOCAYswggGHMA4GA1Ud +# DwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATAfBgNVHSMEGDAWgBS6 +# FtltTYUvcyl2mi91jGogj57IbzAdBgNVHQ4EFgQUpbbvE+fvzdBkodVWqWUxo97V +# 40kwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp +# Z2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNybDCB +# kAYIKwYBBQUHAQEEgYMwgYAwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj +# ZXJ0LmNvbTBYBggrBgEFBQcwAoZMaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t +# L0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNy +# dDANBgkqhkiG9w0BAQsFAAOCAgEAgRrW3qCptZgXvHCNT4o8aJzYJf/LLOTN6l0i +# kuyMIgKpuM+AqNnn48XtJoKKcS8Y3U623mzX4WCcK+3tPUiOuGu6fF29wmE3aEl3 +# o+uQqhLXJ4Xzjh6S2sJAOJ9dyKAuJXglnSoFeoQpmLZXeY/bJlYrsPOnvTcM2Jh2 +# T1a5UsK2nTipgedtQVyMadG5K8TGe8+c+njikxp2oml101DkRBK+IA2eqUTQ+OVJ +# dwhaIcW0z5iVGlS6ubzBaRm6zxbygzc0brBBJt3eWpdPM43UjXd9dUWhpVgmagNF +# 3tlQtVCMr1a9TMXhRsUo063nQwBw3syYnhmJA+rUkTfvTVLzyWAhxFZH7doRS4wy +# w4jmWOK22z75X7BC1o/jF5HRqsBV44a/rCcsQdCaM0qoNtS5cpZ+l3k4SF/Kwtw9 +# Mt911jZnWon49qfH5U81PAC9vpwqbHkB3NpE5jreODsHXjlY9HxzMVWggBHLFAx+ +# rrz+pOt5Zapo1iLKO+uagjVXKBbLafIymrLS2Dq4sUaGa7oX/cR3bBVsrquvczro +# SUa31X/MtjjA2Owc9bahuEMs305MfR5ocMB3CtQC4Fxguyj/OOVSWtasFyIjTvTs +# 0xf7UGv/B3cfcZdEQcm4RtNsMnxYL2dHZeUbc7aZ+WssBkbvQR7w8F/g29mtkIBE +# r4AQQYowggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqGSIb3DQEB +# CwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNV +# BAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQg +# Um9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMxCzAJBgNV +# BAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNl +# cnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggIi +# MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXHJQPE8pE3 +# qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMfUBMLJnOW +# bfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w1lbU5ygt +# 69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRktFLydkf3 +# YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYbqMFkdECn +# wHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUmcJgmf6Aa +# RyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP65x9abJTy +# UpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzKQtwYSH8U +# NM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo80VgvCON +# WPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjBJgj5FBAS +# A31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXcheMBK9Rp61 +# 03a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAd +# BgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF +# BwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln +# aWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJo +# dHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy +# bDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQEL +# BQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd4ksp+3CK +# Daopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiCqBa9qVbP +# FXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl/Yy8ZCaH +# bJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeCRK6ZJxur +# JB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYTgAnEtp/N +# h4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/a6fxZsNB +# zU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37xJV77Qpf +# MzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmLNriT1Oby +# F5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0YgkPCr2B +# 2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJRyvmfxqk +# hQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIFjTCCBHWg +# AwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +# EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +# cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcN +# MjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEVMBMG +# A1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +# HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqGSIb3DQEB +# AQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +# pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+ +# n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYykt +# zuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw +# 2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6Qu +# BX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC +# 5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK +# 3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3 +# IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEP +# lAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98 +# THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t9dmpsh3l +# GwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8w +# DgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0 +# cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0 +# cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MEUGA1Ud +# HwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz +# c3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAowCDAGBgRVHSAAMA0GCSqGSIb3DQEB +# DAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9mqyhhyzshV6pGrsi+IcaaVQi +# 7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxSA8hO0Cre+i1Wz/n096wwepqL +# sl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE1Od/6Fmo8L8vC6bp8jQ87PcDx4eo +# 0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSMb++hUD38dglohJ9vytsgjTVg +# HAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbObyMt9H5xaiNrIv8SuFQtJ37YOtnw +# toeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMYIDdjCCA3ICAQEwdzBjMQswCQYDVQQG +# EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0 +# IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAFRK/z +# lJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUAoIHRMBoGCSqGSIb3DQEJAzENBgsq +# hkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwODI3MTY1NTUwWjArBgsqhkiG +# 9w0BCRACDDEcMBowGDAWBBRm8CsywsLJD4JdzqqKycZPGZzPQDAvBgkqhkiG9w0B +# CQQxIgQgMUtVB/hHPnSihFa0sm5ar7ZY9T+dKGv9g/rtuJyaxm4wNwYLKoZIhvcN +# AQkQAi8xKDAmMCQwIgQg0vbkbe10IszR1EBXaEE2b4KK2lWarjMWr00amtQMeCgw +# DQYJKoZIhvcNAQEBBQAEggIAUEQcrEg79ctmJNuAI6D/4vahQVb3DUlp9rO2w42h +# 5hBhekhvi5Tq8DMncoBcwr6l/uEMQrH+eefV9aox7n71RDvQ9y9TYopaYocCyVcP +# Akuuq4l7iV1MjmwcrqfTUA3S+ILzPBBxm0ccfqbRZ8zyC0NVLSWEK/iBO5NGUfNU +# UQWVCQRoLvfcFXJukhDsDp+N8I8CiEJWeZ61nyrHaMofnLFcplaxToslkdip89cV +# LIP5nwYbbiOc958vGFZtTHUX+0jh8FjmUEGL/gyfAY/6NEi8T/hQox2gSTLfnrQf +# XhK+xHCChscqPake2CIOacgLLS7UxGLpO6KCtzeFgcWBVW5BgrjUjOMEO4Wdc1Vp +# 4qSpbdMeoGzvSBvF79qSaPGjnJ3z5gfT4tk2NYSY8bje/pJgCFUgqnpA5n4rJ6fM +# C/OTYazTx06DbG4CB6kCAM1QLYdv7ezS132J6YLJu4wMTq9vsen8CfK7rKcD7QXV +# GzDyl4Do6xToNnNTYYqd740Hl0tsxEaCT7tzs+HmjVRwYu+EqdSqgvFqAeuj64u8 +# jQlrhU16f2eJPQKrCnFfEBX9vQ4Z6DLaZ2XIT3yac4wB4PewzQ2fGjfv4cFEwKGS +# gnW+zS2qyfJU87J/lO/NBFBzZFNRBAAUjR5q+aofVLR0tQjqcli4lCq2GLw5R+uJ +# I+E= +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Softpaq/HP.Softpaq.psm1 b/Bios-Update-HP-v2.0/module/HP.Softpaq/HP.Softpaq.psm1 new file mode 100644 index 0000000..8923a7d --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Softpaq/HP.Softpaq.psm1 @@ -0,0 +1,2865 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + + + +Set-StrictMode -Version 3.0 +#requires -Modules "HP.Private" +Add-Type -AssemblyName System.IO.Compression.FileSystem + +<# +.SYNOPSIS + Downloads the metadata of a SoftPaq metadata in CVA file format from ftp.hp.com or from a specified alternate server + +.DESCRIPTION + This command downloads the metadata of a SoftPaq metadata in CVA file format from ftp.hp.com or from a specified alternate server. If the -URL parameter is not specified, the SoftPaq metadata is downloaded from ftp.hp.com. + + Please note that this command is called in the Get-SoftPaqMetadataFile command if the -FriendlyName parameter is specified. + +.PARAMETER Number + Specifies a SoftPaq number to retrieve the metadata from. Do not include any prefixes like 'SP' or any extensions like '.exe'. Please specify the SoftPaq number only. + +.PARAMETER Url + Specifies an alternate location for the SoftPaq URL. This URL must be an https URL. The SoftPaq CVAs are expected to be at the location pointed to by this URL. If not specified, ftp.hp.com is used via HTTPS protocol. + +.PARAMETER MaxRetries + Specifies the maximum number of retries allowed to obtain an exclusive lock to downloaded files. This is relevant only when files are downloaded into a shared directory and multiple processes may be reading or writing from the same location. + + Current default value is 10 retries, and each retry includes a 30 second pause, which means the maximum time the default value will wait for an exclusive logs is 300 seconds or 5 minutes. + +.EXAMPLE + Get-SoftpaqMetadata -Number 1234 | Out-SoftpaqField -field Title + +.LINK + [Get-Softpaq](https://developers.hp.com/hp-client-management/doc/Get-Softpaq) + +.LINK + [Get-SoftpaqMetadataFile](https://developers.hp.com/hp-client-management/doc/Get-SoftpaqMetadataFile) + +.LINK + [Get-SoftpaqList](https://developers.hp.com/hp-client-management/doc/Get-SoftpaqList) + +.LINK + [Out-SoftpaqField](https://developers.hp.com/hp-client-management/doc/Out-SoftpaqField) + +.LINK + [Clear-SoftpaqCache](https://developers.hp.com/hp-client-management/doc/Clear-SoftpaqCache) +#> +function Get-SoftpaqMetadata { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-SoftpaqMetadata")] + param( + [ValidatePattern('^([Ss][Pp])*([0-9]{3,9})((\.[Ee][Xx][Ee]|\.[Cc][Vv][Aa])*)$')] + [Parameter(Position = 0,Mandatory = $true)] [string]$Number, + [Parameter(Position = 1,Mandatory = $false)] [string]$Url, + [Parameter(Position = 2,Mandatory = $false)] [int]$MaxRetries = 0 + ) + + # only allow https or file paths with or without file:// URL prefix + if ($Url -and -not ($Url.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($Url) -or $Url.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + $no = [int]$number.ToLower().TrimStart("sp").trimend(".exe").trimend('cva') + [System.Net.ServicePointManager]::SecurityProtocol = Get-HPPrivateAllowedHttpsProtocols + $loc = Get-HPPrivateItemUrl $no "cva" $url + Get-HPPrivateReadINI -File $loc -Verbose:$VerbosePreference -maxRetries $maxRetries +} + + +<# +.SYNOPSIS + Downloads a SoftPaq from ftp.hp.com or from a specified alternate server + +.DESCRIPTION + This command downloads a SoftPaq from the default download server (ftp.hp.com) or from a specified alternate server. + If using the default server, the download is performed over HTTPS. Otherwise, the protocol is dictated by the URL parameter. + + If a SoftPaq is either unavailable to download or has been obsoleted on the server, this command will display a warning that the SoftPaq could not be retrieved. + + The Get-Softpaq command is not supported in WinPE. + +.PARAMETER Number + Specifies the SoftPaq number for which to retrieve the metadata. Do not include any prefixes like 'SP' or any extensions like '.exe'. Please specify the SoftPaq number only. + +.PARAMETER SaveAs + Specifies a specific file name to save the SoftPaq as. Otherwise, the name the SoftPaq will be saved as is inferred based on the remote name or the SoftPaq metadata if the FriendlyName parameter is specified. + +.PARAMETER FriendlyName + Specifies a friendly name for the downloaded SoftPaq based on the SoftPaq number and title + +.PARAMETER Quiet + If specified, this command will suppress non-essential messages during execution. + +.PARAMETER Overwrite + Specifies the the overwrite behavior. + The possible values include: + "no" = (default if this parameter is not specified) do not overwrite existing files + "yes" = force overwrite + "skip" = skip existing files without any error + +.PARAMETER Action + Specifies the SoftPaq action this command will execute after download. The value must be either 'install' or 'silentinstall'. Silentinstall information is retrieved from the SoftPaq metadata (CVA) file. + If DestinationPath parameter is also specified, this value will be used as the location to save files. + +.PARAMETER Extract + If specified, this command extracts SoftPaq content to a specified destination folder. Specify the destination folder with the DestinationPath parameter. + + If the DestinationPath parameter is not specified, the files are extracted into a new sub-folder relative to the downloaded SoftPaq executable. + +.PARAMETER DestinationPath + Specifies the path to the folder in which you want to save downloaded and/or extracted files. Do not specify a file name or file name extension. + + If not specified, the executable is downloaded to the current folder, and the files are extracted into a new sub-folder relative to the downloaded executable. + +.PARAMETER Url + Specifies an alternate location for the SoftPaq URL. This URL must be an https URL. The SoftPaqs are expected to be at the location pointed to by this URL. If not specified, ftp.hp.com is used via HTTPS protocol. + +.PARAMETER KeepInvalidSigned + If specified, this command will not delete any files that failed the signature authentication check. This command performs a signature authentication check after a download. By default, this command will delete any downloaded file with an invalid or missing signature. + +.PARAMETER MaxRetries + Specifies the maximum number of retries allowed to obtain an exclusive lock to downloaded files. This is relevant only when files are downloaded into a shared directory and multiple processes may be reading or writing from the same location. + + Current default value is 10 retries, and each retry includes a 30 second pause, which means the maximum time the default value will wait for an exclusive logs is 300 seconds or 5 minutes. + +.EXAMPLE + Get-Softpaq -Number 1234 + +.EXAMPLE + Get-Softpaq -Number 1234 -Extract -DestinationPath "c:\staging\drivers" + +.LINK + [Get-SoftpaqMetadata](https://developers.hp.com/hp-client-management/doc/Get-SoftpaqMetadata) + +.LINK + [Get-SoftpaqMetadataFile](https://developers.hp.com/hp-client-management/doc/Get-SoftpaqMetadataFile) + +.LINK + [Get-SoftpaqList](https://developers.hp.com/hp-client-management/doc/Get-SoftpaqList) + +.LINK + [Out-SoftpaqField](https://developers.hp.com/hp-client-management/doc/Out-SoftpaqField) + +.LINK + [Clear-SoftpaqCache](https://developers.hp.com/hp-client-management/doc/Clear-SoftpaqCache) + +#> +function Get-Softpaq { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-Softpaq",DefaultParameterSetName = "DownloadParams")] + param( + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 0,Mandatory = $true)] + [string]$Number, + + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 1,Mandatory = $false)] + [string]$SaveAs, + + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 2,Mandatory = $false)] + [switch]$FriendlyName, + + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 3,Mandatory = $false)] + [switch]$Quiet, + + [Parameter(ParameterSetName = "DownloadParams")] + [ValidateSet("no","yes","skip")] + [Parameter(Position = 4,Mandatory = $false)] + [string]$Overwrite = "no", + + [Parameter(Position = 5,Mandatory = $false,ParameterSetName = "DownloadParams")] + [Parameter(Position = 5,Mandatory = $false,ParameterSetName = "InstallParams")] + [ValidateSet("install","silentinstall")] + [string]$Action, + + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 6,Mandatory = $false)] + [string]$Url, + + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 7,Mandatory = $false)] + [switch]$KeepInvalidSigned, + + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 8,Mandatory = $false)] + [int]$MaxRetries = 0, + + [Parameter(Mandatory = $false,ParameterSetName = "DownloadParams")] + [Parameter(Mandatory = $false,ParameterSetName = "ExtractParams")] + [switch]$Extract, + + [Parameter(Mandatory = $false,ParameterSetName = "DownloadParams")] + [Parameter(Mandatory = $false,ParameterSetName = "ExtractParams")] + [ValidatePattern('^[a-zA-Z]:\\')] + [string]$DestinationPath + ) + + if ((Test-WinPE) -and ($action)) { + throw [NotSupportedException]"Softpaq installation is not supported in WinPE" + } + + # only allow https or file paths with or without file:// URL prefix + if ($Url -and -not ($Url.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($Url) -or $Url.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + [System.Net.ServicePointManager]::SecurityProtocol = Get-HPPrivateAllowedHttpsProtocols + $no = [int]$number.ToLower().TrimStart("sp").trimend(".exe") + + if ($keepInvalidSigned.IsPresent) { $keepInvalid = $true } + else { $keepInvalid = $false } + + if ($quiet.IsPresent) { $progress = -not $quiet } + else { $progress = $true } + + $loc = Get-HPPrivateItemUrl -Number $no -Ext "exe" -url $url + $target = $null + $root = $null + + if ($friendlyName.IsPresent -or $action) { + # get SoftPaq metadata + try { $root = Get-SoftpaqMetadata $no -url $url -maxRetries $maxRetries } + catch { + if ($progress -eq $true) { + Write-Host -ForegroundColor Magenta "(Warning) Could not retrieve CVA file metadata for sp$no." + Write-Host -ForegroundColor Magenta $_.Exception.Message + } + } + } + + # build the filename + if (!$saveAs) { + if ($friendlyName.IsPresent) + { + Write-Verbose "Need to get CVA data to determine Friendly Name for SoftPaq file" + $target = getfriendlyFileName -Number $no -info $root -Verbose:$VerbosePreference + $target = "$target.exe" + } + + else { $target = "sp$no.exe" } + } + else { $target = $saveAs } + + if($DestinationPath){ + # remove trailing backslashes in DestinationPath because SoftPaqs do not allow execution with trailing backslashes + $DestinationPath = $DestinationPath.TrimEnd('\') + + # use DestinationPath if given for downloads + $targetFile = Join-Path -Path $DestinationPath -ChildPath $target + } + else { + $targetFile = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($target) + } + + Write-Verbose "TargetFile: $targetFile" + + try + { + Invoke-HPPrivateDownloadFile -url $loc -Target $targetFile -progress $progress -NoClobber $overwrite -Verbose:$VerbosePreference -maxRetries $maxRetries + } + catch + { + Write-Host -ForegroundColor Magenta "(Warning) Could not retrieve $loc." + Write-Host -ForegroundColor Magenta $_.Exception.Message + throw $_.Exception + } + + # check digital signatures + $signed = Get-HPPrivateCheckSignature -File $targetFile -Verbose:$VerbosePreference -Progress:(-not $Quiet.IsPresent) + + if ($signed -eq $false) { + switch ($keepInvalid) { + $true { + if ($progress -eq $true) { + Write-Host -ForegroundColor Magenta "(Warning): File $targetFile has an invalid or missing signature" + return + } + } + $false { + Invoke-HPPrivateSafeRemove -Path $targetFile -Verbose:$VerbosePreference + throw [System.BadImageFormatException]"File $targetFile has invalid or missing signature and will be deleted." + return + } + } + } + else { + if ($progress -eq $true) { + Write-Verbose "Digital signature is valid." + } + } + + if ($Extract.IsPresent) { + if (!$DestinationPath) { + # by default, the -replace operator is case-insensitive + $DestinationPath = Join-Path -Path $(Get-Location) -ChildPath ($target -replace ".exe","") + } + if ($DestinationPath -match [regex]::Escape([System.Environment]::SystemDirectory)) { + throw 'Windows System32 is not a valid destination path.' + } + + $tempWorkingPath = $(Get-HPPrivateTempPath) + $workingPath = Join-Path -Path $tempWorkingPath -ChildPath $target + Write-Verbose "Copying downloaded SoftPaq to temporary working directory $workingPath" + + if(-not (Test-Path -Path $tempWorkingPath)){ + Write-Verbose "Part of the temporary working directory does not exist. Creating $tempWorkingPath before copying" + New-Item -Path $tempWorkingPath -ItemType "Directory" -Force | Out-Null + } + + Copy-Item -Path $targetFile -Destination $workingPath -Force + + # calling Invoke-PostDownloadSoftpaqAction with action as Extract even though Action parameter is limited to Install and SilentInstall + Invoke-PostDownloadSoftpaqAction -downloadedFile $workingPath -Action "extract" -Number $number -info $root -Destination $DestinationPath -Verbose:$VerbosePreference + Write-Verbose "Removing SoftPaq from the temporary working directory $workingPath" + Remove-Item -Path $workingPath -Force + } + + # perform requested action + if ($action) + { + Invoke-PostDownloadSoftpaqAction -downloadedFile $targetFile -Action $action -Number $number -info $root -Destination $DestinationPath -Verbose:$VerbosePreference + } +} + +<# +.SYNOPSIS + Downloads the metadata of a SoftPaq metadata in CVA file format from ftp.hp.com or from a specified alternate server with additional configuration capabilities in comparison to the Get-SoftPaqMetadata command + +.DESCRIPTION + This command downloads the metadata of a SoftPaq metadata in CVA file format from ftp.hp.com or from a specified alternate server with additional configuration capabilities in comparison to the Get-SoftPaqMetadata command. + + The additional configuration capabilities are detailed using the following parameters: + - SaveAs + - FriendlyName + - Quiet + - Overwrite + + Please note that this command calls the Get-SoftPaqMetadata command if the -FriendlyName parameter is specified. + +.PARAMETER Number + Specifies the SoftPaq number for which to retrieve the metadata. Do not include any prefixes like 'SP' or any extensions like '.exe'. Please specify the SoftPaq number only. + +.PARAMETER SaveAs + Specifies a name for the saved SoftPaq metadata. Otherwise the name is inferred based on the remote name or on the metadata if the -FriendlyName parameter is specified. + +.PARAMETER FriendlyName + Specifies a friendly name for the downloaded SoftPaq based on the SoftPaq number and title + +.PARAMETER Quiet + If specified, this command will suppress non-essential messages during execution. + +.PARAMETER Overwrite + Specifies the the overwrite behavior. + The possible values include: + "no" = (default if this parameter is not specified) do not overwrite existing files + "yes" = force overwrite + "skip" = skip existing files without any error + +.PARAMETER MaxRetries + Specifies the maximum number of retries allowed to obtain an exclusive lock to downloaded files. This is relevant only when files are downloaded into a shared directory and multiple processes may be reading or writing from the same location. + + Current default value is 10 retries, and each retry includes a 30 second pause, which means the maximum time the default value will wait for an exclusive logs is 300 seconds or 5 minutes. + +.PARAMETER url + Specifies an alternate location for the SoftPaq URL. This URL must be an https URL. The SoftPaq CVAs are expected to be at the location pointed to by this URL. If not specified, ftp.hp.com is used via HTTPS protocol. + +.EXAMPLE + Get-SoftpaqMetadataFile -Number 1234 + +.LINK + [Get-SoftpaqMetadata](https://developers.hp.com/hp-client-management/doc/Get-SoftpaqMetadata) + +.LINK + [Get-Softpaq](https://developers.hp.com/hp-client-management/doc/Get-Softpaq) + +.LINK + [Get-SoftpaqList](https://developers.hp.com/hp-client-management/doc/Get-SoftpaqList) + +.LINK + [Out-SoftpaqField](https://developers.hp.com/hp-client-management/doc/Out-SoftpaqField) + +.LINK + [Clear-SoftpaqCache](https://developers.hp.com/hp-client-management/doc/Clear-SoftpaqCache) + +#> +function Get-SoftpaqMetadataFile { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-SoftpaqMetadataFile")] + param( + [ValidatePattern('^([Ss][Pp])*([0-9]{3,9})((\.[Ee][Xx][Ee]|\.[Cc][Vv][Aa])*)$')] + [Parameter(Position = 0,Mandatory = $true)] + [string]$Number, + [Parameter(Position = 1,Mandatory = $false)] + [string]$SaveAs, + [Parameter(Position = 2,Mandatory = $false)] + [switch]$FriendlyName, + [Parameter(Position = 3,Mandatory = $false)] + [switch]$Quiet, + [ValidateSet("No","Yes","Skip")] + [Parameter(Position = 4,Mandatory = $false)] + [string]$Overwrite = "No", + [Parameter(Position = 5,Mandatory = $false)] + [string]$Url, + [Parameter(Position = 6,Mandatory = $false)] + [int]$MaxRetries = 0 + ) + + # only allow https or file paths with or without file:// URL prefix + if ($Url -and -not ($Url.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($Url) -or $Url.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + [System.Net.ServicePointManager]::SecurityProtocol = Get-HPPrivateAllowedHttpsProtocols + $no = [int]$number.ToLower().TrimStart("sp").trimend(".exe").trimend('cva') + + if ($quiet.IsPresent) { $progress = -not $quiet } + else { $progress = $true } + + $loc = Get-HPPrivateItemUrl -Number $no -Ext "cva" -url $url + + $target = $null + + # get SoftPaq metadata. We don't need this step unless we get friendly name + if ($friendlyName.IsPresent) { + Write-Verbose "Need to get CVA data to determine Friendly Name for CVA file" + try { $root = Get-SoftpaqMetadata $number -url $url -maxRetries $maxRetries } + catch { + if ($progress -eq $true) { + Write-Host -ForegroundColor Magenta "(Warning) Could not retrieve CVA file metadata" + Write-Host -ForegroundColor Magenta $_.Exception.Message + } + $root = $null + } + } + + # build the filename + if (!$saveAs) { + if ($friendlyName.IsPresent) { + Write-Verbose "Need to get CVA data to determine Friendly Name for CVA file" + $target = getfriendlyFileName -Number $no -info $root -Verbose:$VerbosePreference + $target = "$target.cva" + } + else { $target = "sp$no.cva" } + } + else { $target = $saveAs } + + # download the file + $targetFile = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($target) + Invoke-HPPrivateDownloadFile -url $loc -Target $targetFile -progress $progress -NoClobber $overwrite -Verbose:$VerbosePreference -maxRetries $maxRetries -skipSignatureCheck +} + +<# +.SYNOPSIS + Extracts the information of a specified field from the SoftPaq metadata + +.DESCRIPTION + This command extracts the information of a specified field from the SoftPaq metadata. The currently supported fields are: + + - Description + - Install + - Number + - PlatformIDs + - Platforms + - SilentInstall + - SoftPaqSHA256 + - Title + - Version + + +.PARAMETER Field + Specifies the field to filter the SoftPaq metadata on. Choose from the following values: + - Install + - SilentInstall + - Title + - Description + - Number + - Platforms + - PlatformIDs + - SoftPaqSHA256 + - Version + +.PARAMETER InputObject + Specifies the root node of the SoftPaq metadata to extract information from + +.EXAMPLE + $mysoftpaq | Out-SoftpaqField -Field Title + +.LINK + [Get-SoftpaqMetadata](https://developers.hp.com/hp-client-management/doc/Get-SoftpaqMetadata) + +.LINK + [Get-Softpaq](https://developers.hp.com/hp-client-management/doc/Get-Softpaq) + +.LINK + [Get-SoftpaqList](https://developers.hp.com/hp-client-management/doc/Get-SoftpaqList) + +.LINK + [Get-Softpaq](https://developers.hp.com/hp-client-management/doc/Get-Softpaq) + +.LINK + [Clear-SoftpaqCache](https://developers.hp.com/hp-client-management/doc/Clear-SoftpaqCache) +#> +function Out-SoftpaqField { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Out-SoftpaqField")] + param( + [ValidateSet("Install","SilentInstall","Title","Description","Number","Platforms","PlatformIDs","SoftPaqSHA256","Version")] + [Parameter(Mandatory = $True)] + [string]$Field, + + [ValidateNotNullOrEmpty()] + [Parameter(ValueFromPipeline = $True,Mandatory = $True)] + [Alias('In')] + $InputObject + ) + + begin { + if (!$mapper.contains($field)) { + throw [InvalidOperationException]"Field '$field' is not supported as a filter" + } + } + process + { + $result = descendNodesAndGet $InputObject -Field $field + if ($mapper[$field] -match "%KeyValues\(.*\)$") { + + $pattern = $mapper[$field] -match "\((.*)\)" + if ($pattern[0]) { + + # Need to narrow it down to PlatformIDs otherwise Platforms will be shown in UpperCase too. + if ($Field -eq "PlatformIDs") { + $result = $result[$result.keys -match $matches[1]].ToUpper() | Get-Unique + return $result -replace "^0X",'' + } + else { + return $result[$result.keys -match $matches[1]] | Get-Unique + } + } + } + return $result + } + end {} +} + +<# +.SYNOPSIS + Clears the cache used for downloading SoftPaq database files + +.DESCRIPTION + + This command clears the cache used for downloading SoftPaq database files. + + This command is not needed in normal operations as the cache does not grow significantly over time and is also cleared when normal operations flush the user's temporary directory. + + This command is only intended for debugging purposes. + + + +.EXAMPLE + Clear-SoftpaqCache + +.PARAMETER cacheDir + Specifies a custom location for caching data files. If not specified, the user-specific TEMP directory is used. + + +.LINK + [Get-SoftpaqMetadata](https://developers.hp.com/hp-client-management/doc/Get-SoftpaqMetadata) + +.LINK + [Get-Softpaq](https://developers.hp.com/hp-client-management/doc/Get-Softpaq) + +.LINK + [Get-SoftpaqList](https://developers.hp.com/hp-client-management/doc/Get-SoftpaqList) + +.LINK + [Get-Softpaq](https://developers.hp.com/hp-client-management/doc/Get-Softpaq) + +.LINK + [Out-SoftpaqField](https://developers.hp.com/hp-client-management/doc/Out-SoftpaqField) + +.NOTES + This command removes the cached files from the user temporary directory. It cannot be used to clear the cache + when the data files are stored inside a repository structure. Custom cache locations (other than the default) + must be specified via the cacheDir folder. + +#> +function Clear-SoftpaqCache { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Clear-SoftpaqCache")] + param( + [Parameter(Mandatory = $false)] + [System.IO.DirectoryInfo]$CacheDir + ) + $cacheDir = Get-HPPrivateCacheDirPath ($cacheDir) + Invoke-HPPrivateSafeRemove -Path $cacheDir -Recurse +} + +<# +.SYNOPSIS + Retrieves a list of SoftPaqs for the current platform or a specified platform ID + +.DESCRIPTION + This command retrieves a list of SoftPaqs for the current platform or a specified platform ID. + Note that this command is not supported in WinPE. + +.PARAMETER Platform + Specfies a platform ID to retrieve a list of associated SoftPaqs. If not specified, the current platform ID is used. + +.PARAMETER Bitness + Specifies the platform bitness (32 or 64 or arm64). If not specified, the current platform bitness is used. + +.PARAMETER Os + Specifies an OS for this command to filter based on. The value must be 'win10' or 'win11'. If not specified, the current platform OS is used. + +.PARAMETER OsVer + Specifies an OS version for this command to filter based on. The value must be a string value specifying the target OS Version (e.g. '1809', '1903', '1909', '2004', '2009', '21H1', '21H2', '22H2', '23H2', '24H2', etc). If this parameter is not specified, the current operating system version is used. + +.PARAMETER Category + Specifies a category of SoftPaqs for this command to filter based on. The value must be one (or more) of the following values: + - Bios + - Firmware + - Driver + - Software + - OS + - Manageability + - Diagnostic + - Utility + - Driverpack + - Dock + - UWPPack + +.PARAMETER ReleaseType + Specifies a release type for this command to filter based on. The value must be one (or more) of the following values: + - Critical + - Recommended + - Routine + + If this parameter is not specified, all release types are included. + +.PARAMETER ReferenceUrl + Specifies an alternate location for the HP Image Assistant (HPIA) Reference files. If passing a file path, the path can be relative path or absolute path. If passing a URL to this parameter, the URL must be an https URL. The HPIA Reference files are expected to be inside a directory named after the platform ID pointed to by this parameter. + For example, if you want to point to system ID 83b2, OS Win10, and OSVer 2009 reference files, the Get-SoftpaqList command will try to find them in: $ReferenceUrl/83b2/83b2_64_10.0.2009.cab + If not specified, 'https://hpia.hpcloud.hp.com/ref/' is used by default, and fallback is set to 'https://ftp.hp.com/pub/caps-softpaq/cmit/imagepal/ref/'. + +.PARAMETER SoftpaqUrl + Specifies an alternate location for the SoftPaq URL. This URL must be a https url. The SoftPaqs are expected to be at the location pointed to by this URL. If not specified, ftp.hp.com is used via HTTPS protocol. + +.PARAMETER Quiet + If specified, this command will suppress non-essential messages during execution. + +.PARAMETER Download + If specified, this command will download matching SoftPaqs. + +.PARAMETER DownloadMetadata + If specified, this command will download CVA files (metadata) for matching SoftPaqs. + +.PARAMETER DownloadNotes + If specified, this command will download note files (human readable info files) for matching SoftPaqs. + +.PARAMETER DownloadDirectory + Specifies a directory for the downloaded files + +.PARAMETER FriendlyName + If specified, this command will retrieve the SoftPaq metadata and create a friendly file name based on the SoftPaq title. Applies if the Download parameter is specified. + +.PARAMETER Overwrite + Specifies the the overwrite behavior. The value must be one of the following values: + - no: (default if this parameter is not specified) do not overwrite existing files + - yes: force overwrite + - skip: skip existing files without any error + +.PARAMETER Format + Specifies the format of the output results. The value must be one of the following values: + - Json + - XML + - CSV + + If not specified, results are returned as PowerShell objects. + +.PARAMETER Characteristic + Specifies characteristics for this command to filter based on. The value must be one (or more) of the following values: + - SSM + - DPB + - UWP + +.PARAMETER CacheDir + Specifies a location for caching data files. If not specified, the user-specific TEMP directory is used. + +.PARAMETER MaxRetries + Specifies the maximum number of retries allowed to obtain an exclusive lock to downloaded files. This is relevant only when files are downloaded into a shared directory and multiple processes may be reading or writing from the same location. + + The current default value is 10 retries, and each retry includes a 30 second pause, which means the maximum time the default value will wait for an exclusive logs is 300 seconds or 5 minutes. + +.PARAMETER PreferLTSC + If specified and if the data file exists, this command retrieves the Long-Term Servicing Branch/Long-Term Servicing Channel (LTSB/LTSC) Reference file for the specified platform ID. If the data file does not exist, this command uses the regular Reference file for the specified platform. + +.PARAMETER AddHttps + If specified, this command prepends the https tag to the url, ReleaseNotes, and Metadata SoftPaq attributes. + +.EXAMPLE + Get-SoftpaqList -Download + +.EXAMPLE + Get-SoftpaqList -Bitness 64 -Os win10 -OsVer 1903 + +.EXAMPLE + Get-SoftpaqList -Platform 83b2 -Os win10 -OsVer "21H1" + +.EXAMPLE + Get-SoftpaqList -Platform 8444 -Category Diagnostic -Format json + +.EXAMPLE + Get-SoftpaqList -Category Driverpack + +.EXAMPLE + Get-SoftpaqList -ReleaseType Critical -Characteristic SSM + +.EXAMPLE + Get-SoftpaqList -Platform 83b2 -Category Dock,Firmware -ReleaseType Routine,Critical + +.EXAMPLE + Get-SoftpaqList -Platform 2216 -Category Driverpack -Os win10 -OsVer 1607 -PreferLTSC + +.LINK + [Get-SoftpaqMetadata](https://developers.hp.com/hp-client-management/doc/Get-SoftpaqMetadata) + +.LINK + [Get-Softpaq](https://developers.hp.com/hp-client-management/doc/Get-Softpaq) + +.LINK + [Clear-SoftpaqCache](https://developers.hp.com/hp-client-management/doc/Clear-SoftpaqCache) + +.LINK + [Get-Softpaq](https://developers.hp.com/hp-client-management/doc/Get-Softpaq) + +.LINK + [Out-SoftpaqField](https://developers.hp.com/hp-client-management/doc/Out-SoftpaqField) + +.NOTES + The response is a record set composed of zero or more SoftPaq records. The definition of a record is as follows: + + | Field | Description | + |---------------|-------------| + | Id | The SoftPaq identifier | + | Name | The SoftPaq name (title) | + | Category | The SoftPaq category | + | Version | The SoftPaq version | + | Vendor | The author of the SoftPaq | + | ReleaseType | The SoftPaq release type | + | SSM | This flag indicates this SoftPaq support unattended silent install | + | DPB | This flag indicates this SoftPaq is included in driver pack builds | + | Url | The SoftPaq download URL | + | ReleaseNotes | The URL to a human-readable rendering of the SoftPaq release notes | + | Metadata | The URL to the SoftPaq metadata (CVA) file | + | Size | The SoftPaq size, in bytes | + | ReleaseDate | The date the SoftPaq was published | + | UWP | (where available) This flag indicates this SoftPaq contains Universal Windows Platform applications | + +#> +function Get-SoftpaqList { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-SoftpaqList",DefaultParameterSetName = "ViewParams")] + param( + + [ValidatePattern("^[a-fA-F0-9]{4}$")] + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 0,Mandatory = $false,ParameterSetName = "ViewParams")] [string]$Platform, + + [ValidateSet("32","64", "arm64")] + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 1,Mandatory = $false,ParameterSetName = "ViewParams")] [string]$Bitness, + + [ValidateSet($null,"win7","win8","win8.1","win81","win10","win11")] + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 2,Mandatory = $false,ParameterSetName = "ViewParams")] [string]$Os, + + [ValidateSet("1809","1903","1909","2004","2009","21H1","21H2","22H2", "23H2", "24H2")] + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 3,Mandatory = $false,ParameterSetName = "ViewParams")] [string]$OsVer, + + [Parameter(ParameterSetName = "DownloadParams")] + [Alias('Url')] + [Parameter(Position = 4,Mandatory = $false,ParameterSetName = "ViewParams")] [string]$ReferenceUrl = "https://hpia.hpcloud.hp.com/ref", + + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 5,Mandatory = $false,ParameterSetName = "ViewParams")] [switch]$Quiet, + + [Parameter(ParameterSetName = "DownloadParams")] + [ValidateSet("XML","Json","CSV")] + [Parameter(Position = 6,ParameterSetName = "ViewParams")] [string]$Format, + + [Parameter(Position = 7,ParameterSetName = "DownloadParams")] [string]$DownloadDirectory, + + [Alias("downloadSoftpaq","downloadPackage")] + [Parameter(Position = 8,ParameterSetName = "DownloadParams")] [switch]$Download, + + [Alias("downloadCva")] + [Parameter(Position = 9,ParameterSetName = "DownloadParams")] [switch]$DownloadMetadata, + [Parameter(Position = 10,ParameterSetName = "DownloadParams")] [switch]$DownloadNotes, + [Parameter(Position = 11,ParameterSetName = "DownloadParams")] [switch]$FriendlyName, + + [ValidateSet("No","Yes","Skip")] + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 12,Mandatory = $false,ParameterSetName = "ViewParams")] [string]$Overwrite = "No", + + + [ValidateSet("BIOS","Firmware","Driver","Software","OS","Manageability","Diagnostic","Utility","Driverpack","Dock","UWPPack")] + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 13,ParameterSetName = "ViewParams")] [string[]]$Category = $null, + + + [ValidateSet("Critical","Recommended","Routine")] + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 14,ParameterSetName = "ViewParams")] [string[]]$ReleaseType = $null, + + + [ValidateSet("SSM","DPB","UWP")] + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 15,ParameterSetName = "ViewParams")] [string[]]$Characteristic = $null, + + + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 16,ParameterSetName = "ViewParams")] [System.IO.DirectoryInfo]$CacheDir, + + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 17,Mandatory = $false,ParameterSetName = "ViewParams")] [int]$MaxRetries = 0, + + [Alias("PreferLTSB")] + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 18,Mandatory = $false,ParameterSetName = "ViewParams")] [switch]$PreferLTSC, + + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 19,Mandatory = $false,ParameterSetName = "ViewParams")] [string]$SoftpaqUrl, + + [Parameter(ParameterSetName = "DownloadParams")] + [Parameter(Position = 20,Mandatory = $false,ParameterSetName = "ViewParams")] [switch]$AddHttps + ) + + if (Test-WinPE) { + throw [NotSupportedException]"This operation is not supported in WinPE" + } + + [System.Net.ServicePointManager]::SecurityProtocol = Get-HPPrivateAllowedHttpsProtocols + $ver = "" + $progress = $true + $cacheDir = Get-HPPrivateCacheDirPath ($cacheDir) + + if ($quiet.IsPresent) { $progress = -not $quiet } + if (-not $platform) { $platform = Get-HPDeviceProductID } + $platform = $platform.ToLower() + if ($OsVer) { $OsVer = $OsVer.ToLower() } + + if (!$bitness) { + $bitness = Get-HPPrivateCurrentOsBitness + } + if (!$os) { + $os = Get-HPPrivateCurrentOs + } + + + if (([System.Environment]::OSVersion.Version.Major -eq 10) -and $OsVer) { + + try { + # try converting OsVer to int + $OSVer = [int]$OsVer + + if ($OSVer -gt 2009 -or $OSVer -lt 1507) { + throw "Unsupported operating system version" + } + } + catch { + if (!($OSVer -match '[0-9]{2}[hH][0-9]')) { + throw "Unsupported operating system version" + } + } + } + + # determine OSVer for Win10 if OSVer is not passed + if (([System.Environment]::OSVersion.Version.Major -eq 10) -and (!$osver)) + { + Write-Verbose "need to determine OSVer" + $osver = GetCurrentOSVer + } + + switch ($os) + { + "win10" { $ver = "10.0." + $osver.ToString() } + "win11" { $ver = "11.0." + $osver.ToString() } + "win81" { $ver = "6.3" } + "win8.1" { $ver = "6.3" } + "win8" { $ver = "6.2" } + "win7" { $ver = "6.1" } + default { throw [NotSupportedException]"Unsupported operating system: " + $_ } + } + + if (-not $ReferenceUrl.EndsWith('/')) { + $ReferenceUrl = $ReferenceUrl + "/" + } + + # Fallback to FTP only if ReferenceUrl is the default, and not when a custom ReferenceUrl is specified + if ($ReferenceUrl -eq 'https://hpia.hpcloud.hp.com/ref/') { + $referenceFallbackUrL = 'https://ftp.hp.com/pub/caps-softpaq/cmit/imagepal/ref/' + } + else { + $referenceFallbackUrL = '' + } + + $fn = "$($platform)_$($bitness)_$($ver)" + #Write-Host -ForegroundColor Magenta $fn + $result = $null + $LTSCExists = $false + + if ($PreferLTSC.IsPresent) { + $qurl = "$($ReferenceUrl)$platform/$fn.e.cab" + $qfile = Get-HPPrivateTemporaryFileName -FileName "$fn.e.cab" -cacheDir $cacheDir + $downloadedFile = "$qfile.dir\$fn.e.xml" + $try_on_ftp = $false + try { + $result = Test-HPPrivateIsDownloadNeeded -url $qurl -File $qfile -Verbose:$VerbosePreference + if ($result[1] -eq $true) { + Write-Verbose "Trying to download $qurl from AWS Server..." + } + $LTSCExists = $true + } + catch { + Write-Verbose "HTTPS request to $qurl failed: $($_.Exception.Message)" + if ($referenceFallbackUrL) { + $try_on_ftp = $true + } + } + + if ($try_on_ftp) { + try { + Write-Verbose "$qurl not found on AWS Server. Trying to download it from FTP Server..." + $qurl = "$($ReferenceFallbackUrl)$platform/$fn.e.cab" + $result = Test-HPPrivateIsDownloadNeeded -url $qurl -File $qfile -Verbose:$VerbosePreference + if ($result[1] -eq $true) { + $LTSCExists = $true + } + } + catch { + Write-Verbose "HTTPS request to $qurl failed: $($_.Exception.Message)" + if (-not $quiet -or $result[1] -eq $false) { + Write-Host -ForegroundColor Magenta "LTSB/LTSC data file doesn't exists for platform $platform ($os $osver)" + Write-Host -ForegroundColor Cyan "Getting the regular (non-LTSB/LTSC) data file for this platform" + } + } + } + } + + # LTSB(C) file doesn't exists, fall back to regular Ref file + if ((-not $PreferLTSC.IsPresent) -or ($PreferLTSC.IsPresent -and ($LTSCExists -eq $false))) { + $qurl = "$($ReferenceUrl)$platform/$fn.cab" + $qfile = Get-HPPrivateTemporaryFileName -FileName "$fn.cab" -cacheDir $cacheDir + $downloadedFile = "$qfile.dir\$fn.xml" + $try_on_ftp = $false + try { + $result = Test-HPPrivateIsDownloadNeeded -url $qurl -File $qfile -Verbose:$VerbosePreference + if ($result[1] -eq $true) { + Write-Verbose "Trying to download $qurl from AWS Server..." + } + } + catch { + Write-Host "HTTPS request to $qurl failed: $($_.Exception.Message)" + if ($referenceFallbackUrL) { + $try_on_ftp = $true + } + else { + throw [System.Net.WebException]"Could not find data file $qurl for platform $platform." + } + } + + if ($try_on_ftp) { + try { + Write-Verbose "$qurl not found on AWS Server. Trying to download it from FTP Server..." + $qurl = "$($ReferenceFallbackUrl)$platform/$fn.cab" + $result = Test-HPPrivateIsDownloadNeeded -url $qurl -File $qfile -Verbose:$VerbosePreference + } + catch { + Write-Host "HTTPS request to $qurl failed: $($_.Exception.Message)" + if (-not $quiet -or $result[1] -eq $false) { + Write-Host -ForegroundColor Magenta $_.Exception.Message + } + throw [System.Net.WebException]"Could not find data file $qurl for platform $platform." + } + } + } + + if ($result -and $result[1] -eq $true) { + Write-Verbose "Cleaning cached data and downloading the data file." + Invoke-HPPrivateDeleteCachedItem -cab $qfile + Invoke-HPPrivateDownloadFile -url $qurl -Target $qfile -progress $progress -NoClobber $overwrite -Verbose:$VerbosePreference -maxRetries $maxRetries + (Get-Item $qfile).CreationTime = ($result[0]) + (Get-Item $qfile).LastWriteTime = ($result[0]) + } + + # Need to make sure that the expanded data file exists and is not corrupted. + # Otherwise, expand the cab file. + if (-not (Test-Path $downloadedFile) -or (-not (Test-HPPrivateIsValidXmlFile -File $downloadedFile))) + { + Write-Verbose "Extracting the data file and looking for $downloadedFile." + $file = Invoke-HPPrivateExpandCAB -cab $qfile -expectedFile $downloadedFile -Verbose:$VerbosePreference + } + + Write-Verbose "Reading XML document $downloadedFile" + # Default encoding for PS5.1 is Default meaning the encoding that correpsonds to the system's active code page + # Default encoding for PS7.3 is utf8NoBOM + [xml]$data = Get-Content $downloadedFile -Encoding UTF8 + Write-Verbose "Parsing the document" + + $d = Select-Xml -Xml $data -XPath "//ImagePal/Solutions/UpdateInfo" + + $results = $d.Node | ForEach-Object { + if (($null -ne $releaseType) -and ($_.ReleaseType -notin $releaseType)) { return } + if (-not (matchCategory -cat $_.Category -allowed $category -EQ $true)) { return } + if ("ContentTypes" -in $_.PSObject.Properties.Name) { $ContentTypes = $_.ContentTypes } else { $ContentTypes = $null } + if (($null -ne $characteristic) -and (-not (matchAllCharacteristic $characteristic -SSM $_.SSMCompliant -DPB $_.DPBCompliant -UWP $ContentTypes))) { return } + if ($AddHttps.IsPresent) { + $objUrl = "https://$($_.url)" + $objReleaseNotes = "https://$($_.ReleaseNotesUrl)" + $objMetadata = "https://$($_.CvaUrl)" + } + else { + $objUrl = $_.url + $objReleaseNotes = $_.ReleaseNotesUrl + $objMetadata = $_.CvaUrl + } + + $pso = [pscustomobject]@{ + id = $_.id + Name = $_.Name + Category = $_.Category + Version = $_.Version.TrimStart("0.") + Vendor = $_.Vendor + ReleaseType = $_.ReleaseType + SSM = $_.SSMCompliant + DPB = $_.DPBCompliant + url = $objUrl + ReleaseNotes = $objReleaseNotes + Metadata = $objMetadata + Size = $_.Size + ReleaseDate = $_.DateReleased + UWP = $(if ("ContentTypes" -in $_.PSObject.Properties.Name) { $true } else { $false }) + } + $pso + + + + if ($download.IsPresent) { + [int]$id = $pso.id.ToLower().Replace("sp","") + if ($friendlyName.IsPresent) { + Write-Verbose "Need to get CVA data to determine Friendly Name for download file" + $target = getfriendlyFileName -Number $pso.id.ToLower().TrimStart("sp") -From $pso.Name -Verbose:$VerbosePreference + } + else { $target = $pso.id } + + if ($downloadDirectory) { $target = "$downloadDirectory\$target" } + else { + $cwd = Convert-Path . + $target = "$cwd\$target" + } + + if ($downloadMetadata.IsPresent) + { + $loc = Get-HPPrivateItemUrl -Number $Id -Ext "cva" -url $SoftpaqUrl + Invoke-HPPrivateDownloadFile -url $loc -Target "$target.cva" -progress $progress -NoClobber $overwrite -Verbose:$VerbosePreference -skipSignatureCheck -maxRetries $maxRetries + } + + $loc = Get-HPPrivateItemUrl -Number $Id -Ext "exe" -url $SoftpaqUrl + + Invoke-HPPrivateDownloadFile -url $loc -Target "$target.exe" -progress $progress -NoClobber $overwrite -Verbose:$VerbosePreference -maxRetries $maxRetries + + if ($downloadNotes.IsPresent) + { + $loc = Get-HPPrivateItemUrl -Number $Id -Ext "html" -url $SoftpaqUrl + Invoke-HPPrivateDownloadFile -url $loc -Target "$target.htm" -progress $progress -NoClobber $overwrite -Verbose:$VerbosePreference -skipSignatureCheck -maxRetries $maxRetries + } + } + } + + $result = $results | Select-Object * -Unique + switch ($format) + { + "xml" { $result | ConvertTo-Xml -As String } + "json" { $result | ConvertTo-Json } + "csv" { $result | ConvertTo-Csv -NoTypeInformation } + default { return $result } + } +} + +<# +.SYNOPSIS + Retrieves the latest version, HPIA download URL, and SoftPaq URL of HP Image Assistant ([HPIA](https://ftp.hp.com/pub/caps-softpaq/cmit/HPIA.html)) + +.DESCRIPTION + This command returns the latest version of HPIA returned as a System.Version object, the HPIA download page, and the SoftPaq download URL. + +.EXAMPLE + Get-HPImageAssistantUpdateInfo + +.LINK + [Install-HPImageAssistant](https://developers.hp.com/hp-client-management/doc/Install-HPImageAssistant) + +#> +function Get-HPImageAssistantUpdateInfo { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Get-HPImageAssistantUpdateInfo ")] + param() + + $cacheDir = Get-HPPrivateCacheDirPath -Verbose:$VerbosePreference + + $source = "https://hpia.hpcloud.hp.com/HPIAMsg.cab" + $fallbackSource = "https://ftp.hp.com/pub/caps-softpaq/cmit/imagepal/HPIAMsg.cab" + + $sourceFile = Get-HPPrivateTemporaryFileName -FileName "HPIAMsg.cab" -cacheDir $cacheDir + $downloadedFile = "$sourceFile.dir\HPIAMsg.xml" + + $try_on_ftp = $false + try { + $result = Test-HPPrivateIsDownloadNeeded -url $source -File $sourceFile -Verbose:$VerbosePreference + if ($result[1] -eq $true) { + Write-Verbose "Trying to download $source from AWS Server..." + } + } + catch { + $try_on_ftp = $true + } + + if ($try_on_ftp) { + try { + Write-Verbose "$source not found on AWS Server. Trying to download it from FTP Server..." + $source = $fallbackSource + $result = Test-HPPrivateIsDownloadNeeded -url $source -File $sourceFile -Verbose:$VerbosePreference + if ($result[1] -eq $true) { + Write-Verbose "Trying to download $source from FTP Server..." + } + } + catch { + if ($result[1] -eq $false) { + Write-Host -ForegroundColor Magenta "data file not found" + } + } + } + + if ($result[1] -eq $true) { + Write-Verbose "Cleaning cached data and downloading the data file." + Invoke-HPPrivateDeleteCachedItem -cab $sourceFile + Invoke-HPPrivateDownloadFile -url $source -Target $sourceFile -Verbose:$VerbosePreference + } + + Write-Verbose "Downloaded file is : $downloadedFile" + # Need to make sure that the expanded data file exists and is not corrupted. + # Otherwise, expand the cab file. + if (-not (Test-Path $downloadedFile) -or (-not (Test-HPPrivateIsValidXmlFile -File $downloadedFile))) + { + Write-Verbose "Extracting the data file, looking for $downloadedFile." + $file = Invoke-HPPrivateExpandCAB -cab $sourceFile -expectedFile $downloadedFile + Write-Verbose $file + } + + Write-Verbose "Reading XML document $downloadedFile" + # Default encoding for PS5.1 is Default meaning the encoding that correpsonds to the system's active code page + # Default encoding for PS7.3 is utf8NoBOM + [xml]$data = Get-Content $downloadedFile -Encoding UTF8 + Write-Verbose "Parsing the document" + + # Getting the SoftPaq information + $SoftpaqVersion = $data.ImagePal.HPIALatest.Version + $SoftpaqUrl = $data.ImagePal.HPIALatest.SoftpaqURL + $DownloadPage = $data.ImagePal.HPIALatest.DownloadPage + + # change SoftpaqVersion from a string to a System.Version object + $SoftpaqVersion = [System.Version]$SoftpaqVersion + + $result = [ordered]@{ + Version = $SoftpaqVersion + DownloadPage = $DownloadPage + SoftpaqURL = $SoftpaqUrl + } + + return $result + +} + +<# +.SYNOPSIS + Installs the latest version of HP Image Assistant ([HPIA](https://ftp.hp.com/pub/caps-softpaq/cmit/HPIA.html)) + +.DESCRIPTION + This command finds the latest version of HPIA and downloads the SoftPaq. If the Extract parameter is not used, the SoftPaq is only downloaded and not executed. + +.PARAMETER Extract + If specified, this command extracts SoftPaq content to a specified destination folder. Specify the destination folder with the DestinationPath parameter. + + If the DestinationPath parameter is not specified, the files are extracted into a new sub-folder relative to the downloaded SoftPaq executable. + +.PARAMETER DestinationPath + Specifies the path to the folder in which you want to save downloaded and/or extracted files. Do not specify a file name or file name extension. + + If not specified, the executable is downloaded to the current folder, and the files are extracted into a new sub-folder relative to the downloaded executable. + +.PARAMETER Source + This parameter is currently reserved for internal use only. + +.PARAMETER CacheDir + Specifies a custom location for caching data files. If not specified, the user-specific TEMP directory is used. + +.PARAMETER MaxRetries + Specifies the maximum number of retries allowed to obtain an exclusive lock to downloaded files. This is relevant only when files are downloaded into a shared directory and multiple processes may be reading or writing from the same location. + + Current default value is 10 retries, and each retry includes a 30 second pause, which means the maximum time the default value will wait for an exclusive logs is 300 seconds or 5 minutes. + +.PARAMETER Quiet + If specified, this command will suppress non-essential messages during execution. + +.EXAMPLE + Install-HPImageAssistant + +.EXAMPLE + Install-HPImageAssistant -Quiet + +.EXAMPLE + Install-HPImageAssistant -Extract -DestinationPath "c:\staging\hpia" + +.LINK + [Get-Softpaq](https://developers.hp.com/hp-client-management/doc/Get-Softpaq) + +.LINK + [Get-SoftpaqMetadataFile](https://developers.hp.com/hp-client-management/doc/Get-SoftpaqMetadataFile) + +.LINK + [Get-SoftpaqList](https://developers.hp.com/hp-client-management/doc/Get-SoftpaqList) + +.LINK + [Clear-SoftpaqCache](https://developers.hp.com/hp-client-management/doc/Clear-SoftpaqCache) +#> +function Install-HPImageAssistant { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Install-HPImageAssistant")] + param( + [Parameter(Position = 0,Mandatory = $false,ParameterSetName = "ExtractParams")] + [switch]$Extract, + + [Parameter(Position = 1,Mandatory = $false,ParameterSetName = "ExtractParams")] + [ValidatePattern('^[a-zA-Z]:\\')] + [string]$DestinationPath, + + [Parameter(Position = 2,Mandatory = $false)] + [System.IO.DirectoryInfo]$CacheDir, + + [Parameter(Position = 3,Mandatory = $false)] + [int]$MaxRetries = 0, + + [Parameter(Position = 4,Mandatory = $false)] + [string]$Source = "https://hpia.hpcloud.hp.com/HPIAMsg.cab", + + [Parameter(Position = 5,Mandatory = $false)] + [switch]$Quiet + ) + + if ($quiet.IsPresent) { $progress = -not $quiet } + else { $progress = $true } + + $cacheDir = Get-HPPrivateCacheDirPath ($cacheDir) + + $fallbackSource = "https://ftp.hp.com/pub/caps-softpaq/cmit/imagepal/HPIAMsg.cab" + + $sourceFile = Get-HPPrivateTemporaryFileName -FileName "HPIAMsg.cab" -cacheDir $cacheDir + $downloadedFile = "$sourceFile.dir\HPIAMsg.xml" + + $try_on_ftp = $false + try { + $result = Test-HPPrivateIsDownloadNeeded -url $source -File $sourceFile -Verbose:$VerbosePreference + if ($result[1] -eq $true) { + Write-Verbose "Trying to download $source from AWS Server..." + } + } + catch { + $try_on_ftp = $true + } + + if ($try_on_ftp) { + try { + Write-Verbose "$source not found on AWS Server. Trying to download it from FTP Server..." + $source = $fallbackSource + $result = Test-HPPrivateIsDownloadNeeded -url $source -File $sourceFile -Verbose:$VerbosePreference + if ($result[1] -eq $true) { + Write-Verbose "Trying to download $source from FTP Server..." + } + } + catch { + if ($result[1] -eq $false) { + Write-Host -ForegroundColor Magenta "data file not found" + } + } + } + + if ($result[1] -eq $true) { + Write-Verbose "Cleaning cached data and downloading the data file." + Invoke-HPPrivateDeleteCachedItem -cab $sourceFile + Invoke-HPPrivateDownloadFile -url $source -Target $sourceFile -progress $progress -Verbose:$VerbosePreference -maxRetries $maxRetries + } + + Write-Verbose "Downloaded file is : $downloadedFile" + # Need to make sure that the expanded data file exists and is not corrupted. + # Otherwise, expand the cab file. + if (-not (Test-Path $downloadedFile) -or (-not (Test-HPPrivateIsValidXmlFile -File $downloadedFile))) + { + Write-Verbose "Extracting the data file, looking for $downloadedFile." + $file = Invoke-HPPrivateExpandCAB -cab $sourceFile -expectedFile $downloadedFile + Write-Verbose $file + } + + Write-Verbose "Reading XML document $downloadedFile" + # Default encoding for PS5.1 is Default meaning the encoding that correpsonds to the system's active code page + # Default encoding for PS7.3 is utf8NoBOM + [xml]$data = Get-Content $downloadedFile -Encoding UTF8 + Write-Verbose "Parsing the document" + + # Getting the SoftPaq information + $SoftpaqVersion = $data.ImagePal.HPIALatest.Version + $SoftpaqUrl = $data.ImagePal.HPIALatest.SoftpaqURL + $Softpaq = $SoftpaqUrl.Split('/')[-1] + $SoftpaqExtractedFolderName = $Softpaq.ToLower().trimend(".exe") + + if($DestinationPath){ + # remove trailing backslashes in DestinationPath because SoftPaqs do not allow execution with trailing backslashes + $DestinationPath = $DestinationPath.TrimEnd('\') + + # use DestinationPath if given for downloads + $TargetFile = Join-Path -Path $DestinationPath -ChildPath $Softpaq + } + else { + $TargetFile = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($Softpaq) + } + Write-Verbose "SoftPaq Version: $SoftpaqVersion" + Write-Verbose "SoftPaq URL: $SoftpaqUrl" + + $params = @{ + url = $SoftpaqUrl + Target = $TargetFile + MaxRetries = $MaxRetries + progress = $progress + } + + try { + Invoke-HPPrivateDownloadFile @params + Write-Verbose "Successfully downloaded SoftPaq at $TargetFile" + # if Extract and Destination location is specified, proceed to extract the SoftPaq + if ($Extract) { + if (!$DestinationPath) { + $DestinationPath = Join-Path -Path $(Get-Location) -ChildPath $SoftpaqExtractedFolderName + } + if ($DestinationPath -match [regex]::Escape([System.Environment]::SystemDirectory)) { + throw 'Windows System32 is not a valid destination path.' + } + + $tempWorkingPath = $(Get-HPPrivateTempPath) + $workingPath = Join-Path -Path $tempWorkingPath -ChildPath $Softpaq + Write-Verbose "Copying downloaded SoftPaq to temporary working directory $workingPath" + + if(-not (Test-Path -Path $tempWorkingPath)){ + Write-Verbose "Part of the temporary working directory does not exist. Creating $tempWorkingPath before copying" + New-Item -Path $tempWorkingPath -ItemType "Directory" -Force | Out-Null + } + + Copy-Item -Path $TargetFile -Destination $workingPath -Force + + Invoke-PostDownloadSoftpaqAction -downloadedFile $workingPath -Action "Extract" -Destination $DestinationPath + Write-Verbose "SoftPaq self-extraction finished at $DestinationPath" + Write-Verbose "Remove SoftPaq from the temporary working directory $workingPath" + Remove-Item -Path $workingPath -Force + } + Write-Verbose "Success" + } + catch { + if (-not $Quiet) { + Write-Host -ForegroundColor Magenta $_.Exception.Message + } + throw $_.Exception + } +} + + + +# private functionality below + +function matchCategory ([string]$cat,[string[]]$allowed) +{ + if ($allowed -eq $null) { return $true } + if ($cat.StartsWith("Driver") -eq $true) { return $allowed -eq "driver" } + if ($cat.StartsWith("Operating System -") -eq $true) { return $allowed -eq "os" } + if ($cat.StartsWith("Manageability - Driver Pack") -eq $true) { return $allowed -eq "driverpack" } + if ($cat.StartsWith("Manageability - UWP Pack") -eq $true) { return $allowed -eq "UWPPack" } + if ($cat.StartsWith("Manageability -") -eq $true) { return $allowed -eq "manageability" } + if ($cat.StartsWith("Utility -") -eq $true) { return $allowed -eq "utility" } + if (($cat.StartsWith("Dock -") -eq $true) -or ($cat -eq "Docks")) { return $allowed -eq "dock" } + if (($cat -eq "BIOS") -or ($cat.StartsWith("BIOS -") -eq $true)) { return $allowed -eq "BIOS" } + if ($cat -eq "firmware") { return $allowed -eq "firmware" } + if ($cat -eq "diagnostic") { return $allowed -eq "diagnostic" } + else { + return $allowed -eq "software" + } + return $false +} + +function matchAllCharacteristic ([string[]]$targetedCharacteristic,[string]$SSM,[string]$DPB,[string]$UWP) +{ + if ($targetedCharacteristic -eq $null) { return $true } + if ($targetedCharacteristic.Count -eq 0) { return $true } + + $ContainsAllCharacteristic = $true + + foreach ($characteristic in $targetedCharacteristic) + { + switch ($characteristic.trim().ToLower()) { + "ssm" + { + if ($SSM.trim().ToLower() -eq "false") { $ContainsAllCharacteristic = $false } + } + "dpb" + { + if ($DPB.trim().ToLower() -eq "false") { $ContainsAllCharacteristic = $false } + } + "uwp" + { + if ($UWP.trim().ToLower() -ne "uwp") { $ContainsAllCharacteristic = $false } + } + } + } + return $ContainsAllCharacteristic +} + + + +function Release-Ref ($ref) { + [System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$ref) | Out-Null + [System.GC]::Collect() + [System.GC]::WaitForPendingFinalizers() +} + +# create a friendly name from SoftPaq metadata (CVA) +function getfriendlyFileName +{ + [CmdletBinding()] + param( + [int]$number, + $info, + [string]$from + ) + + try { + $title = "sp$number" + + #if title was passed in, we use it + if ($from) { $title = $from } + + #else if object was passed in, we use it + elseif ($info -ne $null) { $title = ($info | Out-SoftpaqField Title) } + + #else use a default + else { $title = "(No description available)" } + + $pass1 = removeInvalidCharacters $title + $pass2 = $pass1.trim() + $pass3 = $pass2 -replace ('\s+','_') + return $number.ToString("sp######") + "-" + $pass3 + } + catch { + Write-Host -ForegroundColor Magenta "Could not determine friendly name so using SoftPaq number." + Write-Host -ForegroundColor Magenta $_.Exception.Message + return "sp$number" + } +} + +# remove invalid characters from a filename +function removeInvalidCharacters ([string]$Name) { + $invalidChars = [IO.Path]::GetInvalidFileNameChars() -join '' + $re = "[{0}]" -f [regex]::Escape($invalidChars) + return ($Name -replace $re) +} + +#shortcuts to various sections of CVA file +$mapper = @{ + "Install" = "Install Execution|Install"; + "SilentInstall" = "Install Execution|SilentInstall"; + "Number" = "Softpaq|SoftpaqNumber"; + "Title" = "Software Title|%lang"; + "Description" = "%lang.Software Description|_body"; + "Platforms" = "System Information|%KeyValues(^SysName.*$)"; + "PlatformIDs" = "System Information|%KeyValues(^SysId.*$)"; + "SoftPaqSHA256" = "Softpaq|SoftPaqSHA256"; + "Version" = "General|VendorVersion"; +}; + +#ISO to CVA language mapper +$lang_mapper = @{ + "en" = "us"; +}; + + +# navigate a CVA structure +function descendNodesAndGet ($root,$field,$lang = "en") +{ + $f1 = $mapper[$field].Replace("%lang",$lang_mapper[$lang]) + $f = $f1.Split("|") + $node = $root + + foreach ($c in $f) { + if ($c -match "^%KeyValues\(.*\)$") { return $node } + if ($c -match "^%Keys\(.*\)$") { return $node } + $node = $node[$c] + } + $node +} + +function New-HPPrivateSoftPaqListManifest { + [CmdletBinding()] + param( + [Parameter(Mandatory = $true)] + [PSCustomObject[]]$Softpaqs, + + [Parameter(Mandatory = $false)] + [AllowEmptyString()] + $Name, + + [ValidateSet('win10', 'win11')] + [string]$Os, + + [Parameter(Mandatory = $false)] + [string]$OSVer, + + [Parameter(Mandatory = $false)] + [ValidateSet('JSON','XML')] + $Format = 'JSON' + ) + + $manifest = [PSCustomObject]@{ + Date = $(Get-Date -Format s) + Name = $Name + Os = $Os + OsVer = $OSVer + SoftPaqs = @($Softpaqs) + } + + switch ($Format) { + 'XML' { $result = ConvertTo-Xml -InputObject $manifest -As String -Depth 2 -NoTypeInformation } + 'JSON' { $result = ConvertTo-Json -InputObject $manifest } + } + + return $result +} + +<# +.SYNOPSIS + Creates a Driver Pack for a specified list of SoftPaqs + +.DESCRIPTION + This command creats a Driver Pack for a specified list of SoftPaqs in the following formats: + + - NoCompressedFile - All drivers saved in a regular folder + - ZIP - All drivers compressed in a ZIP file + - WIM - All drivers packed in a Windows Imaging Format + + Please note that this command is called in the New-HPDriverPack command if no errors occurred. + + +.PARAMETER Softpaqs + Specifies a list of SoftPaqs to be included in the Driver Pack. Additionally, this parameter can be specified by piping the output of the Get-SoftpaqList command to this command. + +.PARAMETER Os + Specifies an OS for this command to filter based on. The value must be 'win10' or 'win11'. If not specified, the current platform OS is used. + +.PARAMETER OsVer + Specifies an OS version for this command to filter based on. The value must be a string value specifying the target OS Version (e.g. '1809', '1903', '1909', '2004', '2009', '21H1', '21H2', '22H2', '23H2', '24H2', etc). If this parameter is not specified, the current operating system version is used. + +.PARAMETER Format + Specifies the output format of the Driver Pack. The value must be one of the following values: + - NoCompressedFile + - ZIP + - WIM + +.PARAMETER Path + Specifies an absolute path for the Driver Pack directory. The current directory is used by default if this parameter is not specified. + +.PARAMETER Name + Specifies a custom name for the Driver Pack e.g. DP880D + +.PARAMETER Overwrite + If specified, this command will force overwrite any existing file with the same name during driver pack creation. + +.PARAMETER TempDownloadPath + Specifies an alternate temporary location to download content. Please note that this location and all files inside will be deleted once driver pack is created. If not specified, the default temporary directory path is used. + +.EXAMPLE + Get-SoftpaqList -platform 880D -os 'win10' -osver '21H2' | New-HPBuildDriverPack -Os Win10 -OsVer 21H1 -Name 'DP880D' + +.EXAMPLE + Get-SoftpaqList -platform 880D -os 'win10' -osver '21H2' | New-HPBuildDriverPack -Format Zip -Os Win10 -OsVer 21H1 -Name 'DP880D' + +.EXAMPLE + Get-SoftpaqList -platform 880D -os 'win10' -osver '21H2' | ?{$_.DPB -Like 'true' -and $_.id -notin @('sp137116') -and $_.name -notmatch 'AMD|USB'} | New-HPBuildDriverPack -Path 'C:\MyDriverPack' -Format Zip -Os Win10 -OsVer 21H1 -Name 'DP880D' + +.NOTES + - Admin privilege is required. + - Running this command in PowerShell ISE is not supported and may produce inconsistent results. +#> +function New-HPBuildDriverPack { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/New-HPBuildDriverPack")] + param( + [ValidateNotNullOrEmpty()] + [Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 1)] + [array]$Softpaqs, + + [Parameter(Mandatory = $false, Position = 2)] + [ValidateSet('win10', 'win11')] + [string]$Os, + + [ValidateSet("1809","1903","1909","2004","2009","21H1","21H2","22H2", "23H2", "24H2")] # keep in sync with the Repo module + [Parameter(Mandatory = $false, Position = 3)] + [string]$OSVer, + + [Parameter(Mandatory = $false, Position = 4)] + [System.IO.DirectoryInfo]$Path, + + [Parameter(Mandatory = $false, Position = 5)] + [ValidateSet('wim','zip','NoCompressedFile')] + $Format = 'NoCompressedFile', + + [Parameter(Mandatory = $true, Position = 6)] + [ValidatePattern("^\w{1,20}$")] + [string]$Name, + + [Parameter(Mandatory = $false, Position = 7)] + [switch]$Overwrite, + + [Parameter(Mandatory = $false, Position = 8)] + [System.IO.DirectoryInfo]$TempDownloadPath + ) + BEGIN { + $softpaqsArray = @() + } + PROCESS { + $softpaqsArray += $Softpaqs + } + END { + if (!$Os) { + $Os = Get-HPPrivateCurrentOs + Write-Warning "OS has not been specified, using OS from the current system: $Os" + } + + if (!$OsVer) { + $revision = (GetCurrentOSVer).ToUpper() + if ($revision -notin "1809","1903","1909","2004","2009","21H1","21H2","22H2", "23H2", "24H2") { + throw "OSVer $revision currently not supported" + } + $OsVer = $revision + Write-Warning "OSVer has not been specified, using the OSVer from the current system: $OsVer" + } + + # ZIP and WIM format requires admin privilege + if (-not (Test-IsElevatedAdmin)) { + throw [System.Security.AccessControl.PrivilegeNotHeldException]"elevated administrator" + } + + [System.IO.DirectoryInfo]$cwd = (Get-Location).Path + if (-not $Path) { + $Path = $cwd + } + + if ($TempDownloadPath) { + $downloadPath = $TempDownloadPath + } + else { + $downloadPath = Get-HPPrivateTempFilePath + } + + $finalPath = Join-Path -Path $Path.FullName -ChildPath $Name + + if ($Format -eq 'NoCompressedFile') { + if ([System.IO.Directory]::Exists($finalPath)) { + if ($Overwrite.IsPresent) { + Write-Verbose "$finalPath already exists, overwriting the directory" + Remove-Item -LiteralPath $finalPath -Force -Recurse + } + else { + # find new name that doesn't exist + $existingFileIncrement = 0 + Get-ChildItem -Path "$($finalPath)_*" -Directory | Where-Object { + if ($_.BaseName -Match '_([0-9]+)$') { + [int]$i = [int]($Matches[1]) + if ($i -gt $existingFileIncrement) { + $existingFileIncrement = $i + } + } + } + $existingFileIncrement += 1 + $finalPath = "$($finalPath)_$($existingFileIncrement)" + } + } + $workingPath = $finalPath + } + else { + $workingPath = Get-HPPrivateTempFilePath + } + + Write-Verbose "Working directory: $workingPath" + + if ($PSVersionTable.PSEdition -eq 'Desktop' -and -not $(Test-HPPrivateIsLongPathSupported)) { + Write-Verbose "Unicode paths are required" + if (Test-HPPrivateIsRunningOnISE) { + Write-Warning 'Running this command in PowerShell ISE is not supported and may produce inconsistent results.' + } + $finalPath = Get-HPPrivateUnicodePath -Path $finalPath + $workingPath = Get-HPPrivateUnicodePath -Path $workingPath + $downloadPath = Get-HPPrivateUnicodePath -Path $downloadPath + } + + if ($Format -eq 'NoCompressedFile' -and [System.IO.Directory]::Exists($finalPath)) { + Write-Verbose "$finalPath already exists, deleting the directory" + Remove-Item -Path "$finalPath\*" -Recurse -Force -ErrorAction Ignore + Remove-Item -Path $finalPath -Recurse -Force -ErrorAction Ignore + } + + if (-not [System.IO.Directory]::Exists($Path)) { + throw "The absolute path specified to a directory does not exist: $Path" + } + + Write-Verbose "Creating directory: $workingPath" + [System.IO.Directory]::CreateDirectory($workingPath) | Out-Null + if (-not [System.IO.Directory]::Exists($workingPath)) { + throw "An error occurred while creating directory $workingPath" + } + + Write-Verbose "Creating downloadPath: $downloadPath" + [System.IO.Directory]::CreateDirectory($downloadPath) | Out-Null + if (-not [System.IO.Directory]::Exists($downloadPath)) { + throw "An error occurred while creating directory $downloadPath" + } + + $manifestPath = [IO.Path]::Combine($workingPath, 'manifest') + Write-Verbose "Creating manifest file: $manifestPath.json" + New-HPPrivateSoftPaqListManifest -Softpaqs $softpaqsArray -Name $Name -Os $Os -OsVer $OsVer -Format Json | Out-File -LiteralPath "$manifestPath.json" + Write-Verbose "Creating manifest file: $manifestPath.xml" + New-HPPrivateSoftPaqListManifest -Softpaqs $softpaqsArray -Name $Name -Os $Os -OsVer $OsVer -Format XML | Out-File -LiteralPath "$manifestPath.xml" + + foreach ($ientry in $softpaqsArray) { + Write-Verbose "Processing $($ientry.id)" + $url = $ientry.url -Replace "/$($ientry.id).exe$",'' + if (-not ($url -like 'https://*')) { + $url = "https://$url" + } + try { + $metadata = Get-SoftpaqMetadata -Number $ientry.id -MaxRetries 3 -Url $url + } + catch { + Write-Verbose $_.Exception.Message + Write-Warning "$($ientry.id) metadata was not found or the SoftPaq is obsolete. This will not be included in the package." + continue + } + + if ($metadata.ContainsKey('Devices_INFPath')) { + # fix folder naming issue when softpaq name contains '/',(ex. "Intel TXT/ACM" driver) + $downloadFilePath = [IO.Path]::Combine($downloadPath, "$($ientry.id).exe") + Write-Verbose "Downloading SoftPaq $downloadFilePath" + try { + Get-Softpaq -Number $ientry.id -SaveAs $downloadFilePath -MaxRetries 3 -Url $url + } + catch { + Write-Verbose $_.Exception.Message + Write-Warning "$($ientry.id) was not found or the SoftPaq is obsolete. This will not be included in the package." + continue + } + Write-Verbose "Setting current dir to $($downloadPath)" + Set-Location -LiteralPath $downloadPath + $extractFolderName = $ientry.id + Write-Verbose "Extracting SoftPaq $downloadFilePath to .\$extractFolderName" + try { + Start-Process -Wait $downloadFilePath -ArgumentList "-e -f `".\$extractFolderName`"","-s" + } + catch { + Set-Location $cwd + throw + } + Set-Location $cwd + + $OsId = if ($Os -eq 'Win11') { 'W11' } else { 'WT64' } + $fullInfPathName = "$($OsId)_$($OSVer.ToUpper())_INFPath" + if ($metadata.Devices_INFPath.ContainsKey($fullInfPathName)) { + $infPathName = $fullInfPathName + } + else { + # fallback to generic inf path name + $infPathName = "$($OsId)_INFPath" + } + if ($metadata.Devices_INFPath.ContainsKey($infPathName)) { + Write-Verbose "$infPathName selected" + $infPaths = $($metadata.Devices_INFPath[$infPathName]) + $finalExtractFolderName = $ientry.id + $destinationPath = [IO.Path]::Combine($workingPath, $finalExtractFolderName) + $extractPath = [IO.Path]::Combine($downloadPath, $extractFolderName) + [System.IO.Directory]::CreateDirectory($destinationPath) | Out-Null + foreach ($infPath in $infPaths) { + $infPath = $infPath.TrimStart('.\') + $absoluteInfPath = [IO.Path]::Combine($extractPath, $infPath) + Write-Verbose "Copying $absoluteInfPath to $destinationPath" + Copy-Item $absoluteInfPath $destinationPath -Force -Recurse + } + } + else { + Write-Warning "INF path $fullInfPathName missing on $($ientry.id) metadata. This will not be included in the package." + } + } + else { + Write-Warning "$($ientry.id) is not Driver Pack Builder (DPB) compliant. This will not be included in the package." + } + } + Write-Verbose "Removing temporary files $($downloadPath)" + Remove-Item -Path "$downloadPath\*" -Recurse -Force -ErrorAction Ignore + Remove-Item -Path $downloadPath -Recurse -Force -ErrorAction Ignore + + switch ($Format) { + 'zip' { + Write-Verbose "Compressing driver pack to $($Format): $workingPath.zip" + [System.IO.Compression.ZipFile]::CreateFromDirectory($workingPath, "$workingPath.zip") + Remove-Item -Path "$workingPath\*" -Recurse -Force -ErrorAction Ignore + Remove-Item -Path $workingPath -Recurse -Force -ErrorAction Ignore + if ([System.IO.File]::Exists("$finalPath.$Format")) { + if ($Overwrite.IsPresent) { + Write-Verbose "$finalPath.zip already exists, overwriting the file" + Remove-Item -LiteralPath "$($finalPath).$Format" -Force + } + else { + # find new name that doesn't exist + $existingFileIncrement = 0 + Get-ChildItem -Path "$($finalPath)_*.$Format" -File | Where-Object { + if ($_.BaseName -Match '_([0-9]+)$') { + [int]$i = [int]($Matches[1]) + if ($i -gt $existingFileIncrement) { + $existingFileIncrement = $i + } + } + } + $existingFileIncrement += 1 + $finalPath = "$($finalPath)_$($existingFileIncrement)" + } + } + [System.IO.File]::Move("$workingPath.$Format", "$finalPath.$Format") + $resultFile = [System.IO.FileInfo]"$finalPath.$Format" + } + 'wim' { + Write-Verbose "Compressing driver pack to $($Format): $workingPath.$Format" + if ([System.IO.File]::Exists("$workingPath.$Format")) { + # New-WindowsImage will not override existing file + Remove-Item -LiteralPath "$($workingPath).$Format" -Force + } + New-WindowsImage -CapturePath $workingPath -ImagePath "$workingPath.$Format" -CompressionType Max ` + -LogPath $([IO.Path]::Combine($(Get-HPPrivateTempPath), 'DISM.log')) -Name $Name | Out-Null + Remove-Item -Path "$workingPath\*" -Recurse -Force -ErrorAction Ignore + Remove-Item -Path $workingPath -Recurse -Force -ErrorAction Ignore + + if ([System.IO.File]::Exists("$finalPath.$Format")) { + if ($Overwrite.IsPresent) { + Write-Verbose "$finalPath.wim already exists, overwriting the file" + Remove-Item -LiteralPath "$($finalPath).$Format" -Force + } + else { + # find new name that doesn't exist + $existingFileIncrement = 0 + Get-ChildItem -Path "$finalPath*.$Format" | Where-Object { + if ($_.BaseName -Match '_([0-9]+)$') { + [int]$i = [int]($Matches[1]) + if ($i -gt $existingFileIncrement) { + $existingFileIncrement = $i + } + } + } + $existingFileIncrement += 1 + $finalPath = "$($finalPath)_$($existingFileIncrement)" + } + } + [System.IO.File]::Move("$workingPath.$Format", "$finalPath.$Format") + $resultFile = [System.IO.FileInfo]"$finalPath.$Format" + } + default { + $resultFile = [System.IO.DirectoryInfo]$finalPath + } + } + $resultFile + Write-Host "`nDriver Pack created at $($resultFile.FullName)" + } +} + +function Remove-HPPrivateSoftpaqEntries { + [CmdletBinding()] +param( + [Parameter(Mandatory = $true)] $pFullSoftpaqList, + [Parameter(Mandatory = $true)] [array]$pUnselectList, + [Parameter(Mandatory = $true)] [boolean]$pUnselectListAsArg +) + + $l_DPBList = @() # list of drivers that will be selected from the full list + $l_Unselected = @() # list of drivers that were unselected (to display) + for ($i=0;$i -lt $pFullSoftpaqList.Count; $i++ ) { + $iUnselectMatched = $null + # see if the entries contain Softpaqs by name or ID, and remove from list + foreach ( $iList in $pUnselectList ) { + if ( ($pFullSoftpaqList[$i].name -match $iList) -or ($pFullSoftpaqList[$i].id -like $iList) ) { + $iUnselectMatched = $true ; $l_Unselected += $pFullSoftpaqList[$i] + break + } + } + if ( -not $iUnselectMatched ) { $l_DPBList += $pFullSoftpaqList[$i] } + } + + if ($l_Unselected.Count -gt 0) { + Write-Host "Unselected drivers: " + foreach ( $iun in $l_Unselected ) { + Write-Host "`t$($iun.id) $($iun.Name) [$($iun.Category)] $($iun.Version) $($iun.ReleaseDate)" + } + } + + , $l_DPBList +} + +function Remove-HPPrivateOlderSoftpaqEntries { + [CmdletBinding()] +param( + [Parameter(Mandatory = $true)] $pFullSoftpaqList + ) + Write-Host "Removing superseded entries (-RemoveOlder switch option)" + ############################################################################# + # 1. get a list of Softpaqs with multiple entries + $l_TmpList = @() + foreach ( $iEntry in $pFullSoftpaqList ) { + foreach ( $i in $pFullSoftpaqList ) { # search for entries that are same names as $iEntry + if ( ($i.name -match $iEntry.name) -and (-not ($i.id -match $iEntry.id)) -and ($iEntry -notin $l_TmpList)) { + $l_TmpList += $iEntry # found an softpaq name with multiple versions + } + } # foreach ( $i in $pFullSoftpaqList ) + } # foreach ( $iEntry in $pFullSoftpaqList ) + if ($l_TmpList.Count -gt 0) { + Write-Host "These drivers have multiple SoftPaqs (have superseded entries)" + foreach ( $iun in $l_TmpList ) { + Write-Host "`t$($iun.id) $($iun.Name) [$($iun.Category)] $($iun.Version)" + } + } + + ############################################################################# + # 2. from the $lTmpList list, find the latest (highest sp number softpaq) of each + $l_FinalTmpList = @() + + foreach ( $iEntry in $l_TmpList ) { + # get all the entries with the same name + $tmpValue = @() + $tmpValue += $iEntry + foreach ( $i in $l_TmpList ) { + if($iEntry.name -eq $i.name){ + $tmpValue += $i + } + } + + # add highest number to list + $tmpSp = $iEntry.id.substring(2) + $tmpEntry = $iEntry + + foreach($entry in $tmpValue){ + if($entry.id.substring(2) -gt $tmpSp){ + $tmpEntry = $entry + } + } + + # don't add duplicates + if($tmpEntry -notin $l_FinalTmpList){ + $l_FinalTmpList += $tmpEntry + } + } + + if ($l_FinalTmpList.Count -gt 0) { + Write-Host "These SoftPaqs are good - higher SP numbers" + foreach ( $iun in $l_FinalTmpList ) { + Write-Host "`t$($iun.id) $($iun.Name) [$($iun.Category)] $($iun.Version)" + } + } + ############################################################################# + # 3. lastly, remove superseeded drivers from main driver pack list + $l_FinalDPBList = @() + foreach ( $iEntry in $pFullSoftpaqList ) { + if ( $l_TmpList.Count -eq 0 -or ($iEntry.name -notin $l_TmpList.name) -or ($iEntry.id -in $l_FinalTmpList.id) ) { + if ($l_FinalDPBList.Count -eq 0 -or $iEntry.name -notin $l_FinalDPBList.name) { $l_FinalDPBList += $iEntry } + } + } # foreach ( $iEntry in $lDPBList ) + + , $l_FinalDPBList # return list of Softpaqs without the superseded Softpaqs +} + +<# +.SYNOPSIS + Creates a Driver Pack for a specified platform ID + +.DESCRIPTION + This command retrieves SoftPaqs for a specified platform ID to build a Driver Pack in the following formats: + + - NoCompressedFile - All drivers saved in a regular folder + - ZIP - All drivers compressed in a ZIP file + - WIM - All drivers packed in a Windows Imaging Format + + Please note that this command executes the New-HPBuildDriverPack command if no errors occurred. + +.PARAMETER Platform + Specfies a platform ID to retrieve a list of associated SoftPaqs. If not available, the current platform ID is used. + +.PARAMETER Os + Specifies an OS for this command to filter based on. The value must be 'win10' or 'win11'. If not specified, the current platform OS is used. + +.PARAMETER OsVer + Specifies an OS version for this command to filter based on. The value must be a string value specifying the target OS Version (e.g. '1809', '1903', '1909', '2004', '2009', '21H1', '21H2', '22H2', '23H2', '24H2', etc). If this parameter is not specified, the current operating system version is used. + +.PARAMETER Format + Specifies the output format of the Driver Pack. The value must be one of the following values: + - NoCompressedFile + - ZIP + - WIM + +.PARAMETER WhatIf + If specified, the Driver Pack is not created, and instead, the list of SoftPaqs that would be included in the Driver Pack is displayed. + +.PARAMETER RemoveOlder + If specified, older versions of the same SoftPaq are not included in the Driver Pack. + +.PARAMETER UnselectList + Specifies a list of SoftPaq numbers and SoftPaq names to not be included in the Driver Pack. A partial name can be specified. Examples include 'Docks', 'USB', 'sp123456'. + +.PARAMETER Path + Specifies an absolute path for the Driver Pack directory. The current directory is used by default if this parameter is not specified. + +.PARAMETER Url + Specifies an alternate location for the HP Image Assistant (HPIA) Reference files. This URL must be an https URL. The Reference files are expected to be at the location pointed to by this URL inside a directory named after the platform ID you want a SoftPaq list for. + For example, if you want to point to 83b2 Win10 OSVer 2009 reference files, the New-HPDriverPack command will try to find them in this directory structure: $ReferenceUrl/83b2/83b2_64_10.0.2009.cab. + If not specified, 'https://hpia.hpcloud.hp.com/ref/' is used by default, and fallback is set to 'https://ftp.hp.com/pub/caps-softpaq/cmit/imagepal/ref/'. + +.PARAMETER Overwrite + If specified, this command will force overwrite any existing file with the same name during driver pack creation. + +.PARAMETER TempDownloadPath + Specifies an alternate temporary location to download content. Please note that this location and all files inside will be deleted once driver pack is created. If not specified, the default temporary directory path is used. + + .EXAMPLE + New-HPDriverPack -WhatIf + +.EXAMPLE + New-HPDriverPack -Platform 880D -OS 'win10' -OSVer '21H2' -Path 'C:\MyDriverPack' -Unselectlist 'sp96688','AMD','USB' -RemoveOlder -WhatIf + +.EXAMPLE + New-HPDriverPack -Platform 880D -OS 'win10' -OSVer '21H2' -Path 'C:\MyDriverPack' -Unselectlist 'sp96688','AMD','USB' -RemoveOlder -Format Zip + +.NOTES + - Admin privilege is required. + - Running this command in PowerShell ISE is not supported and may produce inconsistent results. +#> +function New-HPDriverPack { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/New-HPDriverPack",SupportsShouldProcess=$true)] + param( + [Parameter(Mandatory = $false, Position = 1)] + [ValidatePattern("^[a-fA-F0-9]{4}$")] + [string]$Platform, + + [Parameter(Mandatory = $false, Position = 2 )] + [ValidateSet('win10', 'win11')] + [string]$Os, + + [ValidateSet("1809","1903","1909","2004","2009","21H1","21H2","22H2", "23H2", "24H2")] # keep in sync with the Repo module + [Parameter(Mandatory = $false, Position = 3 )] + [string]$OSVer, + + [Parameter(Mandatory = $false, Position = 4 )] + [System.IO.DirectoryInfo]$Path, + + [Parameter(Mandatory = $false, Position = 5 )] + [array]$UnselectList, + + [Parameter(Mandatory = $false, Position = 6 )] + [switch]$RemoveOlder = $false, + + [Parameter( Mandatory = $false, Position = 7 )] + [ValidateSet('NoCompressedFile','zip','wim')] + [string]$Format='NoCompressedFile', + + [Parameter(Mandatory = $false, Position = 8)] + [string]$Url, + + [Parameter(Mandatory = $false, Position = 9)] + [switch]$Overwrite, + + [Parameter(Mandatory = $false, Position = 10)] + [System.IO.DirectoryInfo]$TempDownloadPath + ) + + # 7zip and Win format require admin privilege + if (-not (Test-IsElevatedAdmin)) { + throw [System.Security.AccessControl.PrivilegeNotHeldException]"elevated administrator" + } + + # only allow https or file paths with or without file:// URL prefix + if ($Url -and -not ($Url.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($Url) -or $Url.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if (!$Platform) { + $Platform = Get-HPDeviceProductID + } + + if (!$Os) { + $Os = Get-HPPrivateCurrentOs + } + + if (!$OsVer) { + $revision = (GetCurrentOSVer).ToUpper() + if ($revision -notin "1809","1903","1909","2004","2009","21H1","21H2","22H2", "23H2", "24H2") { + throw "OSVer $revision currently not supported" + } + $OsVer = $revision + } + + $bitness = 64 + + Write-Host "Creating Driver Pack for Platform $Platform, $Os-$OsVer $($bitness)b" + + $params = @{ + Platform = $Platform + Os = $Os + OsVer = $OsVer + Bitness = $bitness + MaxRetries = 3 + } + if ($Url) { + $params.Url = $Url + } + + try { + [array]$lFullDPBList = Get-SoftpaqList @params -Verbose:$VerbosePreference -AddHttps | Where-Object { ($_.DPB -like 'true') } + } + catch { + Write-Host "SoftPaq list not available for the platform or OS specified" + throw $_.Exception.Message + } + + # remove any Softpaqs matching names in $UnselectList from the returned list + if ($UnselectList -and $UnselectList.Count -gt 0) { + $UnselectListAsArgument = $PSBoundParameters.ContainsKey("UnselectList") + [array]$DPBList = Remove-HPPrivateSoftpaqEntries -pFullSoftpaqList $lFullDPBList -pUnselectList $UnselectList -pUnselectListAsArg $UnselectListAsArgument + } + else { + [array]$DPBList = $lFullDPBList + } + + # remove any Softpaqs matching names in $UnselectList from the returned list + if ($RemoveOlder) { + $FinalListofSoftpaqs = Remove-HPPrivateOlderSoftpaqEntries -pFullSoftpaqList $DPBList + [array]$DPBList = $FinalListofSoftpaqs + } + + if ($DPBList.Count -eq 0) { + Write-Host "Final list of SoftPaqs is empty, no Driver Pack created" + } + else { + Write-Host "Final list of SoftPaqs for Driver Pack" + foreach ($iFinal in $DPBList) { + Write-Host "`t$($iFinal.id) $($iFinal.Name) [$($iFinal.Category)] $($iFinal.Version) $($iFinal.ReleaseDate)" + } + } + + # show which selected drivers contain UWP/appx applications (UWP = true) + $UWPList = @($DPBList | Where-Object { $_.UWP -like 'true' }) + if ($UWPList -and $UWPList.Count -gt 0) { + Write-Host 'The following selected Drivers contain UWP/appx Store apps' + foreach ($iUWP in $UWPList) { + Write-Host "`t$($iUWP.id) $($iUWP.Name) [$($iUWP.Category)] $($iUWP.Version) $($iUWP.ReleaseDate)" + } + } + + # create the driver pack + if ($pscmdlet.ShouldProcess($Platform)) { + if ($DPBList.Count -gt 0) { + $params = @{ + Softpaqs = $DPBList + Name = "DP$Platform" + Format = $Format + Os = $Os + OsVer = $OSVer + TempDownloadPath = $TempDownloadPath + } + if ($Path) { + $params.Path = $Path + } + return New-HPBuildDriverPack @params -Overwrite:$Overwrite + } + } +} + +<# +.SYNOPSIS + Creates a UWP Driver Pack for a specified platform ID + +.DESCRIPTION + This command retrieves SoftPaqs for a specified platform ID to build a UWP Driver Pack in the following formats: + + - NoCompressedFile - All drivers saved in a regular folder + - ZIP - All drivers compressed in a ZIP file + - WIM - All drivers packed in a Windows Imaging Format + +.PARAMETER Platform + Specfies a platform ID to retrieve a list of associated SoftPaqs. If not available, the current platform ID is used. + +.PARAMETER Os + Specifies an OS for this command to filter based on. The value must be 'win10' or 'win11'. If not specified, the current platform OS is used. + +.PARAMETER OsVer + Specifies an OS version for this command to filter based on. The value must be a string value specifying the target OS Version (e.g. '22H2', '23H2', '24H2', etc). If this parameter is not specified, the current operating system version is used. + +.PARAMETER Format + Specifies the output format of the Driver Pack. The value must be one of the following values: + - NoCompressedFile + - ZIP + - WIM + +.PARAMETER WhatIf + If specified, the UWP Driver Pack is not created, and instead, the list of SoftPaqs that would be included in the UWP Driver Pack is displayed. + +.PARAMETER UnselectList + Specifies a list of SoftPaq numbers and SoftPaq names to not be included in the UWP Driver Pack. A partial name can be specified. Examples include 'Docks', 'USB', 'sp123456'. + +.PARAMETER Path + Specifies an absolute path for the UWP Driver Pack directory. The current directory is used by default if this parameter is not specified. + +.PARAMETER Url + Specifies an alternate location for the HP Image Assistant (HPIA) reference files. This URL must be an https URL. The Reference files are expected to be at the location pointed to by this URL inside a directory named after the platform ID you want a SoftPaq list for. If not specified, https://hpia.hpcloud.hp.com/ref is used by default. + + For example, if you want to point to 8A05 Win11 OSVer 22H2 reference files, New-HPUWPDriverPack will try to find them in this directory structure: $ReferenceUrl/8a05/8a05_64_11.0.22h2.cab + +.PARAMETER Overwrite + If specified, this command will force overwrite any existing file with the same name during UWP Driver Pack creation. + +.PARAMETER TempDownloadPath + Specifies an alternate temporary location to download content. Please note that this location and all files inside will be deleted once driver pack is created. If not specified, the default temporary directory path is used. + +.EXAMPLE + New-HPUWPDriverPack -WhatIf + +.EXAMPLE + New-HPUWPDriverPack -Platform 8A05 -OS 'win11' -OSVer '22H2' -Path 'C:\MyDriverPack' -Unselectlist 'sp140688','Wacom' -WhatIf + +.EXAMPLE + New-HPUWPDriverPack -Platform 8A05 -OS 'win10' -OSVer '22H2' -Path 'C:\MyDriverPack' -Unselectlist 'sp140688','Wacom' -Format ZIP + +.NOTES + - Admin privilege is required. + - Running this command in PowerShell ISE is not supported and may produce inconsistent results. + - Currently only platform generations G8 and above are supported, and operating systems 22H2 and above. +#> +function New-HPUWPDriverPack { + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/New-HPUWPDriverPack",SupportsShouldProcess=$true)] + param( + [Parameter(Mandatory = $false, Position = 1)] + [ValidatePattern("^[a-fA-F0-9]{4}$")] + [string]$Platform, + + [Parameter(Mandatory = $false, Position = 2 )] + [ValidateSet('win10', 'win11')] + [string]$Os, + + [ValidateSet("22H2", "23H2", "24H2")] # keep in sync with the Repo module, but only 22H2 and above are supported + [Parameter(Mandatory = $false, Position = 3 )] + [string]$OSVer, + + [Parameter(Mandatory = $false, Position = 4 )] + [System.IO.DirectoryInfo]$Path, + + [Parameter(Mandatory = $false, Position = 5 )] + [array]$UnselectList, + + [Parameter( Mandatory = $false, Position = 6 )] + [ValidateSet('NoCompressedFile','ZIP','WIM')] + [string]$Format='NoCompressedFile', + + [Parameter(Mandatory = $false, Position = 7)] + [string]$Url = "https://hpia.hpcloud.hp.com/ref", + + [Parameter(Mandatory = $false, Position = 8)] + [switch]$Overwrite, + + [Parameter(Mandatory = $false, Position = 9)] + [System.IO.DirectoryInfo]$TempDownloadPath + ) + + # 7zip and Win format require admin privilege + if (-not (Test-IsElevatedAdmin)) { + throw [System.Security.AccessControl.PrivilegeNotHeldException]"elevated administrator" + } + + # only allow https or file paths with or without file:// URL prefix + if ($Url -and -not ($Url.StartsWith("https://",$true,$null) -or [System.IO.Directory]::Exists($Url) -or $Url.StartsWith("file://",$true,$null))) { + throw [System.ArgumentException]"Only HTTPS or valid existing directory paths are supported." + } + + if (!$Platform) { + $Platform = Get-HPDeviceProductID + } + + if (!$Os) { + $Os = Get-HPPrivateCurrentOs + } + + if (!$OsVer) { + $revision = (GetCurrentOSVer).ToUpper() + if ($revision -notin "22H2", "23H2", "24H2") { + throw "OSVer $revision currently not supported" + } + $OsVer = $revision + } + + $bitness = 64 + Write-Host "Checking if platform supports UWP Driver Packs: $Platform, $Os-$OsVer $($bitness)b" + + # Check if device is UWP compliant + if ((Get-HPDeviceDetails -Platform $Platform -Url $Url).UWPDriverPackSupport -eq $true) { + Write-Verbose "Platform $Platform is supported" + } + else { + throw "Platform $Platform is currently not supported" + } + + Write-Host "Creating UWP Driver Pack for Platform $Platform, $Os-$OsVer $($bitness)b" + $params = @{ + Platform = $Platform + Os = $Os + OsVer = $OsVer + Bitness = $bitness + MaxRetries = 3 + } + + try { + [array]$uwpFullList = Get-SoftpaqList @params -Url $Url -Verbose:$VerbosePreference -AddHttps -Category Driver | Where-Object { ($_.DPB -like 'true' -and $_.UWP -like 'true') } + } + catch { + Write-Host "SoftPaq list not available for the platform or OS specified" + throw $_.Exception.Message + } + + # Remove any Softpaqs matching names in $UnselectList from the returned list + if ($UnselectList -and $UnselectList.Count -gt 0) { + $UnselectListAsArgument = $PSBoundParameters.ContainsKey("UnselectList") + [array]$UWPList = Remove-HPPrivateSoftpaqEntries -pFullSoftpaqList $uwpFullList -pUnselectList $UnselectList -pUnselectListAsArg $UnselectListAsArgument + } + else { + [array]$UWPList = $uwpFullList + } + + Write-Host "Final list of SoftPaqs for UWP Driver Pack" + foreach ($sp in $UWPList) { + Write-Host "`t$($sp.id) $($sp.Name) [$($sp.Category)] $($sp.Version) $($sp.ReleaseDate)" + } + + # create the driver pack + if ($pscmdlet.ShouldProcess($Platform)) { + if ($UWPList.Count -gt 0) { + $params = @{ + Softpaqs = $UWPList + Name = "UWP$Platform" + Format = $Format + Os = $Os + OsVer = $OSVer + TempDownloadPath = $TempDownloadPath + } + if ($Path) { + $params.Path = $Path + } + return New-HPPrivateBuildUWPDriverPack @params -Overwrite:$Overwrite + } + } +} + +function New-HPPrivateBuildUWPDriverPack { + [CmdletBinding()] + param( + [ValidateNotNullOrEmpty()] + [Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 1)] + [array]$Softpaqs, + + [Parameter(Mandatory = $false, Position = 2)] + [ValidateSet('win10', 'win11')] + [string]$Os, + + [ValidateSet("22H2", "23H2", "24H2")] # keep in sync with the Repo module, but only 22H2 and above are supported + [Parameter(Mandatory = $false, Position = 3)] + [string]$OSVer, + + [Parameter(Mandatory = $false, Position = 4)] + [System.IO.DirectoryInfo]$Path, + + [Parameter(Mandatory = $false, Position = 5)] + [ValidateSet('wim','zip','NoCompressedFile')] + $Format = 'NoCompressedFile', + + [Parameter(Mandatory = $true, Position = 6)] + [ValidatePattern("^\w{1,20}$")] + [string]$Name, + + [Parameter(Mandatory = $false, Position = 7)] + [switch]$Overwrite, + + [Parameter(Mandatory = $false, Position = 8)] + [System.IO.DirectoryInfo]$TempDownloadPath + ) + BEGIN { + $softpaqsArray = @() + } + PROCESS { + $softpaqsArray += $Softpaqs + } + END { + if (!$Os) { + $Os = Get-HPPrivateCurrentOs + } + + if (!$OsVer) { + $revision = (GetCurrentOSVer).ToUpper() + if ($revision -notin "22H2", "23H2", "24H2") { + throw "OSVer $revision currently not supported" + } + $OsVer = $revision + } + + # ZIP and WIM format requires admin privilege + if (-not (Test-IsElevatedAdmin)) { + throw [System.Security.AccessControl.PrivilegeNotHeldException]"elevated administrator" + } + + [System.IO.DirectoryInfo]$pwd = (Get-Location).Path + if (-not $Path) { + $Path = $pwd + } + + if ($TempDownloadPath) { + $downloadPath = $TempDownloadPath + } + else { + $downloadPath = Get-HPPrivateTempFilePath + } + + $finalPath = Join-Path -Path $Path.FullName -ChildPath $Name + + if ($Format -eq 'NoCompressedFile') { + if ([System.IO.Directory]::Exists($finalPath)) { + if ($Overwrite.IsPresent) { + Write-Verbose "$finalPath already exists, overwriting the directory" + Remove-Item -LiteralPath $finalPath -Force -Recurse + } + else { + # find new name that doesn't exist + $existingFileIncrement = 0 + Get-ChildItem -Path "$($finalPath)_*" -Directory | Where-Object { + if ($_.BaseName -Match '_([0-9]+)$') { + [int]$i = [int]($Matches[1]) + if ($i -gt $existingFileIncrement) { + $existingFileIncrement = $i + } + } + } + $existingFileIncrement += 1 + $finalPath = "$($finalPath)_$($existingFileIncrement)" + } + } + $workingPath = $finalPath + } + else { + $workingPath = Get-HPPrivateTempFilePath + } + + Write-Verbose "Working directory: $workingPath" + + if ($PSVersionTable.PSEdition -eq 'Desktop' -and -not $(Test-HPPrivateIsLongPathSupported)) { + Write-Verbose "Unicode paths are required" + if (Test-HPPrivateIsRunningOnISE) { + Write-Warning 'Running this command in PowerShell ISE is not supported and may produce inconsistent results.' + } + $finalPath = Get-HPPrivateUnicodePath -Path $finalPath + $workingPath = Get-HPPrivateUnicodePath -Path $workingPath + $downloadPath = Get-HPPrivateUnicodePath -Path $downloadPath + } + + if ($Format -eq 'NoCompressedFile' -and [System.IO.Directory]::Exists($finalPath)) { + Write-Verbose "$finalPath already exists, deleting the directory" + Remove-Item -Path "$finalPath\*" -Recurse -Force -ErrorAction Ignore + Remove-Item -Path $finalPath -Recurse -Force -ErrorAction Ignore + } + + if (-not [System.IO.Directory]::Exists($Path)) { + throw "The absolute path specified to a directory does not exist: $Path" + } + + Write-Verbose "Creating directory: $workingPath" + [System.IO.Directory]::CreateDirectory($workingPath) | Out-Null + if (-not [System.IO.Directory]::Exists($workingPath)) { + throw "An error occurred while creating directory $workingPath" + } + + Write-Verbose "Creating downloadPath: $downloadPath" + [System.IO.Directory]::CreateDirectory($downloadPath) | Out-Null + if (-not [System.IO.Directory]::Exists($downloadPath)) { + throw "An error occurred while creating directory $downloadPath" + } + + $manifestPath = [IO.Path]::Combine($workingPath, 'manifest') + Write-Verbose "Creating manifest file: $manifestPath.json" + New-HPPrivateSoftPaqListManifest -Softpaqs $softpaqsArray -Name $Name -Os $Os -OsVer $OsVer -Format Json | Out-File -LiteralPath "$manifestPath.json" + Write-Verbose "Creating manifest file: $manifestPath.xml" + New-HPPrivateSoftPaqListManifest -Softpaqs $softpaqsArray -Name $Name -Os $Os -OsVer $OsVer -Format XML | Out-File -LiteralPath "$manifestPath.xml" + + foreach ($softpaq in $softpaqsArray) { + Write-Verbose "Processing $($softpaq.id)" + $url = $softpaq.url -Replace "/$($softpaq.id).exe$",'' + $downloadFilePath = [IO.Path]::Combine($downloadPath, "$($softpaq.id).exe") + Write-Verbose "Downloading SoftPaq $downloadFilePath" + try { + Get-Softpaq -Number $softpaq.id -SaveAs $downloadFilePath -MaxRetries 3 -Url $url + } + catch { + Write-Verbose $_.Exception.Message + Write-Warning "$($softpaq.id) was not found or the SoftPaq is Obsolete. This will not be included in the package." + continue + } + Write-Verbose "Setting current dir to $($downloadPath)" + Set-Location -LiteralPath $downloadPath + $extractFolderName = $softpaq.id + Write-Verbose "Extracting SoftPaq $downloadFilePath to .\$extractFolderName" + try { + Start-Process -Wait $downloadFilePath -ArgumentList "-e -f `".\$extractFolderName`"","-s" + } + catch { + Set-Location $pwd + throw + } + Set-Location $pwd + + $extractPath = [IO.Path]::Combine($downloadPath, $extractFolderName) + $appPath = [IO.Path]::Combine($extractPath, 'src') + $installAppPath = [IO.Path]::Combine($appPath, 'InstallApp.cmd') + $installAppxPath = [IO.Path]::Combine($appPath, 'appxinst.cmd') + $appPath = [IO.Path]::Combine($appPath, 'App') + $destinationPath = [IO.Path]::Combine($workingPath, $extractFolderName) + $destinationAppPath = [IO.Path]::Combine($destinationPath, 'App') + + if (([System.IO.Directory]::Exists($appPath) -and [System.IO.File]::Exists($installAppPath)) -or + ([System.IO.Directory]::Exists($appPath) -and [System.IO.File]::Exists($installAppxPath))) { + Copy-Item $appPath $destinationAppPath -Force -Recurse + if ([System.IO.File]::Exists($installAppPath)) { + Copy-Item $installAppPath $destinationPath -Force + } + if ([System.IO.File]::Exists($installAppxPath)) { + Copy-Item $installAppxPath $destinationPath -Force + } + } + else { + Write-Warning "Directory $appPath or installers are missing on SoftPaq $($softpaq.id). This will not be included in the package." + } + } + Write-Verbose "Removing temporary files $($downloadPath)" + Remove-Item -Path "$downloadPath\*" -Recurse -Force -ErrorAction Ignore + Remove-Item -Path $downloadPath -Recurse -Force -ErrorAction Ignore + + $assetsPath = [IO.Path]::Combine($PSScriptRoot, 'assets') + $installPath = [IO.Path]::Combine($assetsPath, 'InstallAllApps.cmd') + Copy-Item $installPath $workingPath -Force + + switch ($Format) { + 'zip' { + Write-Verbose "Compressing driver pack to $($Format): $workingPath.zip" + [System.IO.Compression.ZipFile]::CreateFromDirectory($workingPath, "$workingPath.zip") + Remove-Item -Path "$workingPath\*" -Recurse -Force -ErrorAction Ignore + Remove-Item -Path $workingPath -Recurse -Force -ErrorAction Ignore + if ([System.IO.File]::Exists("$finalPath.$Format")) { + if ($Overwrite.IsPresent) { + Write-Verbose "$finalPath.zip already exists, overwriting the file" + Remove-Item -LiteralPath "$($finalPath).$Format" -Force + } + else { + # find new name that doesn't exist + $existingFileIncrement = 0 + Get-ChildItem -Path "$($finalPath)_*.$Format" -File | Where-Object { + if ($_.BaseName -Match '_([0-9]+)$') { + [int]$i = [int]($Matches[1]) + if ($i -gt $existingFileIncrement) { + $existingFileIncrement = $i + } + } + } + $existingFileIncrement += 1 + $finalPath = "$($finalPath)_$($existingFileIncrement)" + } + } + [System.IO.File]::Move("$workingPath.$Format", "$finalPath.$Format") + $resultFile = [System.IO.FileInfo]"$finalPath.$Format" + } + 'wim' { + Write-Verbose "Compressing driver pack to $($Format): $workingPath.$Format" + if ([System.IO.File]::Exists("$workingPath.$Format")) { + # New-WindowsImage will not override existing file + Remove-Item -LiteralPath "$($workingPath).$Format" -Force + } + New-WindowsImage -CapturePath $workingPath -ImagePath "$workingPath.$Format" -CompressionType Max ` + -LogPath $([IO.Path]::Combine($(Get-HPPrivateTempPath), 'DISM.log')) -Name $Name | Out-Null + Remove-Item -Path "$workingPath\*" -Recurse -Force -ErrorAction Ignore + Remove-Item -Path $workingPath -Recurse -Force -ErrorAction Ignore + + if ([System.IO.File]::Exists("$finalPath.$Format")) { + if ($Overwrite.IsPresent) { + Write-Verbose "$finalPath.wim already exists, overwriting the file" + Remove-Item -LiteralPath "$($finalPath).$Format" -Force + } + else { + # find new name that doesn't exist + $existingFileIncrement = 0 + Get-ChildItem -Path "$finalPath*.$Format" | Where-Object { + if ($_.BaseName -Match '_([0-9]+)$') { + [int]$i = [int]($Matches[1]) + if ($i -gt $existingFileIncrement) { + $existingFileIncrement = $i + } + } + } + $existingFileIncrement += 1 + $finalPath = "$($finalPath)_$($existingFileIncrement)" + } + } + [System.IO.File]::Move("$workingPath.$Format", "$finalPath.$Format") + $resultFile = [System.IO.FileInfo]"$finalPath.$Format" + } + default { + $resultFile = [System.IO.DirectoryInfo]$finalPath + } + } + $resultFile + Write-Host "`nUWP Driver Pack created at $($resultFile.FullName)" + } +} +# SIG # Begin signature block +# MIIoHgYJKoZIhvcNAQcCoIIoDzCCKAsCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCPxz8KAoPdg65s +# wo6RMU0vrttpHiIElfsQN2M+tQj5RqCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6jCCGeYCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEILEzmEw9 +# MJ7KLwbvIgLIGqNY7icDeKHxWMx54lnJVJfZMA0GCSqGSIb3DQEBAQUABIIBgFAn +# Jl+lApvP0c2yUDblE4nMQ0d//dJKCg7g1MdYRtU+I8x/bdJbdfbVigW3eCR4b8g1 +# ybOThT2H6721quqmw6+DWuM57BcySKmIFx+Z+/vfSs01MQa38XnwVbnvWdOkaRZM +# ub4Z/l+nU4fxB6Uza096qbX/MrC47llNL1wPHA80nuO2C1q62c5+rru2VPqCShVA +# tFKk+4wAw/svSc93JSGX/MOD/AmdQeVIilMNs53Eg7FpxAGG1e25Fvdhsw+Oubon +# rLXx5W2sCchcmCSjrFBq875TjgKcwV2wn+KD1t+RLsnK3/BlQOUC0p+b09FAa3uM +# XGHrqzPnASU9XnS0EDCmX0UQBwQDvXtO+vkKusyBoNl2Gf2rlcCBcu5EO8SmYiSc +# jBsv7y/T5I+FzKs5qNlAUoW0RoffKjwQ9WPAbKkjRCWdV18BC1jGxZrnKhehJQPT +# wXI7bHPuPFVa6FQM2KVnEaGiMVZA1qy2x4vjDHtuspZ4HogOMx9AxiLpoqcj1KGC +# F0Awghc8BgorBgEEAYI3AwMBMYIXLDCCFygGCSqGSIb3DQEHAqCCFxkwghcVAgED +# MQ8wDQYJYIZIAWUDBAIBBQAweAYLKoZIhvcNAQkQAQSgaQRnMGUCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCBnA3fm2ITF2zZB7fJxknfBo29ElmuGRtrc +# uWMJPv1zggIRAMUgPhmWKxmkjCsZdzELUFAYDzIwMjQwODI3MTY1NTUwWqCCEwkw +# ggbCMIIEqqADAgECAhAFRK/zlJ0IOaa/2z9f5WEWMA0GCSqGSIb3DQEBCwUAMGMx +# CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMy +# RGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcg +# Q0EwHhcNMjMwNzE0MDAwMDAwWhcNMzQxMDEzMjM1OTU5WjBIMQswCQYDVQQGEwJV +# UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xIDAeBgNVBAMTF0RpZ2lDZXJ0IFRp +# bWVzdGFtcCAyMDIzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo1NF +# hx2DjlusPlSzI+DPn9fl0uddoQ4J3C9Io5d6OyqcZ9xiFVjBqZMRp82qsmrdECmK +# HmJjadNYnDVxvzqX65RQjxwg6seaOy+WZuNp52n+W8PWKyAcwZeUtKVQgfLPywem +# MGjKg0La/H8JJJSkghraarrYO8pd3hkYhftF6g1hbJ3+cV7EBpo88MUueQ8bZlLj +# yNY+X9pD04T10Mf2SC1eRXWWdf7dEKEbg8G45lKVtUfXeCk5a+B4WZfjRCtK1ZXO +# 7wgX6oJkTf8j48qG7rSkIWRw69XloNpjsy7pBe6q9iT1HbybHLK3X9/w7nZ9MZll +# R1WdSiQvrCuXvp/k/XtzPjLuUjT71Lvr1KAsNJvj3m5kGQc3AZEPHLVRzapMZoOI +# aGK7vEEbeBlt5NkP4FhB+9ixLOFRr7StFQYU6mIIE9NpHnxkTZ0P387RXoyqq1AV +# ybPKvNfEO2hEo6U7Qv1zfe7dCv95NBB+plwKWEwAPoVpdceDZNZ1zY8SdlalJPrX +# xGshuugfNJgvOuprAbD3+yqG7HtSOKmYCaFxsmxxrz64b5bV4RAT/mFHCoz+8LbH +# 1cfebCTwv0KCyqBxPZySkwS0aXAnDU+3tTbRyV8IpHCj7ArxES5k4MsiK8rxKBMh +# SVF+BmbTO77665E42FEHypS34lCh8zrTioPLQHsCAwEAAaOCAYswggGHMA4GA1Ud +# DwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATAfBgNVHSMEGDAWgBS6 +# FtltTYUvcyl2mi91jGogj57IbzAdBgNVHQ4EFgQUpbbvE+fvzdBkodVWqWUxo97V +# 40kwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp +# Z2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNybDCB +# kAYIKwYBBQUHAQEEgYMwgYAwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj +# ZXJ0LmNvbTBYBggrBgEFBQcwAoZMaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t +# L0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNy +# dDANBgkqhkiG9w0BAQsFAAOCAgEAgRrW3qCptZgXvHCNT4o8aJzYJf/LLOTN6l0i +# kuyMIgKpuM+AqNnn48XtJoKKcS8Y3U623mzX4WCcK+3tPUiOuGu6fF29wmE3aEl3 +# o+uQqhLXJ4Xzjh6S2sJAOJ9dyKAuJXglnSoFeoQpmLZXeY/bJlYrsPOnvTcM2Jh2 +# T1a5UsK2nTipgedtQVyMadG5K8TGe8+c+njikxp2oml101DkRBK+IA2eqUTQ+OVJ +# dwhaIcW0z5iVGlS6ubzBaRm6zxbygzc0brBBJt3eWpdPM43UjXd9dUWhpVgmagNF +# 3tlQtVCMr1a9TMXhRsUo063nQwBw3syYnhmJA+rUkTfvTVLzyWAhxFZH7doRS4wy +# w4jmWOK22z75X7BC1o/jF5HRqsBV44a/rCcsQdCaM0qoNtS5cpZ+l3k4SF/Kwtw9 +# Mt911jZnWon49qfH5U81PAC9vpwqbHkB3NpE5jreODsHXjlY9HxzMVWggBHLFAx+ +# rrz+pOt5Zapo1iLKO+uagjVXKBbLafIymrLS2Dq4sUaGa7oX/cR3bBVsrquvczro +# SUa31X/MtjjA2Owc9bahuEMs305MfR5ocMB3CtQC4Fxguyj/OOVSWtasFyIjTvTs +# 0xf7UGv/B3cfcZdEQcm4RtNsMnxYL2dHZeUbc7aZ+WssBkbvQR7w8F/g29mtkIBE +# r4AQQYowggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqGSIb3DQEB +# CwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNV +# BAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQg +# Um9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMxCzAJBgNV +# BAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNl +# cnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggIi +# MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXHJQPE8pE3 +# qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMfUBMLJnOW +# bfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w1lbU5ygt +# 69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRktFLydkf3 +# YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYbqMFkdECn +# wHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUmcJgmf6Aa +# RyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP65x9abJTy +# UpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzKQtwYSH8U +# NM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo80VgvCON +# WPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjBJgj5FBAS +# A31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXcheMBK9Rp61 +# 03a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAd +# BgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF +# BwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln +# aWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJo +# dHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy +# bDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQEL +# BQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd4ksp+3CK +# Daopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiCqBa9qVbP +# FXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl/Yy8ZCaH +# bJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeCRK6ZJxur +# JB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYTgAnEtp/N +# h4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/a6fxZsNB +# zU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37xJV77Qpf +# MzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmLNriT1Oby +# F5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0YgkPCr2B +# 2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJRyvmfxqk +# hQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIFjTCCBHWg +# AwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +# EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +# cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcN +# MjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEVMBMG +# A1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +# HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqGSIb3DQEB +# AQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +# pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+ +# n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYykt +# zuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw +# 2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6Qu +# BX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC +# 5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK +# 3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3 +# IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEP +# lAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98 +# THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t9dmpsh3l +# GwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8w +# DgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0 +# cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0 +# cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MEUGA1Ud +# HwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz +# c3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAowCDAGBgRVHSAAMA0GCSqGSIb3DQEB +# DAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9mqyhhyzshV6pGrsi+IcaaVQi +# 7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxSA8hO0Cre+i1Wz/n096wwepqL +# sl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE1Od/6Fmo8L8vC6bp8jQ87PcDx4eo +# 0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSMb++hUD38dglohJ9vytsgjTVg +# HAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbObyMt9H5xaiNrIv8SuFQtJ37YOtnw +# toeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMYIDdjCCA3ICAQEwdzBjMQswCQYDVQQG +# EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0 +# IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAFRK/z +# lJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUAoIHRMBoGCSqGSIb3DQEJAzENBgsq +# hkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwODI3MTY1NTUwWjArBgsqhkiG +# 9w0BCRACDDEcMBowGDAWBBRm8CsywsLJD4JdzqqKycZPGZzPQDAvBgkqhkiG9w0B +# CQQxIgQgxO3Sfd9+9Q/MiABasqLZt+crDQH3j2hcu+sxw1BwYh8wNwYLKoZIhvcN +# AQkQAi8xKDAmMCQwIgQg0vbkbe10IszR1EBXaEE2b4KK2lWarjMWr00amtQMeCgw +# DQYJKoZIhvcNAQEBBQAEggIAdnNq8SGuaELHwveUgY8wD05FyLBq1tYdBDf7qhQj +# swrL6932tBZx3mAS/gxe48E9J6rMnM/HyQa8mTgcnWqix9Tqkvo1CsD+4hic7q5H +# JQkFszT2b7+V55haFf9ApnUg0U6V+jnNspX7ER5VjUESXvsv3YVg0stejEGQJWrr +# VvrtSE/CqVxteIt0tDXpXSPWHa2Femw59/OCa9uwYbG/PbZAYoRzuv4fTSIeACDl +# 7juZ9Mz8VkQFZEDy2nEsKXjGa2wuFjWrCHSJocP1ksPZpwaMhuTijLLgfTVSAsew +# dWrkb6F5DKPPoKaEGEL9DzMKOuc1wDqhkuTcGYwUJDYbf3Ha8PEFo6xJEAMMREf/ +# OxQGLcvS2z79UJ0IWiL2ccKj4RT17wt6tg/kw6Fz80ezWaIV8STG7ljQi9fR+i8s +# nSelvxqlHsiGdxn6fxGP1LCZY2ElC2dWLJI5t78yGxDNlGToveoocLETAHd2OcOW +# oIEAjfG9yU/Apj4Ua6nKL8zUUp7bnNDYGK/6uP5J/bsyz5PnNWOkWzLOUFdSSc7j +# W7DoSCvKQ+nX0iiTPFU9ZDJzFE8gb3OQX8WcFI3uqQP1+wZZnfk7jXZ1HvCfA7Hx +# XYCRMCnBPMCIdrRpkbNMEyKe7Z6d6yxW2qFlhUBC18VNFVU1yq2RX+qKTo9FX5q+ +# pEU= +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Softpaq/assets/InstallAllApps.cmd b/Bios-Update-HP-v2.0/module/HP.Softpaq/assets/InstallAllApps.cmd new file mode 100644 index 0000000..4b125ed --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Softpaq/assets/InstallAllApps.cmd @@ -0,0 +1,93 @@ +@echo off +set errcode=0 + +if [%1]==[] ( + set TargetImage=/online + set OSDriveLetter=%SystemDrive% +) else ( + set TargetImage=/image:%1 + set OSDriveLetter=%~d1 +) + +rem +rem Loggings of the UWP installation are captured in these logs for debugging purpose +rem +set Log_Folder=%OSDriveLetter%\ProgramData\HP\logs\UWP +if not exist "%Log_Folder%" md "%Log_Folder%" + +set ALLAPPS_Log=%Log_Folder%\_InstallAllApps.log + +echo. >> "%ALLAPPS_Log%" +echo ^>^> %~f0 >> "%ALLAPPS_Log%" +echo ^>^> %date% %time% >> "%ALLAPPS_Log%" +echo. >> "%ALLAPPS_Log%" + +rem +rem Retrieve list of installed provisioned appx packages before UWP Pack installation +rem +echo *dism %TargetImage% /get-provisionedappxpackages >> "%ALLAPPS_Log%" +dism %TargetImage% /get-provisionedappxpackages >> "%ALLAPPS_Log%" 2>&1 +echo. >> "%ALLAPPS_Log%" + +rem +rem Search for and install individual UWP app in the pack +rem +echo *dir /s /b "%~dp0installapp.cmd" >> "%ALLAPPS_Log%" +dir /s /b "%~dp0installapp.cmd" >> "%ALLAPPS_Log%" 2>&1 + +setlocal ENABLEDELAYEDEXPANSION + +for /f "tokens=*" %%i in ('dir /s /b "%~dp0installapp.cmd"') do ( + echo Running "%%i"... >> "%ALLAPPS_Log%" + call "%%i" %1 + if errorlevel 1 ( + echo ***ERROR*** Failed to run "%%i", error=!errorlevel!. >> "%ALLAPPS_Log%" + if !errcode! equ 0 set errcode=!errorlevel! + ) +) +echo If file not found appears that means this SoftPaq is utilizing appxinst.cmd. >> "%ALLAPPS_Log%" +echo If file not found appears that means this SoftPaq is utilizing appxinst.cmd. + +endlocal & set errcode=%errcode% + +echo errcode=%errcode% >> "%ALLAPPS_Log%" + +echo *dir /s /b "%~dp0appxinst.cmd" >> "%ALLAPPS_Log%" +dir /s /b "%~dp0appxinst.cmd" >> "%ALLAPPS_Log%" 2>&1 + +setlocal ENABLEDELAYEDEXPANSION + +for /f "tokens=*" %%i in ('dir /s /b "%~dp0appxinst.cmd"') do ( + echo Running "%%i"... >> "%ALLAPPS_Log%" + call "%%i" %1 + if errorlevel 1 ( + echo ***ERROR*** Failed to run "%%i", error=!errorlevel!. >> "%ALLAPPS_Log%" + if !errcode! equ 0 set errcode=!errorlevel! + ) +) +echo If file not found appears that means this SoftPaq is utilizing installapp.cmd. >> "%ALLAPPS_Log%" +echo If file not found appears that means this SoftPaq is utilizing installapp.cmd. + +endlocal & set errcode=%errcode% + +echo errcode=%errcode% >> "%ALLAPPS_Log%" + + +:end_InstallAllApps + +rem +rem Retrieve list of installed provisioned appx packages after UWP Pack installation +rem +echo. >> "%ALLAPPS_Log%" +echo *dism %TargetImage% /get-provisionedappxpackages >> "%ALLAPPS_Log%" +dism %TargetImage% /get-provisionedappxpackages >> "%ALLAPPS_Log%" 2>&1 + +echo. >> "%ALLAPPS_Log%" +echo *exit /b %errcode% >> "%ALLAPPS_Log%" +echo. >> "%ALLAPPS_Log%" +echo ^<^< %~f0 >> "%ALLAPPS_Log%" +echo ^<^< %date% %time% >> "%ALLAPPS_Log%" +echo. >> "%ALLAPPS_Log%" + +exit /b %errcode% + diff --git a/Bios-Update-HP-v2.0/module/HP.Softpaq/license.txt b/Bios-Update-HP-v2.0/module/HP.Softpaq/license.txt new file mode 100644 index 0000000..b93ca37 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Softpaq/license.txt @@ -0,0 +1,248 @@ +End-User License Agreement + +READ CAREFULLY BEFORE USING THIS SOFTWARE + +This End-User license Agreement ("EULA") is a legal agreement +between (a) you (either an individual or a single entity) and (b) HP Inc. +("HP") that governs your use of any Software Product, installed on or +made available by HP for use with your HP product ("HP Product"), that +is not otherwise subject to a separate license agreement between you +and HP or its suppliers. Other software may contain a EULA in its online +documentation. The term "Software Product" means computer software +and may include associated media, printed materials and "online" or +electronic documentation. + +An amendment or addendum to this EULA may accompany the HP +Product. + +RIGHTS IN THE SOFTWARE PRODUCT ARE OFFERED ONLY ON THE +CONDITION THAT YOU AGREE TO ALL TERMS AND CONDITIONS OF +THIS EULA. BY INSTALLING, COPYING, DOWNLOADING, OR +OTHERWISE USING THE SOFTWARE PRODUCT, YOU AGREE TO BE +BOUND BY THE TERMS OF THIS EULA. IF YOU DO NOT ACCEPT THESE +LICENSE TERMS, YOUR SOLE REMEDY IS TO RETURN THE ENTIRE +UNUSED PRODUCT (HARDWARE AND SOFTWARE) WITHIN 14 DAYS +FOR A REFUND SUBJECT TO THE REFUND POLICY OF YOUR PLACE OF +PURCHASE. + +1. GRANT OF LICENSE. HP grants you the following rights provided +you comply with all terms and conditions of this EULA: + +a. Use. You may use the Software Product on a single computer ("Your +Computer"). If the Software Product is provided to you via the internet +and was originally licensed for use on more than one computer, you +may install and use the Software Product only on those computers. You +may not separate component parts of the Software Product for use on +more than one computer. You do not have the right to distribute the +Software Product. You may load the Software Product into Your +Computer's temporary memory (RAM) for purposes of using the +Software Product. + +b. Storage. You may copy the Software Product into the local memory +or storage device of the HP Product. + +c. Copying. You may make archival or back-up copies of the Software +Product, provided the copy contains all of the original Software +Product's proprietary notices and that it is used only for back-up +purposes. + +d. Reservation of Rights. HP and its suppliers reserve all rights not +expressly granted to you in this EULA. + +e. Freeware. Notwithstanding the terms and conditions of this EULA, all +or any portion of the Software Product which constitutes non- +proprietary HP software or software provided under public license by +third parties ("Freeware"), is licensed to you subject to the terms and +conditions of the software license agreement accompanying such +Freeware whether in the form of a discrete agreement, shrink wrap +license or electronic license terms accepted at time of download. Use of +the Freeware by you shall be governed entirely by the terms and +conditions of such license. + +f. Recovery Solution. Any software recovery solution provided with/for +your HP Product, whether in the form of a hard disk drive-based +solution, an external media-based recovery solution (e.g. floppy disk, +CD or DVD) or an equivalent solution delivered in any other form, may +only be used for restoring the hard disk of the HP Product with/for +which the recovery solution was originally purchased. The use of any +Microsoft operating system software contained in such recovery +solution shall be governed by the Microsoft License Agreement. + +2. UPGRADES. To use a Software Product identified as an upgrade, +you must first be licensed for the original Software Product identified +by HP as eligible for the upgrade. After upgrading, you may no longer +use the original Software Product that formed the basis for your +upgrade eligibility. By using the Software Product, you also agree that +HP may automatically access your HP Product when connected to the +internet to check the version or status of certain Software Products and +may automatically download and install upgrades or updates to such +Software Products on to your HP Product to provide new versions or +updates required to maintain the functionality, performance, or security +of the HP Software and your HP Product and facilitate the provision of +support or other services provided to you. In certain cases, and +depending on the type of upgrade or update, notifications will be +provided to you (via pop-up or other means), which may require you to +initiate the upgrade or update. + +3. ADDITIONAL SOFTWARE. This EULA applies to updates or +supplements to the original Software Product provided by HP unless +HP provides other terms along with the update or supplement. In case +of a conflict between such terms, the other terms will prevail. + +4. TRANSFER. + +a. Third Party. The initial user of the Software Product may make a +one-time transfer of the Software Product to another end user. Any +transfer must include all component parts, media, printed materials, +this EULA, and if applicable, the Certificate of Authenticity. The transfer +may not be an indirect transfer, such as a consignment. Prior to the +transfer, the end user receiving the transferred product must agree to +all the EULA terms. Upon transfer of the Software Product, your license +is automatically terminated. + +b. Restrictions. You may not rent, lease or lend the Software Product or +use the Software Product for commercial timesharing or bureau use. +You may not sublicense, assign or transfer the license or Software +Product except as expressly provided in this EULA. + +5. PROPRIETARY RIGHTS. All intellectual property rights in the +Software Product and user documentation are owned by HP or its +suppliers and are protected by law, including but not limited to United +States copyright, trade secret, and trademark law, as well as other +applicable laws and international treaty provisions. You shall not +remove any product identification, copyright notices or proprietary +restrictions from the Software Product. + +6. LIMITATION ON REVERSE ENGINEERING. You may not reverse +engineer, decompile, or disassemble the Software Product, except and +only to the extent that the right to do so is mandated under applicable +law notwithstanding this limitation or it is expressly provided for in this +EULA. + +7. TERM. This EULA is effective unless terminated or rejected. This +EULA will also terminate upon conditions set forth elsewhere in this +EULA or if you fail to comply with any term or condition of this EULA. + +8. CONSENT TO COLLECTION/USE OF DATA. + +a. HP will use cookies and other web technology tools to collect +anonymous technical information related to HP Software and your HP +Product. This data will be used to provide the upgrades and related +support or other services described in Section 2. HP will also collect +personal information including your Internet Protocol address or other +unique identifier information associated with your HP Product and data +provided by you on registration of your HP Product. As well as +providing the upgrades and related support or other services, this data +will be used for sending marketing communications to you (in each +case with your express consent where required by applicable law). +To the extent permitted by applicable law, by accepting these terms +and conditions you consent to the collection and use of anonymous +and personal data by HP, its subsidiaries, and affiliates as described in +this EULA and as further described in HP�s privacy policy +www.hp.com/go/privacy + +b. Collection/Use by Third Parties. Certain software programs included +in your HP Product are provided and separately licensed to you by third +party providers (�Third Party Software�). Third Party Software may be +installed and operational on your HP Product even if you choose not to +activate/purchase such software. Third Party Software may collect and +transmit technical information about your system (i.e., IP address, +unique device identifier, software version installed, etc.) and other +system data. This information is used by the third party to identify +technical system attributes and ensure that the most current version of +the software has been installed on your system. If you do not want the +Third Party Software to collect this technical information or +automatically send you version updates, you should uninstall the +software prior to connecting to the Internet. + +9. DISCLAIMER OF WARRANTIES. TO THE MAXIMUM EXTENT +PERMITTED BY APPLICABLE LAW, HP AND ITS SUPPLIERS PROVIDE THE +SOFTWARE PRODUCT �AS IS� AND WITH ALL FAULTS, AND HEREBY +DISCLAIM ALL OTHER WARRANTIES, GUARANTEES, AND CONDITIONS, +EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT +LIMITED TO, WARRANTIES OF TITLE AND NON-INFRINGEMENT, ANY +IMPLIED WARRANTIES, DUTIES, GUARANTEES, OR CONDITIONS OF +MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A +PARTICULAR PURPOSE, AND OF LACK OF VIRUSES ALL WITH REGARD +TO THE SOFTWARE PRODUCT. Some states/jurisdictions do not allow +exclusion of implied warranties or limitations on the duration of implied +warranties, so the above disclaimer may not apply to you in its entirety. +IN AUSTRALIA AND NEW ZEALAND, THE SOFTWARE COMES WITH +GUARANTEES THAT CANNOT BE EXCLUDED UNDER AUSTRALIAN AND +NEW ZEALAND CONSUMER LAWS. AUSTRALIAN CONSUMERS ARE +ENTITLED TO A REPLACEMENT OR A REFUND FOR A MAJOR FAILURE +AND COMPENSATION FOR OTHER REASONABLY FORESEEABLE LOSS +OR DAMAGE. AUSTRALIAN CONSUMERS ARE ALSO ENTITLED TO +HAVE THE SOFTWARE REPAIRED OR REPLACED IF IT FAILS TO BE OF +ACCEPTABLE QUALITY AND THE FAILURE DOES NOT AMOUNT TO A +MAJOR FAILURE. NEW ZEALAND CONSUMERS WHO ARE PURCHASING +GOODS FOR PERSONAL, DOMESTIC OR HOUSEHOLD USE OR +CONSUMPTION AND NOT FOR THE PURPOSE OF A BUSINESS (�NEW +ZEALAND CONSUMERS�) ARE ENTITLED TO REPAIR, REPLACEMENT OR +REFUND FOR A FAILURE AND COMPENSATION FOR OTHER +REASONABLY FORESEEABLE LOSS OR DAMAGE. + +10. LIMITATION OF LIABILITY. Subject to local law, notwithstanding +any damages that you might incur, the entire liability of HP and any of +its suppliers under any provision of this EULA and your exclusive +remedy for all of the foregoing shall be limited to the greater of the +amount actually paid by you separately for the Software Product or U.S. +$5.00. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN +NO EVENT SHALL HP OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, +INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES +WHATSOEVER, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR +LOSS OF PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR +BUSINESS INTERRUPTION, FOR PERSONAL INJURY, FOR LOSS OF +PRIVACY ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF +OR INABILITY TO USE THE SOFTWARE PRODUCT, OR OTHERWISE IN +CONNECTION WITH ANY PROVISION OF THIS EULA, EVEN IF HP OR +ANY SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES AND EVEN IF THE REMEDY FAILS OF ITS ESSENTIAL +PURPOSE. Some states/jurisdictions do not allow the exclusion or +limitation of incidental or consequential damages, so the above +limitation or exclusion may not apply to you. + +11. U.S. GOVERNMENT CUSTOMERS. Consistent with FAR 12.211 +and 12.212, Commercial Computer Software, Computer Software +Documentation, and Technical Data for Commercial Items are licensed +to the U.S. Government under HP's standard commercial license. + +12. COMPLIANCE WITH EXPORT LAWS. You shall comply with all +laws and regulations of the United States and other countries ("Export +Laws") to assure that the Software Product is not (1) exported, directly +or indirectly, in violation of Export Laws, or (2) used for any purpose +prohibited by Export Laws, including, without limitation, nuclear, +chemical, or biological weapons proliferation. + +13. CAPACITY AND AUTHORITY TO CONTRACT. You represent that +you are of the legal age of majority in your state of residence and, if +applicable, you are duly authorized by your employer to enter into this +contract. + +14. APPLICABLE LAW. This EULA is governed by the laws of the +country in which the equipment was purchased. + +15. ENTIRE AGREEMENT. This EULA (including any addendum or +amendment to this EULA which is included with the HP Product) is the +entire agreement between you and HP relating to the Software Product +and it supersedes all prior or contemporaneous oral or written +communications, proposals and representations with respect to the +Software Product or any other subject matter covered by this EULA. To +the extent the terms of any HP policies or programs for support +services conflict with the terms of this EULA, the terms of this EULA +shall control. + +�Copyright 2018-2024 HP Development Company, L.P.. + +The information contained herein is subject to change without notice. +All other product names mentioned herein may be trademarks of their +respective companies. To the extent permitted by applicable law, the +only warranties for HP products and services are set forth in the express +warranty statements accompanying such products and services. +Nothing herein should be construed as constituting an additional +warranty. To the extent permitted by applicable law, HP shall not be +liable for technical or editorial errors or omissions contained herein. + +First Edition: August 2015 +817678-001 + diff --git a/Bios-Update-HP-v2.0/module/HP.Utility/HP.Utility.psd1 b/Bios-Update-HP-v2.0/module/HP.Utility/HP.Utility.psd1 new file mode 100644 index 0000000..7e932db --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Utility/HP.Utility.psd1 @@ -0,0 +1,266 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + +@{ + + # Script module or binary module file associated with this manifest. + RootModule = 'HP.Utility.psm1' + + # Version number of this module. + #FullModuleVersion = '1.7.2.774' + ModuleVersion = '1.7.2' + + # ID used to uniquely identify this module + GUID = 'E8C64CAB-D4F9-4994-AFC8-3DB040B0AEBE' + + # Author of this module + Author = 'HP Development Company, L.P.' + + # Company or vendor of this module + CompanyName = 'HP Inc' + + # Copyright statement for this module + Copyright = '(C) Copyright 2018-2024 HP Development Company, L.P.' + + + # Description of the functionality provided by this module + Description = 'Public utility module for HP Client Management Script Library' + + # Minimum version of the Windows PowerShell engine required by this module + PowerShellVersion = '5.1' + + PrivateData = @{ + PSData = @{ + LicenseUri = 'https://developers.hp.com/node/11493' + RequireLicenseAcceptance = $true + } # End of PSData hashtable + } # End of PrivateData hashtable + +} + + +# SIG # Begin signature block +# MIIoHQYJKoZIhvcNAQcCoIIoDjCCKAoCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDX4sqNJW579fE6 +# nBFilxZoegZgbEABlD7JlHHABPxpGqCCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6TCCGeUCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIBi55kze +# R/uwqFxplD/nyf83Fg597OThKXNkS26uBwIKMA0GCSqGSIb3DQEBAQUABIIBgBy0 +# f6KA9L1vY7t4TQfT/lm0TVyNo0wOVyNvUrQkc9z53p2oIop1yVwVlQml46hynlsO +# GQmA1nCqHaxgu59DVwOEIaYPgs0PNYGQBLWuQCNyGXoJ0WxDEQfDGUdbYlboT93t +# I194mGTsvo1xwlUcsRZux4e7KKTb0ppoyBrq1DA6y0xzp5jM94HwOdV9vZT14YWW +# UDHzjyGX8HZsVNpR3P3DEypgL2IWZyIheXqIxhJSDWPF2XUc1uSSosmP5ISiMdaW +# 1v/eZaIIhXcVfMb52/BNRbs/b+7LVcte0uQjooOjLbbM3fEMjjlNwgCoBATp/B4b +# eYfp/dpefU3kxftwGtApMwr7dvvpOFeC4Vg8ogGtH76pL9CUpUzYTK2QubxPziYZ +# JPjY5nV5PaT81/B/vfHE75x4k6zrPLUb2EGYWRskvVabrHFNGiRGahnbywG+DCdx +# Ao7HuPuHUzhbX8kxQcGf0Fp+95iC76pseNiqiOPDxBNFReU2SDhRlE3eVhM47qGC +# Fz8wghc7BgorBgEEAYI3AwMBMYIXKzCCFycGCSqGSIb3DQEHAqCCFxgwghcUAgED +# MQ8wDQYJYIZIAWUDBAIBBQAwdwYLKoZIhvcNAQkQAQSgaARmMGQCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCDabvAwEdqHBw9149LRicLHFm6EqqCQHRoN +# 0/QpbcJdJAIQZvdCP1/IPwomz0Ngyvu45hgPMjAyNDA4MjcxNjU1NDlaoIITCTCC +# BsIwggSqoAMCAQICEAVEr/OUnQg5pr/bP1/lYRYwDQYJKoZIhvcNAQELBQAwYzEL +# MAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJE +# aWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBD +# QTAeFw0yMzA3MTQwMDAwMDBaFw0zNDEwMTMyMzU5NTlaMEgxCzAJBgNVBAYTAlVT +# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEgMB4GA1UEAxMXRGlnaUNlcnQgVGlt +# ZXN0YW1wIDIwMjMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjU0WH +# HYOOW6w+VLMj4M+f1+XS512hDgncL0ijl3o7Kpxn3GIVWMGpkxGnzaqyat0QKYoe +# YmNp01icNXG/OpfrlFCPHCDqx5o7L5Zm42nnaf5bw9YrIBzBl5S0pVCB8s/LB6Yw +# aMqDQtr8fwkklKSCGtpqutg7yl3eGRiF+0XqDWFsnf5xXsQGmjzwxS55DxtmUuPI +# 1j5f2kPThPXQx/ZILV5FdZZ1/t0QoRuDwbjmUpW1R9d4KTlr4HhZl+NEK0rVlc7v +# CBfqgmRN/yPjyobutKQhZHDr1eWg2mOzLukF7qr2JPUdvJscsrdf3/Dudn0xmWVH +# VZ1KJC+sK5e+n+T9e3M+Mu5SNPvUu+vUoCw0m+PebmQZBzcBkQ8ctVHNqkxmg4ho +# Yru8QRt4GW3k2Q/gWEH72LEs4VGvtK0VBhTqYggT02kefGRNnQ/fztFejKqrUBXJ +# s8q818Q7aESjpTtC/XN97t0K/3k0EH6mXApYTAA+hWl1x4Nk1nXNjxJ2VqUk+tfE +# ayG66B80mC866msBsPf7Kobse1I4qZgJoXGybHGvPrhvltXhEBP+YUcKjP7wtsfV +# x95sJPC/QoLKoHE9nJKTBLRpcCcNT7e1NtHJXwikcKPsCvERLmTgyyIryvEoEyFJ +# UX4GZtM7vvrrkTjYUQfKlLfiUKHzOtOKg8tAewIDAQABo4IBizCCAYcwDgYDVR0P +# AQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# IAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQYMBaAFLoW +# 2W1NhS9zKXaaL3WMaiCPnshvMB0GA1UdDgQWBBSltu8T5+/N0GSh1VapZTGj3tXj +# STBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln +# aUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3JsMIGQ +# BggrBgEFBQcBAQSBgzCBgDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl +# cnQuY29tMFgGCCsGAQUFBzAChkxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v +# RGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3J0 +# MA0GCSqGSIb3DQEBCwUAA4ICAQCBGtbeoKm1mBe8cI1PijxonNgl/8ss5M3qXSKS +# 7IwiAqm4z4Co2efjxe0mgopxLxjdTrbebNfhYJwr7e09SI64a7p8Xb3CYTdoSXej +# 65CqEtcnhfOOHpLawkA4n13IoC4leCWdKgV6hCmYtld5j9smViuw86e9NwzYmHZP +# VrlSwradOKmB521BXIxp0bkrxMZ7z5z6eOKTGnaiaXXTUOREEr4gDZ6pRND45Ul3 +# CFohxbTPmJUaVLq5vMFpGbrPFvKDNzRusEEm3d5al08zjdSNd311RaGlWCZqA0Xe +# 2VC1UIyvVr1MxeFGxSjTredDAHDezJieGYkD6tSRN+9NUvPJYCHEVkft2hFLjDLD +# iOZY4rbbPvlfsELWj+MXkdGqwFXjhr+sJyxB0JozSqg21Llyln6XeThIX8rC3D0y +# 33XWNmdaifj2p8flTzU8AL2+nCpseQHc2kTmOt44OwdeOVj0fHMxVaCAEcsUDH6u +# vP6k63llqmjWIso765qCNVcoFstp8jKastLYOrixRoZruhf9xHdsFWyuq69zOuhJ +# RrfVf8y2OMDY7Bz1tqG4QyzfTkx9HmhwwHcK1ALgXGC7KP845VJa1qwXIiNO9OzT +# F/tQa/8Hdx9xl0RBybhG02wyfFgvZ0dl5Rtztpn5aywGRu9BHvDwX+Db2a2QgESv +# gBBBijCCBq4wggSWoAMCAQICEAc2N7ckVHzYR6z9KGYqXlswDQYJKoZIhvcNAQEL +# BQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UE +# CxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBS +# b290IEc0MB4XDTIyMDMyMzAwMDAwMFoXDTM3MDMyMjIzNTk1OVowYzELMAkGA1UE +# BhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2Vy +# dCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMaGNQZJs8E9cklRVcclA8TykTep +# l1Gh1tKD0Z5Mom2gsMyD+Vr2EaFEFUJfpIjzaPp985yJC3+dH54PMx9QEwsmc5Zt +# +FeoAn39Q7SE2hHxc7Gz7iuAhIoiGN/r2j3EF3+rGSs+QtxnjupRPfDWVtTnKC3r +# 07G1decfBmWNlCnT2exp39mQh0YAe9tEQYncfGpXevA3eZ9drMvohGS0UvJ2R/dh +# gxndX7RUCyFobjchu0CsX7LeSn3O9TkSZ+8OpWNs5KbFHc02DVzV5huowWR0QKfA +# csW6Th+xtVhNef7Xj3OTrCw54qVI1vCwMROpVymWJy71h6aPTnYVVSZwmCZ/oBpH +# IEPjQ2OAe3VuJyWQmDo4EbP29p7mO1vsgd4iFNmCKseSv6De4z6ic/rnH1pslPJS +# lRErWHRAKKtzQ87fSqEcazjFKfPKqpZzQmiftkaznTqj1QPgv/CiPMpC3BhIfxQ0 +# z9JMq++bPf4OuGQq+nUoJEHtQr8FnGZJUlD0UfM2SU2LINIsVzV5K6jzRWC8I41Y +# 99xh3pP+OcD5sjClTNfpmEpYPtMDiP6zj9NeS3YSUZPJjAw7W4oiqMEmCPkUEBID +# fV8ju2TjY+Cm4T72wnSyPx4JduyrXUZ14mCjWAkBKAAOhFTuzuldyF4wEr1GnrXT +# drnSDmuZDNIztM2xAgMBAAGjggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBS6FtltTYUvcyl2mi91jGogj57IbzAfBgNVHSMEGDAWgBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUH +# AwgwdwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp +# Y2VydC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv +# bS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0 +# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3Js +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsF +# AAOCAgEAfVmOwJO2b5ipRCIBfmbW2CFC4bAYLhBNE88wU86/GPvHUF3iSyn7cIoN +# qilp/GnBzx0H6T5gyNgL5Vxb122H+oQgJTQxZ822EpZvxFBMYh0MCIKoFr2pVs8V +# c40BIiXOlWk/R3f7cnQU1/+rT4osequFzUNf7WC2qk+RZp4snuCKrOX9jLxkJods +# kr2dfNBwCnzvqLx1T7pa96kQsl3p/yhUifDVinF2ZdrM8HKjI/rAJ4JErpknG6sk +# HibBt94q6/aesXmZgaNWhqsKRcnfxI2g55j7+6adcq/Ex8HBanHZxhOACcS2n82H +# hyS7T6NJuXdmkfFynOlLAlKnN36TU6w7HQhJD5TNOXrd/yVjmScsPT9rp/Fmw0HN +# T7ZAmyEhQNC3EyTN3B14OuSereU0cZLXJmvkOHOrpgFPvT87eK1MrfvElXvtCl8z +# OYdBeHo46Zzh3SP9HSjTx/no8Zhf+yvYfvJGnXUsHicsJttvFXseGYs2uJPU5vIX +# mVnKcPA3v5gA3yAWTyf7YGcWoWa63VXAOimGsJigK+2VQbc61RWYMbRiCQ8KvYHZ +# E/6/pNHzV9m8BPqC3jLfBInwAM1dwvnQI38AC+R2AibZ8GV2QqYphwlHK+Z/GqSF +# D/yYlvZVVCsfgPrA8g4r5db7qS9EFUrnEw4d2zc4GqEr9u3WfPwwggWNMIIEdaAD +# AgECAhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYT +# AlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2Vy +# dC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0y +# MjA4MDEwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYD +# VQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAf +# BgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEB +# BQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4Smn +# PVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6f +# qVcWWVVyr2iTcMKyunWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O +# 7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZ +# Vu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4F +# fYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLm +# qaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMre +# Sx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/ch +# srIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+U +# DCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xM +# dT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUb +# AgMBAAGjggE6MIIBNjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAO +# BgNVHQ8BAf8EBAMCAYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRw +# Oi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRz +# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0f +# BD4wPDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNz +# dXJlZElEUm9vdENBLmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEM +# BQADggEBAHCgv0NcVec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLt +# pIh3bb0aFPQTSnovLbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouy +# XtTP0UNEm0Mh65ZyoUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jS +# TEAZNUZqaVSwuKFWjuyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAc +# AgPLILCsWKAOQGPFmCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2 +# h5b9W9FcrBjDTZ9ztwGpn1eqXijiuZQxggN2MIIDcgIBATB3MGMxCzAJBgNVBAYT +# AlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQg +# VHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OU +# nQg5pr/bP1/lYRYwDQYJYIZIAWUDBAIBBQCggdEwGgYJKoZIhvcNAQkDMQ0GCyqG +# SIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNDA4MjcxNjU1NDlaMCsGCyqGSIb3 +# DQEJEAIMMRwwGjAYMBYEFGbwKzLCwskPgl3OqorJxk8ZnM9AMC8GCSqGSIb3DQEJ +# BDEiBCBXq+9Iy13xzV/sPKMwaAC0Op/cfeKGjQVc0sqwBXYLYzA3BgsqhkiG9w0B +# CRACLzEoMCYwJDAiBCDS9uRt7XQizNHUQFdoQTZvgoraVZquMxavTRqa1Ax4KDAN +# BgkqhkiG9w0BAQEFAASCAgAK8rNkhQeCkrlMMyTpA1m9mXVFsdgN9C09uVD47geS +# /EhX/RGR8dUA9W5Hg0E1beEMv08oGvkwZNATNYHZOROcE1uM/Mg98qZjW0m/jUKu +# uG/t8+Yu/WQsVcRqMqlke+WBGGA2eHFnRCJnXQD3JyfvXdPKT3ixBG+MGMTBcbzY +# 7f9kumQeUJ+kE8M1laRC1EjUsPAk2OsoO4TXqk7h/drgEMfHxX4TnWgIAHZ4gIMl +# A69wmj/kazbRWdPaGyLlKQaIZqXTsZa5oTWObwJErfZNlPmHNJfqPV51bH9W6yHn +# DvUHVpH/2ipEsbIa4ELNfG/IkJlLZDiYe146KBzuI3YJYPc3IJPhe9L8xtgEWjEu +# 4s889sTwHoBEsi8lk45pmsuxyfZMFFVdbc6HZmUiYVPMZSBnyRYI41jJ1iCiR9Wa +# Tn4XA37R4lcOCezlqe2Mte24SZdc80Na+HUmqMSRDH24Iw+BhBZ8egCKmpj0aYwf +# 1OCTcHsdX4t/wKZlYuS5aHiJCrLOYVkBFwrFz8DXHd150uCwFX7dst+V1PT4Jri9 +# IslxtqQj9GZxxjz4UYgtV8r+WoawUQum7n3IK0XeYu2v5N+BLjE+Epjz65pzHu52 +# n2K50pQF2lo4AZcBzkk/De4c9ECRx85QwzOBHJlJOhHZ7SjbDzClEzAgKQO6+WKN +# ow== +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Utility/HP.Utility.psm1 b/Bios-Update-HP-v2.0/module/HP.Utility/HP.Utility.psm1 new file mode 100644 index 0000000..3b55aa9 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Utility/HP.Utility.psm1 @@ -0,0 +1,289 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + + + +<# +.SYNOPSIS + Returns true if user is running with elevated privileges + +.DESCRIPTION + This command returns true if the user is running with elevated administrator privileges, otherwise returns false. + +.EXAMPLE + Test-IsElevatedAdmin +#> +function Test-IsElevatedAdmin +{ + [CmdletBinding(HelpUri = "https://developers.hp.com/hp-client-management/doc/Test-IsElevatedAdmin")] + param() + $user = [Security.Principal.WindowsIdentity]::GetCurrent(); + (New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator) +} + +<# +.SYNOPSIS + This is a private command for internal use only. Convert an XML to an indented string document + +.DESCRIPTION + This is a private command for internal use only. This command takes an XML document and returns a prettified text version of the document, suitable for printing or writing to a file. + +.PARAMETER xml + Specifies the XML object to format + +.PARAMETER Indent + Specifies the number of spaces to indent. If not specified, default is 2. + +.EXAMPLE + $xml | Format-XmlToText + +.NOTES + - This is a private function for internal use only +#> +function Format-XmlToText { + [CmdletBinding()] + param( + [Parameter(ValueFromPipeline = $true,Mandatory = $true,Position = 0)] + [xml]$xml, + [Parameter(Mandatory = $false,Position = 1)] + [int]$Indent = 2 + ) + $StringWriter = New-Object System.IO.StringWriter + $XmlWriter = New-Object System.Xml.XmlTextWriter $StringWriter + $xmlWriter.Formatting = 'indented' + $xmlWriter.Indentation = $Indent + $xml.WriteContentTo($XmlWriter) + $XmlWriter.Flush() + $StringWriter.Flush() + $StringWriter.ToString() +} + + +Export-ModuleMember -Function 'Test-*' +Export-ModuleMember -Function 'Format-*' + +# SIG # Begin signature block +# MIIoHgYJKoZIhvcNAQcCoIIoDzCCKAsCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCpbNsddJvRANo0 +# ZcDDQZzna0ihlDcwkeE23k3m4DWzq6CCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6jCCGeYCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIJNfCVaJ +# +5oHGR4nVU6R0Y72lDK4Q4Ep/g6gbaDjlhdLMA0GCSqGSIb3DQEBAQUABIIBgBX3 +# J29ytbRDI7MYo2zurUAtfhFiaIU/XL0rjDQM2lRHCCDDvAmAU/B+pG2Gx/5ftyPF +# gzB0hUCeRrZ7QBB8+v6u9NvCr5471+Zllnbhk2xr54NIfze8c0pN129+eB+0C/MI +# XPfZkUcY1U7BXQnEEYw2h7GnltkH/79lRRseyMSyDjvYBAm/qyc8OaosCwEaJfZe +# 9HIaYvLKA8wpqDWK9d8dhz3Vwnop1qa62tnx6XWUukd/53tkwTb37TLTWDsa5WHT +# 24TVHmTxbKVIP14rsBoL4p07dONiDIKLxvzbGUqE+0yux2wI57l5OK1I9sJCIxMw +# 8LIWUE4yoCRPpGZLmlv+lKrTJW0hD73VLOo85lyp9jc0uh88BtGCf/f/K0zQw9Fd +# AQj5gM2s38rz63of+tpAQFZpsdaocQujV2X/lVosBRfymAmH0RmAHpdprMTC1MgA +# tRL5/sAJ39H7BG080sAVyR64t842ZAQgveOZ/zy9+MiHtqY/N1XfKos66HiEfaGC +# F0Awghc8BgorBgEEAYI3AwMBMYIXLDCCFygGCSqGSIb3DQEHAqCCFxkwghcVAgED +# MQ8wDQYJYIZIAWUDBAIBBQAweAYLKoZIhvcNAQkQAQSgaQRnMGUCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCCM78NwX6rCAKjDgIF4LDrh425HAvbTinFE +# 7gcw8pxnkwIRAJDjRuihDAO8g8pa/nCcMPUYDzIwMjQwODI3MTY1NTUwWqCCEwkw +# ggbCMIIEqqADAgECAhAFRK/zlJ0IOaa/2z9f5WEWMA0GCSqGSIb3DQEBCwUAMGMx +# CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMy +# RGlnaUNlcnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcg +# Q0EwHhcNMjMwNzE0MDAwMDAwWhcNMzQxMDEzMjM1OTU5WjBIMQswCQYDVQQGEwJV +# UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xIDAeBgNVBAMTF0RpZ2lDZXJ0IFRp +# bWVzdGFtcCAyMDIzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo1NF +# hx2DjlusPlSzI+DPn9fl0uddoQ4J3C9Io5d6OyqcZ9xiFVjBqZMRp82qsmrdECmK +# HmJjadNYnDVxvzqX65RQjxwg6seaOy+WZuNp52n+W8PWKyAcwZeUtKVQgfLPywem +# MGjKg0La/H8JJJSkghraarrYO8pd3hkYhftF6g1hbJ3+cV7EBpo88MUueQ8bZlLj +# yNY+X9pD04T10Mf2SC1eRXWWdf7dEKEbg8G45lKVtUfXeCk5a+B4WZfjRCtK1ZXO +# 7wgX6oJkTf8j48qG7rSkIWRw69XloNpjsy7pBe6q9iT1HbybHLK3X9/w7nZ9MZll +# R1WdSiQvrCuXvp/k/XtzPjLuUjT71Lvr1KAsNJvj3m5kGQc3AZEPHLVRzapMZoOI +# aGK7vEEbeBlt5NkP4FhB+9ixLOFRr7StFQYU6mIIE9NpHnxkTZ0P387RXoyqq1AV +# ybPKvNfEO2hEo6U7Qv1zfe7dCv95NBB+plwKWEwAPoVpdceDZNZ1zY8SdlalJPrX +# xGshuugfNJgvOuprAbD3+yqG7HtSOKmYCaFxsmxxrz64b5bV4RAT/mFHCoz+8LbH +# 1cfebCTwv0KCyqBxPZySkwS0aXAnDU+3tTbRyV8IpHCj7ArxES5k4MsiK8rxKBMh +# SVF+BmbTO77665E42FEHypS34lCh8zrTioPLQHsCAwEAAaOCAYswggGHMA4GA1Ud +# DwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATAfBgNVHSMEGDAWgBS6 +# FtltTYUvcyl2mi91jGogj57IbzAdBgNVHQ4EFgQUpbbvE+fvzdBkodVWqWUxo97V +# 40kwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0Rp +# Z2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNybDCB +# kAYIKwYBBQUHAQEEgYMwgYAwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj +# ZXJ0LmNvbTBYBggrBgEFBQcwAoZMaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t +# L0RpZ2lDZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNy +# dDANBgkqhkiG9w0BAQsFAAOCAgEAgRrW3qCptZgXvHCNT4o8aJzYJf/LLOTN6l0i +# kuyMIgKpuM+AqNnn48XtJoKKcS8Y3U623mzX4WCcK+3tPUiOuGu6fF29wmE3aEl3 +# o+uQqhLXJ4Xzjh6S2sJAOJ9dyKAuJXglnSoFeoQpmLZXeY/bJlYrsPOnvTcM2Jh2 +# T1a5UsK2nTipgedtQVyMadG5K8TGe8+c+njikxp2oml101DkRBK+IA2eqUTQ+OVJ +# dwhaIcW0z5iVGlS6ubzBaRm6zxbygzc0brBBJt3eWpdPM43UjXd9dUWhpVgmagNF +# 3tlQtVCMr1a9TMXhRsUo063nQwBw3syYnhmJA+rUkTfvTVLzyWAhxFZH7doRS4wy +# w4jmWOK22z75X7BC1o/jF5HRqsBV44a/rCcsQdCaM0qoNtS5cpZ+l3k4SF/Kwtw9 +# Mt911jZnWon49qfH5U81PAC9vpwqbHkB3NpE5jreODsHXjlY9HxzMVWggBHLFAx+ +# rrz+pOt5Zapo1iLKO+uagjVXKBbLafIymrLS2Dq4sUaGa7oX/cR3bBVsrquvczro +# SUa31X/MtjjA2Owc9bahuEMs305MfR5ocMB3CtQC4Fxguyj/OOVSWtasFyIjTvTs +# 0xf7UGv/B3cfcZdEQcm4RtNsMnxYL2dHZeUbc7aZ+WssBkbvQR7w8F/g29mtkIBE +# r4AQQYowggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqGSIb3DQEB +# CwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNV +# BAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQg +# Um9vdCBHNDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMxCzAJBgNV +# BAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNl +# cnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggIi +# MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXHJQPE8pE3 +# qZdRodbSg9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMfUBMLJnOW +# bfhXqAJ9/UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w1lbU5ygt +# 69OxtXXnHwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRktFLydkf3 +# YYMZ3V+0VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYbqMFkdECn +# wHLFuk4fsbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUmcJgmf6Aa +# RyBD40NjgHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP65x9abJTy +# UpURK1h0QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzKQtwYSH8U +# NM/STKvvmz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo80VgvCON +# WPfcYd6T/jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjBJgj5FBAS +# A31fI7tk42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXcheMBK9Rp61 +# 03a50g5rmQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAd +# BgNVHQ4EFgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF +# BwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln +# aWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJo +# dHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNy +# bDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQEL +# BQADggIBAH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd4ksp+3CK +# Daopafxpwc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiCqBa9qVbP +# FXONASIlzpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl/Yy8ZCaH +# bJK9nXzQcAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeCRK6ZJxur +# JB4mwbfeKuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYTgAnEtp/N +# h4cku0+jSbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/a6fxZsNB +# zU+2QJshIUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37xJV77Qpf +# MzmHQXh6OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmLNriT1Oby +# F5lZynDwN7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0YgkPCr2B +# 2RP+v6TR81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJRyvmfxqk +# hQ/8mJb2VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIFjTCCBHWg +# AwIBAgIQDpsYjvnQLefv21DiCEAYWjANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +# EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +# cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcN +# MjIwODAxMDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEVMBMG +# A1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +# HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqGSIb3DQEB +# AQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +# pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+ +# n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYykt +# zuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw +# 2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6Qu +# BX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC +# 5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK +# 3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3 +# IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEP +# lAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98 +# THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t9dmpsh3l +# GwIDAQABo4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7NfjgtJx +# XWRM3y5nP+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8w +# DgYDVR0PAQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0 +# cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0 +# cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MEUGA1Ud +# HwQ+MDwwOqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFz +# c3VyZWRJRFJvb3RDQS5jcmwwEQYDVR0gBAowCDAGBgRVHSAAMA0GCSqGSIb3DQEB +# DAUAA4IBAQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9mqyhhyzshV6pGrsi+IcaaVQi +# 7aSId229GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxSA8hO0Cre+i1Wz/n096wwepqL +# sl7Uz9FDRJtDIeuWcqFItJnLnU+nBgMTdydE1Od/6Fmo8L8vC6bp8jQ87PcDx4eo +# 0kxAGTVGamlUsLihVo7spNU96LHc/RzY9HdaXFSMb++hUD38dglohJ9vytsgjTVg +# HAIDyyCwrFigDkBjxZgiwbJZ9VVrzyerbHbObyMt9H5xaiNrIv8SuFQtJ37YOtnw +# toeW/VvRXKwYw02fc7cBqZ9Xql4o4rmUMYIDdjCCA3ICAQEwdzBjMQswCQYDVQQG +# EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0 +# IFRydXN0ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAFRK/z +# lJ0IOaa/2z9f5WEWMA0GCWCGSAFlAwQCAQUAoIHRMBoGCSqGSIb3DQEJAzENBgsq +# hkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjQwODI3MTY1NTUwWjArBgsqhkiG +# 9w0BCRACDDEcMBowGDAWBBRm8CsywsLJD4JdzqqKycZPGZzPQDAvBgkqhkiG9w0B +# CQQxIgQgoHtGZskde2BlZfgxYp7arckrs0rQT6rxhBYfgLAO9NswNwYLKoZIhvcN +# AQkQAi8xKDAmMCQwIgQg0vbkbe10IszR1EBXaEE2b4KK2lWarjMWr00amtQMeCgw +# DQYJKoZIhvcNAQEBBQAEggIAccCC2uC3eL9oaBPv5gdMxM1fjEKMDDvLQVtjc6k4 +# RRglfZ/y4FO1wnygD1GvEIa7sZRuwsrSEenWf6XkEppASnL/pvdrKDoRzxe5GRqe +# Pa1JXo5sFxKG2MAb64qTXDrz0yP/xLGVymeeu6eF9WmnRk4yPXCIm/d+Wu7Oc49S +# O/Df4R+PCNEEGQaGerexhQ+83zaiPOcYg557WJyqXb1i1tdFRA3PA57iKJK3Db4Y +# DmLnhlnD6/PJH8WuMep2jFTkHN7vkWWabVy+9toCFGd96+x1pvTUarCmD+7A5YpH +# 3Kc9lI9hw49pbfnoR6QjsXTXfChkE8LSKUsxucoADuDAPRY3pc0DPZOb9na5H2X1 +# DGvfJmW2vr77558/8WFQI4UWU7fp5aXxzfIstlzuuz1fJbzzOSTpAVFYdtlJPHQP +# oW1bngixXPcICbATfdHfTQnfPTpfCkdjthqcRGkp8RuQ7OAaHeWeMmMXMAF6b/8+ +# XUYntmkbhcINp8z0zfKM0CG2kei3dAgCTDoOeJBxjEooDRp5neq0f5Jzrm04PE8V +# LDWwZ/L+I0c04WdkqR6DDjtGtOhe97tFl0759S5wOKbQ7D0aUs2kM5xAXvJsXXJe +# mWTV9wuzR0vbpEd9MG03TvXj4cEpAoZmRH5HQs+F/Z4EKH66Sx52QmJaiE3fvHkn +# Mso= +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HP.Utility/license.txt b/Bios-Update-HP-v2.0/module/HP.Utility/license.txt new file mode 100644 index 0000000..b93ca37 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HP.Utility/license.txt @@ -0,0 +1,248 @@ +End-User License Agreement + +READ CAREFULLY BEFORE USING THIS SOFTWARE + +This End-User license Agreement ("EULA") is a legal agreement +between (a) you (either an individual or a single entity) and (b) HP Inc. +("HP") that governs your use of any Software Product, installed on or +made available by HP for use with your HP product ("HP Product"), that +is not otherwise subject to a separate license agreement between you +and HP or its suppliers. Other software may contain a EULA in its online +documentation. The term "Software Product" means computer software +and may include associated media, printed materials and "online" or +electronic documentation. + +An amendment or addendum to this EULA may accompany the HP +Product. + +RIGHTS IN THE SOFTWARE PRODUCT ARE OFFERED ONLY ON THE +CONDITION THAT YOU AGREE TO ALL TERMS AND CONDITIONS OF +THIS EULA. BY INSTALLING, COPYING, DOWNLOADING, OR +OTHERWISE USING THE SOFTWARE PRODUCT, YOU AGREE TO BE +BOUND BY THE TERMS OF THIS EULA. IF YOU DO NOT ACCEPT THESE +LICENSE TERMS, YOUR SOLE REMEDY IS TO RETURN THE ENTIRE +UNUSED PRODUCT (HARDWARE AND SOFTWARE) WITHIN 14 DAYS +FOR A REFUND SUBJECT TO THE REFUND POLICY OF YOUR PLACE OF +PURCHASE. + +1. GRANT OF LICENSE. HP grants you the following rights provided +you comply with all terms and conditions of this EULA: + +a. Use. You may use the Software Product on a single computer ("Your +Computer"). If the Software Product is provided to you via the internet +and was originally licensed for use on more than one computer, you +may install and use the Software Product only on those computers. You +may not separate component parts of the Software Product for use on +more than one computer. You do not have the right to distribute the +Software Product. You may load the Software Product into Your +Computer's temporary memory (RAM) for purposes of using the +Software Product. + +b. Storage. You may copy the Software Product into the local memory +or storage device of the HP Product. + +c. Copying. You may make archival or back-up copies of the Software +Product, provided the copy contains all of the original Software +Product's proprietary notices and that it is used only for back-up +purposes. + +d. Reservation of Rights. HP and its suppliers reserve all rights not +expressly granted to you in this EULA. + +e. Freeware. Notwithstanding the terms and conditions of this EULA, all +or any portion of the Software Product which constitutes non- +proprietary HP software or software provided under public license by +third parties ("Freeware"), is licensed to you subject to the terms and +conditions of the software license agreement accompanying such +Freeware whether in the form of a discrete agreement, shrink wrap +license or electronic license terms accepted at time of download. Use of +the Freeware by you shall be governed entirely by the terms and +conditions of such license. + +f. Recovery Solution. Any software recovery solution provided with/for +your HP Product, whether in the form of a hard disk drive-based +solution, an external media-based recovery solution (e.g. floppy disk, +CD or DVD) or an equivalent solution delivered in any other form, may +only be used for restoring the hard disk of the HP Product with/for +which the recovery solution was originally purchased. The use of any +Microsoft operating system software contained in such recovery +solution shall be governed by the Microsoft License Agreement. + +2. UPGRADES. To use a Software Product identified as an upgrade, +you must first be licensed for the original Software Product identified +by HP as eligible for the upgrade. After upgrading, you may no longer +use the original Software Product that formed the basis for your +upgrade eligibility. By using the Software Product, you also agree that +HP may automatically access your HP Product when connected to the +internet to check the version or status of certain Software Products and +may automatically download and install upgrades or updates to such +Software Products on to your HP Product to provide new versions or +updates required to maintain the functionality, performance, or security +of the HP Software and your HP Product and facilitate the provision of +support or other services provided to you. In certain cases, and +depending on the type of upgrade or update, notifications will be +provided to you (via pop-up or other means), which may require you to +initiate the upgrade or update. + +3. ADDITIONAL SOFTWARE. This EULA applies to updates or +supplements to the original Software Product provided by HP unless +HP provides other terms along with the update or supplement. In case +of a conflict between such terms, the other terms will prevail. + +4. TRANSFER. + +a. Third Party. The initial user of the Software Product may make a +one-time transfer of the Software Product to another end user. Any +transfer must include all component parts, media, printed materials, +this EULA, and if applicable, the Certificate of Authenticity. The transfer +may not be an indirect transfer, such as a consignment. Prior to the +transfer, the end user receiving the transferred product must agree to +all the EULA terms. Upon transfer of the Software Product, your license +is automatically terminated. + +b. Restrictions. You may not rent, lease or lend the Software Product or +use the Software Product for commercial timesharing or bureau use. +You may not sublicense, assign or transfer the license or Software +Product except as expressly provided in this EULA. + +5. PROPRIETARY RIGHTS. All intellectual property rights in the +Software Product and user documentation are owned by HP or its +suppliers and are protected by law, including but not limited to United +States copyright, trade secret, and trademark law, as well as other +applicable laws and international treaty provisions. You shall not +remove any product identification, copyright notices or proprietary +restrictions from the Software Product. + +6. LIMITATION ON REVERSE ENGINEERING. You may not reverse +engineer, decompile, or disassemble the Software Product, except and +only to the extent that the right to do so is mandated under applicable +law notwithstanding this limitation or it is expressly provided for in this +EULA. + +7. TERM. This EULA is effective unless terminated or rejected. This +EULA will also terminate upon conditions set forth elsewhere in this +EULA or if you fail to comply with any term or condition of this EULA. + +8. CONSENT TO COLLECTION/USE OF DATA. + +a. HP will use cookies and other web technology tools to collect +anonymous technical information related to HP Software and your HP +Product. This data will be used to provide the upgrades and related +support or other services described in Section 2. HP will also collect +personal information including your Internet Protocol address or other +unique identifier information associated with your HP Product and data +provided by you on registration of your HP Product. As well as +providing the upgrades and related support or other services, this data +will be used for sending marketing communications to you (in each +case with your express consent where required by applicable law). +To the extent permitted by applicable law, by accepting these terms +and conditions you consent to the collection and use of anonymous +and personal data by HP, its subsidiaries, and affiliates as described in +this EULA and as further described in HP�s privacy policy +www.hp.com/go/privacy + +b. Collection/Use by Third Parties. Certain software programs included +in your HP Product are provided and separately licensed to you by third +party providers (�Third Party Software�). Third Party Software may be +installed and operational on your HP Product even if you choose not to +activate/purchase such software. Third Party Software may collect and +transmit technical information about your system (i.e., IP address, +unique device identifier, software version installed, etc.) and other +system data. This information is used by the third party to identify +technical system attributes and ensure that the most current version of +the software has been installed on your system. If you do not want the +Third Party Software to collect this technical information or +automatically send you version updates, you should uninstall the +software prior to connecting to the Internet. + +9. DISCLAIMER OF WARRANTIES. TO THE MAXIMUM EXTENT +PERMITTED BY APPLICABLE LAW, HP AND ITS SUPPLIERS PROVIDE THE +SOFTWARE PRODUCT �AS IS� AND WITH ALL FAULTS, AND HEREBY +DISCLAIM ALL OTHER WARRANTIES, GUARANTEES, AND CONDITIONS, +EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT +LIMITED TO, WARRANTIES OF TITLE AND NON-INFRINGEMENT, ANY +IMPLIED WARRANTIES, DUTIES, GUARANTEES, OR CONDITIONS OF +MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A +PARTICULAR PURPOSE, AND OF LACK OF VIRUSES ALL WITH REGARD +TO THE SOFTWARE PRODUCT. Some states/jurisdictions do not allow +exclusion of implied warranties or limitations on the duration of implied +warranties, so the above disclaimer may not apply to you in its entirety. +IN AUSTRALIA AND NEW ZEALAND, THE SOFTWARE COMES WITH +GUARANTEES THAT CANNOT BE EXCLUDED UNDER AUSTRALIAN AND +NEW ZEALAND CONSUMER LAWS. AUSTRALIAN CONSUMERS ARE +ENTITLED TO A REPLACEMENT OR A REFUND FOR A MAJOR FAILURE +AND COMPENSATION FOR OTHER REASONABLY FORESEEABLE LOSS +OR DAMAGE. AUSTRALIAN CONSUMERS ARE ALSO ENTITLED TO +HAVE THE SOFTWARE REPAIRED OR REPLACED IF IT FAILS TO BE OF +ACCEPTABLE QUALITY AND THE FAILURE DOES NOT AMOUNT TO A +MAJOR FAILURE. NEW ZEALAND CONSUMERS WHO ARE PURCHASING +GOODS FOR PERSONAL, DOMESTIC OR HOUSEHOLD USE OR +CONSUMPTION AND NOT FOR THE PURPOSE OF A BUSINESS (�NEW +ZEALAND CONSUMERS�) ARE ENTITLED TO REPAIR, REPLACEMENT OR +REFUND FOR A FAILURE AND COMPENSATION FOR OTHER +REASONABLY FORESEEABLE LOSS OR DAMAGE. + +10. LIMITATION OF LIABILITY. Subject to local law, notwithstanding +any damages that you might incur, the entire liability of HP and any of +its suppliers under any provision of this EULA and your exclusive +remedy for all of the foregoing shall be limited to the greater of the +amount actually paid by you separately for the Software Product or U.S. +$5.00. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN +NO EVENT SHALL HP OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, +INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES +WHATSOEVER, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR +LOSS OF PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR +BUSINESS INTERRUPTION, FOR PERSONAL INJURY, FOR LOSS OF +PRIVACY ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF +OR INABILITY TO USE THE SOFTWARE PRODUCT, OR OTHERWISE IN +CONNECTION WITH ANY PROVISION OF THIS EULA, EVEN IF HP OR +ANY SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES AND EVEN IF THE REMEDY FAILS OF ITS ESSENTIAL +PURPOSE. Some states/jurisdictions do not allow the exclusion or +limitation of incidental or consequential damages, so the above +limitation or exclusion may not apply to you. + +11. U.S. GOVERNMENT CUSTOMERS. Consistent with FAR 12.211 +and 12.212, Commercial Computer Software, Computer Software +Documentation, and Technical Data for Commercial Items are licensed +to the U.S. Government under HP's standard commercial license. + +12. COMPLIANCE WITH EXPORT LAWS. You shall comply with all +laws and regulations of the United States and other countries ("Export +Laws") to assure that the Software Product is not (1) exported, directly +or indirectly, in violation of Export Laws, or (2) used for any purpose +prohibited by Export Laws, including, without limitation, nuclear, +chemical, or biological weapons proliferation. + +13. CAPACITY AND AUTHORITY TO CONTRACT. You represent that +you are of the legal age of majority in your state of residence and, if +applicable, you are duly authorized by your employer to enter into this +contract. + +14. APPLICABLE LAW. This EULA is governed by the laws of the +country in which the equipment was purchased. + +15. ENTIRE AGREEMENT. This EULA (including any addendum or +amendment to this EULA which is included with the HP Product) is the +entire agreement between you and HP relating to the Software Product +and it supersedes all prior or contemporaneous oral or written +communications, proposals and representations with respect to the +Software Product or any other subject matter covered by this EULA. To +the extent the terms of any HP policies or programs for support +services conflict with the terms of this EULA, the terms of this EULA +shall control. + +�Copyright 2018-2024 HP Development Company, L.P.. + +The information contained herein is subject to change without notice. +All other product names mentioned herein may be trademarks of their +respective companies. To the extent permitted by applicable law, the +only warranties for HP products and services are set forth in the express +warranty statements accompanying such products and services. +Nothing herein should be construed as constituting an additional +warranty. To the extent permitted by applicable law, HP shall not be +liable for technical or editorial errors or omissions contained herein. + +First Edition: August 2015 +817678-001 + diff --git a/Bios-Update-HP-v2.0/module/HPCMSL/HPCMSL.psd1 b/Bios-Update-HP-v2.0/module/HPCMSL/HPCMSL.psd1 new file mode 100644 index 0000000..be65447 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HPCMSL/HPCMSL.psd1 @@ -0,0 +1,346 @@ +# +# Copyright 2018-2024 HP Development Company, L.P. +# All Rights Reserved. +# +# NOTICE: All information contained herein is, and remains the property of HP Development Company, L.P. +# +# The intellectual and technical concepts contained herein are proprietary to HP Development Company, L.P +# and may be covered by U.S. and Foreign Patents, patents in process, and are protected by +# trade secret or copyright law. Dissemination of this information or reproduction of this material +# is strictly forbidden unless prior written permission is obtained from HP Development Company, L.P. + +@{ + +# Script module or binary module file associated with this manifest. +# RootModule = '' + +# Version number of this module. +#FullModuleVersion = '1.7.2.774' +ModuleVersion = '1.7.2' + +# Supported PSEditions +# CompatiblePSEditions = @() + +# ID used to uniquely identify this module +GUID = '2a0d9bf8-be39-4e34-8179-37ad517cfb87' + +# Author of this module +Author = 'HP Development Company, L.P.' + +# Company or vendor of this module +CompanyName = 'HP Inc' + +# Copyright statement for this module +Copyright = '(C) Copyright 2018-2024 HP Development Company, L.P.' + +# Description of the functionality provided by this module +Description = 'HP Client Management Script Library' + +# Minimum version of the Windows PowerShell engine required by this module +PowerShellVersion = '5.1' + +# Name of the Windows PowerShell host required by this module +# PowerShellHostName = '' + +# Minimum version of the Windows PowerShell host required by this module +# PowerShellHostVersion = '' + +# Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only. +# DotNetFrameworkVersion = '' + +# Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only. +# CLRVersion = '' + +# Processor architecture (None, X86, Amd64) required by this module +# ProcessorArchitecture = '' + +# Modules that must be imported into the global environment prior to importing this module +RequiredModules = @( + @{ModuleName = 'HP.Private'; RequiredVersion = '1.7.2'; GUID = '9F47EFBC-1124-46F3-87AB-F2D15D169CE7' }, + @{ModuleName = 'HP.Utility'; RequiredVersion = '1.7.2'; GUID = 'E8C64CAB-D4F9-4994-AFC8-3DB040B0AEBE' }, + @{ModuleName = 'HP.ClientManagement'; RequiredVersion = '1.7.2'; GUID = 'e5f40402-f5b0-42f9-b10b-28910aacdf5b' }, + @{ModuleName = 'HP.Firmware'; RequiredVersion = '1.7.2'; GUID = '9c46d615-4396-4e75-9eea-908625f0484e' }, + @{ModuleName = 'HP.Repo'; RequiredVersion = '1.7.2'; GUID = 'df713360-19e2-481c-8bcb-f8b4bf70c08b' }, + @{ModuleName = 'HP.Sinks'; RequiredVersion = '1.7.2'; GUID = '6c52dac6-35ee-4c4b-b0f1-a9dba3df70d8' }, + @{ModuleName = 'HP.Softpaq'; RequiredVersion = '1.7.2'; GUID = '994EF32D-25FA-4903-88EF-98D47F052675' }, + @{ModuleName = 'HP.Consent'; RequiredVersion = '1.7.2'; GUID = '1d8ea5a1-45c4-4509-9b16-4019676d1ca8' }, + @{ModuleName = 'HP.Retail'; RequiredVersion = '1.7.2'; GUID = '735c53e1-1a4c-4512-88a6-77137a8ba45a'}, + @{ModuleName = 'HP.Notifications'; RequiredVersion = '1.7.2'; GUID = 'b066583c-1b04-40d7-86a6-196dfd22dfbb'}, + @{ModuleName = 'HP.SmartExperiences'; RequiredVersion = '1.7.2'; GUID = '04c79fde-7cc7-49e4-b11b-d2892e11f6d1'} + ) + + + + +# Assemblies that must be loaded prior to importing this module +# RequiredAssemblies = @() + +# Script files (.ps1) that are run in the caller's environment prior to importing this module. +# ScriptsToProcess = @() + +# Type files (.ps1xml) to be loaded when importing this module +# TypesToProcess = @() + +# Format files (.ps1xml) to be loaded when importing this module +# FormatsToProcess = @() + +# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess +# NestedModules = @() + +# Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export. +FunctionsToExport = @() + +# Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export. +CmdletsToExport = @() + +# Variables to export from this module +VariablesToExport = '*' + +# Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export. +AliasesToExport = @() + +# DSC resources to export from this module +# DscResourcesToExport = @() + +# List of all modules packaged with this module +# ModuleList = @() + +# List of all files packaged with this module +FileList = @() + +# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell. +PrivateData = @{ + + PSData = @{ + LicenseUri = 'https://developers.hp.com/node/11493' + RequireLicenseAcceptance = $true + Tags = @('HP','client-management','manageability','BIOS','Firmware') + + } # End of PSData hashtable + +} # End of PrivateData hashtable + + +# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix. +# DefaultCommandPrefix = '' + +} + + +# SIG # Begin signature block +# MIIoHQYJKoZIhvcNAQcCoIIoDjCCKAoCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCVjVAjthMo+5pO +# LUXCSyQQ1//NAtkEYdkxQJ4IwPbPP6CCDYowggawMIIEmKADAgECAhAIrUCyYNKc +# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK +# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV +# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z +# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0 +# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr +# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF +# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F +# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh +# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ +# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay +# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI +# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp +# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro +# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB +# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+ +# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P +# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk +# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC +# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v +# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED +# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql +# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF +# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h +# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw +# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld +# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw +# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP +# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE +# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn +# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji +# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq +# yK+p/pQd52MbOoZWeE4wggbSMIIEuqADAgECAhAJvPMqSNxAYhV5FFpsbzOhMA0G +# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg +# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg +# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjQwMjE1MDAwMDAwWhcNMjUwMjE4 +# MjM1OTU5WjBaMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTESMBAG +# A1UEBxMJUGFsbyBBbHRvMRAwDgYDVQQKEwdIUCBJbmMuMRAwDgYDVQQDEwdIUCBJ +# bmMuMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEApbF6fMFy6zhGVra3 +# SZN418Cp2O8kjihQCU9tqPO9tkzbMyTsgveLJVnXPJNG9kQPMGUNp+wEHcoUzlRc +# YJMEL9fhfzpWPeSIIezGLPCdrkMmS3fdRUwFqEs7z/C6Ui2ZqMaKhKjBJTIWnipe +# rRfzGB7RoLepQcgqeF5s0DBy4oG83dqcRHo3IJRTBg39tHe3mD5uoGHn5n366abX +# vC+k53BVyD8w8XLppFVH5XuNlXMq/Ohf613i7DRb/+u92ZiAPVPXXnlxUE26cuDb +# OfJKN/bXPmvnWcNW3YHVp9ztPTQZhX4yWYXHrAI2Cv6HxUpO6NzhFoRoBTkcYNbA +# 91pf1Vagh/MNcA2BfQYT975/Vlvj9cfEZ/NwZthZuHa3rdrvCKhhjw7YU2QUeaTJ +# 0uaX4g6B9PFNqAASYLach3CDJiLmYEfus/utPh57mk0q27yL25fXo/PaMDXiDNIi +# 7Wuz7A+sPsbtdiY8zvEIRQ+XJXtKAlD4tqG9YzlTO6ZoQX/rAgMBAAGjggIDMIIB +# /zAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiIZfROQjAdBgNVHQ4EFgQURH4F +# u5yEAuElYWUbyGRYkNLLrA8wPgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEF +# BQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMA4GA1UdDwEB/wQEAwIH +# gDATBgNVHSUEDDAKBggrBgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRw +# Oi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmlu +# Z1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGln +# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hB +# Mzg0MjAyMUNBMS5jcmwwgZQGCCsGAQUFBwEBBIGHMIGEMCQGCCsGAQUFBzABhhho +# dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYBBQUHMAKGUGh0dHA6Ly9jYWNl +# cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWduaW5nUlNB +# NDA5NlNIQTM4NDIwMjFDQTEuY3J0MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQELBQAD +# ggIBAFiCyuI6qmaQodDyMNpp0l7eIXFgJ4JI59o59PleFj4rcyd/+F4iI7u5if8G +# rV5Kn3s3tK9vfJO8SpqtEh7lL4e69z6v3ohcy4uy2hsjKQ/fFcDo9pQYDGmDVjCa +# D5qSVEIBlJHBe5NKEJAgUE0kaMjLzbi2+8DKJlNtvZ+hatuPl9fMnmU+VbQh7JhZ +# yJdz8Ay0tcQ9lC8HAX5Ah/pU+Vtv+c8gMSxjS1aWXoGCa1869IVi2O6qx7MuX12U +# 1eIpB9XxYr7HSebvg2G7Gz6nCh7u+4k7m3hJu9EStUIN2JII5260+E60uDWoHEhx +# tHbdueFQxJrTKnhplOSaaPFCVBDkWG83ZzN9N3z/45w1pBUNBiPJdRQJ58MhBYQe +# Zl90heMBL8QNQk2i0E5gHNT9pJiCR9+mvJkRxEVgUn+16ZpVnI6kzhThV9qBaWVF +# h83X4UWc/nwHKIuu+4x4fmkYc79A3MrsHflZIO8jOy0GC/xBnZTQ8s5b9Tb2UkHk +# w692Ypl7War3W7M37JCAPC/A7M4CwQYjdjG43zs5m36auYVaTvRLKtZVLzcj8oZX +# 4vqhlZ8+jCPXFiuDfoBXiTckTLpv/eHQ6q7Aoda+qARWPPE1U2v5r/lpKVqIx7B4 +# PdFZAUf5MtG/Bj7LVXvXjW8ABIJv7L4cI2akn6Es0dmvd6PsMYIZ6TCCGeUCAQEw +# fTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNV +# BAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hB +# Mzg0IDIwMjEgQ0ExAhAJvPMqSNxAYhV5FFpsbzOhMA0GCWCGSAFlAwQCAQUAoHww +# EAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIJp/n7OQ +# dhtt7eeEYDdcFIgEnSVV2CVgp9Z1DlJr22bhMA0GCSqGSIb3DQEBAQUABIIBgDSC +# g5YgX0abPAntsFFGYh4pVNjwMe91XyRozjhSmfMTt1ziFGzQNRNdKCTNv82llum2 +# UjcfoDB9TcE4/uTxqCxKMk17X52ZhyzBsRpfNxXR/oncT2vEM27By7ie+o9SnGg6 +# HdqRBDqwl6AhUD24dZTorW7eiMEGojWR7ZHFX9WLuleztXFJG+56DT4AX75JiFkl +# 7V+Wg4oWvi/1g+yPrXdoscxdWmOMf+s7kr6Sh46eyeMqruJZeXLssPkjHLtqyIpL +# zORuRWDTs6RvbRY5QgFWjChSjZAUPmifUJoZ+60Ve7V82d4oYy47nesIlslU9QZN +# Mx1lhqyqvMQ2tmFHP4nLmYW+EwaBp15mnGx5ClCmici4o4pv/4QHTo/QG3yEgddN +# kH31bcDnCBJ6/DJ2y5OKHtLXFmKsAM+o5Jr/ynI0rZUQJQd+YpfVh4rcbc776CC7 +# pzi4Pxdw4X8AOzzvF5qc+FOn93rj48Sne/R/5HDu61GSQG/9gS1hskOqla6uFKGC +# Fz8wghc7BgorBgEEAYI3AwMBMYIXKzCCFycGCSqGSIb3DQEHAqCCFxgwghcUAgED +# MQ8wDQYJYIZIAWUDBAIBBQAwdwYLKoZIhvcNAQkQAQSgaARmMGQCAQEGCWCGSAGG +# /WwHATAxMA0GCWCGSAFlAwQCAQUABCCzyeAc+mUkkajgpDJOoH8TSA4i1BaJOSgL +# jZVoyEMZSgIQdHv/ugKpuj+YgtK4o7tLkhgPMjAyNDA4MjcxNjU1NTBaoIITCTCC +# BsIwggSqoAMCAQICEAVEr/OUnQg5pr/bP1/lYRYwDQYJKoZIhvcNAQELBQAwYzEL +# MAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJE +# aWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBD +# QTAeFw0yMzA3MTQwMDAwMDBaFw0zNDEwMTMyMzU5NTlaMEgxCzAJBgNVBAYTAlVT +# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEgMB4GA1UEAxMXRGlnaUNlcnQgVGlt +# ZXN0YW1wIDIwMjMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCjU0WH +# HYOOW6w+VLMj4M+f1+XS512hDgncL0ijl3o7Kpxn3GIVWMGpkxGnzaqyat0QKYoe +# YmNp01icNXG/OpfrlFCPHCDqx5o7L5Zm42nnaf5bw9YrIBzBl5S0pVCB8s/LB6Yw +# aMqDQtr8fwkklKSCGtpqutg7yl3eGRiF+0XqDWFsnf5xXsQGmjzwxS55DxtmUuPI +# 1j5f2kPThPXQx/ZILV5FdZZ1/t0QoRuDwbjmUpW1R9d4KTlr4HhZl+NEK0rVlc7v +# CBfqgmRN/yPjyobutKQhZHDr1eWg2mOzLukF7qr2JPUdvJscsrdf3/Dudn0xmWVH +# VZ1KJC+sK5e+n+T9e3M+Mu5SNPvUu+vUoCw0m+PebmQZBzcBkQ8ctVHNqkxmg4ho +# Yru8QRt4GW3k2Q/gWEH72LEs4VGvtK0VBhTqYggT02kefGRNnQ/fztFejKqrUBXJ +# s8q818Q7aESjpTtC/XN97t0K/3k0EH6mXApYTAA+hWl1x4Nk1nXNjxJ2VqUk+tfE +# ayG66B80mC866msBsPf7Kobse1I4qZgJoXGybHGvPrhvltXhEBP+YUcKjP7wtsfV +# x95sJPC/QoLKoHE9nJKTBLRpcCcNT7e1NtHJXwikcKPsCvERLmTgyyIryvEoEyFJ +# UX4GZtM7vvrrkTjYUQfKlLfiUKHzOtOKg8tAewIDAQABo4IBizCCAYcwDgYDVR0P +# AQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgw +# IAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQYMBaAFLoW +# 2W1NhS9zKXaaL3WMaiCPnshvMB0GA1UdDgQWBBSltu8T5+/N0GSh1VapZTGj3tXj +# STBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln +# aUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3JsMIGQ +# BggrBgEFBQcBAQSBgzCBgDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl +# cnQuY29tMFgGCCsGAQUFBzAChkxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v +# RGlnaUNlcnRUcnVzdGVkRzRSU0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3J0 +# MA0GCSqGSIb3DQEBCwUAA4ICAQCBGtbeoKm1mBe8cI1PijxonNgl/8ss5M3qXSKS +# 7IwiAqm4z4Co2efjxe0mgopxLxjdTrbebNfhYJwr7e09SI64a7p8Xb3CYTdoSXej +# 65CqEtcnhfOOHpLawkA4n13IoC4leCWdKgV6hCmYtld5j9smViuw86e9NwzYmHZP +# VrlSwradOKmB521BXIxp0bkrxMZ7z5z6eOKTGnaiaXXTUOREEr4gDZ6pRND45Ul3 +# CFohxbTPmJUaVLq5vMFpGbrPFvKDNzRusEEm3d5al08zjdSNd311RaGlWCZqA0Xe +# 2VC1UIyvVr1MxeFGxSjTredDAHDezJieGYkD6tSRN+9NUvPJYCHEVkft2hFLjDLD +# iOZY4rbbPvlfsELWj+MXkdGqwFXjhr+sJyxB0JozSqg21Llyln6XeThIX8rC3D0y +# 33XWNmdaifj2p8flTzU8AL2+nCpseQHc2kTmOt44OwdeOVj0fHMxVaCAEcsUDH6u +# vP6k63llqmjWIso765qCNVcoFstp8jKastLYOrixRoZruhf9xHdsFWyuq69zOuhJ +# RrfVf8y2OMDY7Bz1tqG4QyzfTkx9HmhwwHcK1ALgXGC7KP845VJa1qwXIiNO9OzT +# F/tQa/8Hdx9xl0RBybhG02wyfFgvZ0dl5Rtztpn5aywGRu9BHvDwX+Db2a2QgESv +# gBBBijCCBq4wggSWoAMCAQICEAc2N7ckVHzYR6z9KGYqXlswDQYJKoZIhvcNAQEL +# BQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UE +# CxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBS +# b290IEc0MB4XDTIyMDMyMzAwMDAwMFoXDTM3MDMyMjIzNTk1OVowYzELMAkGA1UE +# BhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2Vy +# dCBUcnVzdGVkIEc0IFJTQTQwOTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMaGNQZJs8E9cklRVcclA8TykTep +# l1Gh1tKD0Z5Mom2gsMyD+Vr2EaFEFUJfpIjzaPp985yJC3+dH54PMx9QEwsmc5Zt +# +FeoAn39Q7SE2hHxc7Gz7iuAhIoiGN/r2j3EF3+rGSs+QtxnjupRPfDWVtTnKC3r +# 07G1decfBmWNlCnT2exp39mQh0YAe9tEQYncfGpXevA3eZ9drMvohGS0UvJ2R/dh +# gxndX7RUCyFobjchu0CsX7LeSn3O9TkSZ+8OpWNs5KbFHc02DVzV5huowWR0QKfA +# csW6Th+xtVhNef7Xj3OTrCw54qVI1vCwMROpVymWJy71h6aPTnYVVSZwmCZ/oBpH +# IEPjQ2OAe3VuJyWQmDo4EbP29p7mO1vsgd4iFNmCKseSv6De4z6ic/rnH1pslPJS +# lRErWHRAKKtzQ87fSqEcazjFKfPKqpZzQmiftkaznTqj1QPgv/CiPMpC3BhIfxQ0 +# z9JMq++bPf4OuGQq+nUoJEHtQr8FnGZJUlD0UfM2SU2LINIsVzV5K6jzRWC8I41Y +# 99xh3pP+OcD5sjClTNfpmEpYPtMDiP6zj9NeS3YSUZPJjAw7W4oiqMEmCPkUEBID +# fV8ju2TjY+Cm4T72wnSyPx4JduyrXUZ14mCjWAkBKAAOhFTuzuldyF4wEr1GnrXT +# drnSDmuZDNIztM2xAgMBAAGjggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0G +# A1UdDgQWBBS6FtltTYUvcyl2mi91jGogj57IbzAfBgNVHSMEGDAWgBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUH +# AwgwdwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp +# Y2VydC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv +# bS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0 +# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3Js +# MCAGA1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsF +# AAOCAgEAfVmOwJO2b5ipRCIBfmbW2CFC4bAYLhBNE88wU86/GPvHUF3iSyn7cIoN +# qilp/GnBzx0H6T5gyNgL5Vxb122H+oQgJTQxZ822EpZvxFBMYh0MCIKoFr2pVs8V +# c40BIiXOlWk/R3f7cnQU1/+rT4osequFzUNf7WC2qk+RZp4snuCKrOX9jLxkJods +# kr2dfNBwCnzvqLx1T7pa96kQsl3p/yhUifDVinF2ZdrM8HKjI/rAJ4JErpknG6sk +# HibBt94q6/aesXmZgaNWhqsKRcnfxI2g55j7+6adcq/Ex8HBanHZxhOACcS2n82H +# hyS7T6NJuXdmkfFynOlLAlKnN36TU6w7HQhJD5TNOXrd/yVjmScsPT9rp/Fmw0HN +# T7ZAmyEhQNC3EyTN3B14OuSereU0cZLXJmvkOHOrpgFPvT87eK1MrfvElXvtCl8z +# OYdBeHo46Zzh3SP9HSjTx/no8Zhf+yvYfvJGnXUsHicsJttvFXseGYs2uJPU5vIX +# mVnKcPA3v5gA3yAWTyf7YGcWoWa63VXAOimGsJigK+2VQbc61RWYMbRiCQ8KvYHZ +# E/6/pNHzV9m8BPqC3jLfBInwAM1dwvnQI38AC+R2AibZ8GV2QqYphwlHK+Z/GqSF +# D/yYlvZVVCsfgPrA8g4r5db7qS9EFUrnEw4d2zc4GqEr9u3WfPwwggWNMIIEdaAD +# AgECAhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYT +# AlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2Vy +# dC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0y +# MjA4MDEwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYD +# VQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAf +# BgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEB +# BQADggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4Smn +# PVirdprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6f +# qVcWWVVyr2iTcMKyunWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O +# 7F5OyJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZ +# Vu7Ke13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4F +# fYj1gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLm +# qaBn3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMre +# Sx7nDmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/ch +# srIRt7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+U +# DCEdslQpJYls5Q5SUUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xM +# dT9j7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUb +# AgMBAAGjggE6MIIBNjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFd +# ZEzfLmc/57qYrhwPTzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAO +# BgNVHQ8BAf8EBAMCAYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRw +# Oi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRz +# LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0f +# BD4wPDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNz +# dXJlZElEUm9vdENBLmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEM +# BQADggEBAHCgv0NcVec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLt +# pIh3bb0aFPQTSnovLbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouy +# XtTP0UNEm0Mh65ZyoUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jS +# TEAZNUZqaVSwuKFWjuyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAc +# AgPLILCsWKAOQGPFmCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2 +# h5b9W9FcrBjDTZ9ztwGpn1eqXijiuZQxggN2MIIDcgIBATB3MGMxCzAJBgNVBAYT +# AlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQg +# VHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAVEr/OU +# nQg5pr/bP1/lYRYwDQYJYIZIAWUDBAIBBQCggdEwGgYJKoZIhvcNAQkDMQ0GCyqG +# SIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNDA4MjcxNjU1NTBaMCsGCyqGSIb3 +# DQEJEAIMMRwwGjAYMBYEFGbwKzLCwskPgl3OqorJxk8ZnM9AMC8GCSqGSIb3DQEJ +# BDEiBCBbNQNLfoDGNyhQnNqYgWt2ir/Pz/WgOBsERMYzLn8bTjA3BgsqhkiG9w0B +# CRACLzEoMCYwJDAiBCDS9uRt7XQizNHUQFdoQTZvgoraVZquMxavTRqa1Ax4KDAN +# BgkqhkiG9w0BAQEFAASCAgAYndymf9ztIGCVfzXcD4LLVp+K3grk1NIwrpZDDvH+ +# iSgJ0ScMI93QeFyhJPHpMrtF1x6r3Kafx+hn3yaHCIi/VkTLqi6WVo0g561fvIZ7 +# OI/TICicbwBpkKy0QIS2ZreIYT1dio4fF97ifbQEcYhGKY6Pv3HiQdxjuSoZP0HL +# 7bhXErOGoglq754JmxmqVauTc28/gqsXmo1H+YY8RZWaZEn808uxp9T5sq8lOgAr +# yi2FiY1VAcEpEX4AS9C9tXuPKGX2y9e9EUYm+McIA1uLoZcmVwwKKKM+BwohfEaO +# 6gvxaZ8QTxwnPkz2yxG7kFZF9WVubW8Xv5O7ELR1ubaZsotwEYKC83iSUMkRHWn4 +# JSBtc/FIkOMjZMJ90UuL5Bw4MzhTnLXwNp5ZmXbAG/hpZRXVIi1kEXhLOb8TQQY4 +# S5Ip1Pe6aMh0XiTvHrW2P9b0eY1QnMFPBFeBdH9k5BB3uCSpTJAFflnQ7BUMfgb6 +# u6+p+RhzHSTwaap2BEIxBdMBZY15Cu6UETZF4xfflQeuxe3ef0JsBF7pgZphrYwP +# TRVaUgMqs+BsG8tukzmXPeoh2bTeOk+as09JWno64755Z6qMqHLT97YUAGm/LnXG +# u5GBhghogg47LvenTu5Ulr0S/sBxUzJSUGMzY8sCWyhHXGz+QvBQmS1uHM+9cJ98 +# xg== +# SIG # End signature block diff --git a/Bios-Update-HP-v2.0/module/HPCMSL/license.txt b/Bios-Update-HP-v2.0/module/HPCMSL/license.txt new file mode 100644 index 0000000..b93ca37 --- /dev/null +++ b/Bios-Update-HP-v2.0/module/HPCMSL/license.txt @@ -0,0 +1,248 @@ +End-User License Agreement + +READ CAREFULLY BEFORE USING THIS SOFTWARE + +This End-User license Agreement ("EULA") is a legal agreement +between (a) you (either an individual or a single entity) and (b) HP Inc. +("HP") that governs your use of any Software Product, installed on or +made available by HP for use with your HP product ("HP Product"), that +is not otherwise subject to a separate license agreement between you +and HP or its suppliers. Other software may contain a EULA in its online +documentation. The term "Software Product" means computer software +and may include associated media, printed materials and "online" or +electronic documentation. + +An amendment or addendum to this EULA may accompany the HP +Product. + +RIGHTS IN THE SOFTWARE PRODUCT ARE OFFERED ONLY ON THE +CONDITION THAT YOU AGREE TO ALL TERMS AND CONDITIONS OF +THIS EULA. BY INSTALLING, COPYING, DOWNLOADING, OR +OTHERWISE USING THE SOFTWARE PRODUCT, YOU AGREE TO BE +BOUND BY THE TERMS OF THIS EULA. IF YOU DO NOT ACCEPT THESE +LICENSE TERMS, YOUR SOLE REMEDY IS TO RETURN THE ENTIRE +UNUSED PRODUCT (HARDWARE AND SOFTWARE) WITHIN 14 DAYS +FOR A REFUND SUBJECT TO THE REFUND POLICY OF YOUR PLACE OF +PURCHASE. + +1. GRANT OF LICENSE. HP grants you the following rights provided +you comply with all terms and conditions of this EULA: + +a. Use. You may use the Software Product on a single computer ("Your +Computer"). If the Software Product is provided to you via the internet +and was originally licensed for use on more than one computer, you +may install and use the Software Product only on those computers. You +may not separate component parts of the Software Product for use on +more than one computer. You do not have the right to distribute the +Software Product. You may load the Software Product into Your +Computer's temporary memory (RAM) for purposes of using the +Software Product. + +b. Storage. You may copy the Software Product into the local memory +or storage device of the HP Product. + +c. Copying. You may make archival or back-up copies of the Software +Product, provided the copy contains all of the original Software +Product's proprietary notices and that it is used only for back-up +purposes. + +d. Reservation of Rights. HP and its suppliers reserve all rights not +expressly granted to you in this EULA. + +e. Freeware. Notwithstanding the terms and conditions of this EULA, all +or any portion of the Software Product which constitutes non- +proprietary HP software or software provided under public license by +third parties ("Freeware"), is licensed to you subject to the terms and +conditions of the software license agreement accompanying such +Freeware whether in the form of a discrete agreement, shrink wrap +license or electronic license terms accepted at time of download. Use of +the Freeware by you shall be governed entirely by the terms and +conditions of such license. + +f. Recovery Solution. Any software recovery solution provided with/for +your HP Product, whether in the form of a hard disk drive-based +solution, an external media-based recovery solution (e.g. floppy disk, +CD or DVD) or an equivalent solution delivered in any other form, may +only be used for restoring the hard disk of the HP Product with/for +which the recovery solution was originally purchased. The use of any +Microsoft operating system software contained in such recovery +solution shall be governed by the Microsoft License Agreement. + +2. UPGRADES. To use a Software Product identified as an upgrade, +you must first be licensed for the original Software Product identified +by HP as eligible for the upgrade. After upgrading, you may no longer +use the original Software Product that formed the basis for your +upgrade eligibility. By using the Software Product, you also agree that +HP may automatically access your HP Product when connected to the +internet to check the version or status of certain Software Products and +may automatically download and install upgrades or updates to such +Software Products on to your HP Product to provide new versions or +updates required to maintain the functionality, performance, or security +of the HP Software and your HP Product and facilitate the provision of +support or other services provided to you. In certain cases, and +depending on the type of upgrade or update, notifications will be +provided to you (via pop-up or other means), which may require you to +initiate the upgrade or update. + +3. ADDITIONAL SOFTWARE. This EULA applies to updates or +supplements to the original Software Product provided by HP unless +HP provides other terms along with the update or supplement. In case +of a conflict between such terms, the other terms will prevail. + +4. TRANSFER. + +a. Third Party. The initial user of the Software Product may make a +one-time transfer of the Software Product to another end user. Any +transfer must include all component parts, media, printed materials, +this EULA, and if applicable, the Certificate of Authenticity. The transfer +may not be an indirect transfer, such as a consignment. Prior to the +transfer, the end user receiving the transferred product must agree to +all the EULA terms. Upon transfer of the Software Product, your license +is automatically terminated. + +b. Restrictions. You may not rent, lease or lend the Software Product or +use the Software Product for commercial timesharing or bureau use. +You may not sublicense, assign or transfer the license or Software +Product except as expressly provided in this EULA. + +5. PROPRIETARY RIGHTS. All intellectual property rights in the +Software Product and user documentation are owned by HP or its +suppliers and are protected by law, including but not limited to United +States copyright, trade secret, and trademark law, as well as other +applicable laws and international treaty provisions. You shall not +remove any product identification, copyright notices or proprietary +restrictions from the Software Product. + +6. LIMITATION ON REVERSE ENGINEERING. You may not reverse +engineer, decompile, or disassemble the Software Product, except and +only to the extent that the right to do so is mandated under applicable +law notwithstanding this limitation or it is expressly provided for in this +EULA. + +7. TERM. This EULA is effective unless terminated or rejected. This +EULA will also terminate upon conditions set forth elsewhere in this +EULA or if you fail to comply with any term or condition of this EULA. + +8. CONSENT TO COLLECTION/USE OF DATA. + +a. HP will use cookies and other web technology tools to collect +anonymous technical information related to HP Software and your HP +Product. This data will be used to provide the upgrades and related +support or other services described in Section 2. HP will also collect +personal information including your Internet Protocol address or other +unique identifier information associated with your HP Product and data +provided by you on registration of your HP Product. As well as +providing the upgrades and related support or other services, this data +will be used for sending marketing communications to you (in each +case with your express consent where required by applicable law). +To the extent permitted by applicable law, by accepting these terms +and conditions you consent to the collection and use of anonymous +and personal data by HP, its subsidiaries, and affiliates as described in +this EULA and as further described in HP�s privacy policy +www.hp.com/go/privacy + +b. Collection/Use by Third Parties. Certain software programs included +in your HP Product are provided and separately licensed to you by third +party providers (�Third Party Software�). Third Party Software may be +installed and operational on your HP Product even if you choose not to +activate/purchase such software. Third Party Software may collect and +transmit technical information about your system (i.e., IP address, +unique device identifier, software version installed, etc.) and other +system data. This information is used by the third party to identify +technical system attributes and ensure that the most current version of +the software has been installed on your system. If you do not want the +Third Party Software to collect this technical information or +automatically send you version updates, you should uninstall the +software prior to connecting to the Internet. + +9. DISCLAIMER OF WARRANTIES. TO THE MAXIMUM EXTENT +PERMITTED BY APPLICABLE LAW, HP AND ITS SUPPLIERS PROVIDE THE +SOFTWARE PRODUCT �AS IS� AND WITH ALL FAULTS, AND HEREBY +DISCLAIM ALL OTHER WARRANTIES, GUARANTEES, AND CONDITIONS, +EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT +LIMITED TO, WARRANTIES OF TITLE AND NON-INFRINGEMENT, ANY +IMPLIED WARRANTIES, DUTIES, GUARANTEES, OR CONDITIONS OF +MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A +PARTICULAR PURPOSE, AND OF LACK OF VIRUSES ALL WITH REGARD +TO THE SOFTWARE PRODUCT. Some states/jurisdictions do not allow +exclusion of implied warranties or limitations on the duration of implied +warranties, so the above disclaimer may not apply to you in its entirety. +IN AUSTRALIA AND NEW ZEALAND, THE SOFTWARE COMES WITH +GUARANTEES THAT CANNOT BE EXCLUDED UNDER AUSTRALIAN AND +NEW ZEALAND CONSUMER LAWS. AUSTRALIAN CONSUMERS ARE +ENTITLED TO A REPLACEMENT OR A REFUND FOR A MAJOR FAILURE +AND COMPENSATION FOR OTHER REASONABLY FORESEEABLE LOSS +OR DAMAGE. AUSTRALIAN CONSUMERS ARE ALSO ENTITLED TO +HAVE THE SOFTWARE REPAIRED OR REPLACED IF IT FAILS TO BE OF +ACCEPTABLE QUALITY AND THE FAILURE DOES NOT AMOUNT TO A +MAJOR FAILURE. NEW ZEALAND CONSUMERS WHO ARE PURCHASING +GOODS FOR PERSONAL, DOMESTIC OR HOUSEHOLD USE OR +CONSUMPTION AND NOT FOR THE PURPOSE OF A BUSINESS (�NEW +ZEALAND CONSUMERS�) ARE ENTITLED TO REPAIR, REPLACEMENT OR +REFUND FOR A FAILURE AND COMPENSATION FOR OTHER +REASONABLY FORESEEABLE LOSS OR DAMAGE. + +10. LIMITATION OF LIABILITY. Subject to local law, notwithstanding +any damages that you might incur, the entire liability of HP and any of +its suppliers under any provision of this EULA and your exclusive +remedy for all of the foregoing shall be limited to the greater of the +amount actually paid by you separately for the Software Product or U.S. +$5.00. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN +NO EVENT SHALL HP OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, +INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES +WHATSOEVER, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR +LOSS OF PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR +BUSINESS INTERRUPTION, FOR PERSONAL INJURY, FOR LOSS OF +PRIVACY ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF +OR INABILITY TO USE THE SOFTWARE PRODUCT, OR OTHERWISE IN +CONNECTION WITH ANY PROVISION OF THIS EULA, EVEN IF HP OR +ANY SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES AND EVEN IF THE REMEDY FAILS OF ITS ESSENTIAL +PURPOSE. Some states/jurisdictions do not allow the exclusion or +limitation of incidental or consequential damages, so the above +limitation or exclusion may not apply to you. + +11. U.S. GOVERNMENT CUSTOMERS. Consistent with FAR 12.211 +and 12.212, Commercial Computer Software, Computer Software +Documentation, and Technical Data for Commercial Items are licensed +to the U.S. Government under HP's standard commercial license. + +12. COMPLIANCE WITH EXPORT LAWS. You shall comply with all +laws and regulations of the United States and other countries ("Export +Laws") to assure that the Software Product is not (1) exported, directly +or indirectly, in violation of Export Laws, or (2) used for any purpose +prohibited by Export Laws, including, without limitation, nuclear, +chemical, or biological weapons proliferation. + +13. CAPACITY AND AUTHORITY TO CONTRACT. You represent that +you are of the legal age of majority in your state of residence and, if +applicable, you are duly authorized by your employer to enter into this +contract. + +14. APPLICABLE LAW. This EULA is governed by the laws of the +country in which the equipment was purchased. + +15. ENTIRE AGREEMENT. This EULA (including any addendum or +amendment to this EULA which is included with the HP Product) is the +entire agreement between you and HP relating to the Software Product +and it supersedes all prior or contemporaneous oral or written +communications, proposals and representations with respect to the +Software Product or any other subject matter covered by this EULA. To +the extent the terms of any HP policies or programs for support +services conflict with the terms of this EULA, the terms of this EULA +shall control. + +�Copyright 2018-2024 HP Development Company, L.P.. + +The information contained herein is subject to change without notice. +All other product names mentioned herein may be trademarks of their +respective companies. To the extent permitted by applicable law, the +only warranties for HP products and services are set forth in the express +warranty statements accompanying such products and services. +Nothing herein should be construed as constituting an additional +warranty. To the extent permitted by applicable law, HP shall not be +liable for technical or editorial errors or omissions contained herein. + +First Edition: August 2015 +817678-001 + diff --git a/Bios-Update-HP-v2.0/readme.md b/Bios-Update-HP-v2.0/readme.md new file mode 100644 index 0000000..762f678 --- /dev/null +++ b/Bios-Update-HP-v2.0/readme.md @@ -0,0 +1,34 @@ +# HP BIOS Update Script (PowerShell) + +This PowerShell script automates **HP BIOS updates** using the **HP.ClientManagement** module. +It compares the current BIOS version with a target version and applies the update if necessary, while logging all actions. + +## ✨ Features +- Imports **HP.ClientManagement** module +- Logs all steps to `C:\windows\temp\HPBiosUpdate.log` +- Retrieves and displays the current BIOS version +- Checks available updates with `Get-HPBIOSUpdates` +- Compares against a **target version** (`2.20.01` in this example) +- Runs update automatically if the current BIOS is outdated, with BitLocker suspend + +## 📌 Requirements +- Windows with PowerShell (run as Administrator) +- HP device with **HP.ClientManagement** module installed +- Access to HP BIOS update packages + +## 🚀 Usage +1. Edit the script and set the **target BIOS version**: +```powershell +$TargetBiosVer = [Version]"2.20.01" +``` + +2. Run the script: +```powershell +powershell -ExecutionPolicy Bypass -File .\HpBiosUpdate.ps1 +``` + +## ⚠️ Notes +- The script suspends **BitLocker** before flashing the BIOS. +- A **reboot is usually required** after the update completes. +- If the current BIOS version is equal to or newer than the target, the update is skipped. +- All actions and results are logged in `C:\windows\temp\HPBiosUpdate.log` \ No newline at end of file diff --git a/Bios-Update-HP-v2.0/updatebiosHP.ps1 b/Bios-Update-HP-v2.0/updatebiosHP.ps1 new file mode 100644 index 0000000..f687b1d --- /dev/null +++ b/Bios-Update-HP-v2.0/updatebiosHP.ps1 @@ -0,0 +1,42 @@ +# Fonction pour écrire dans le log avec date et heure +function Write-Log { + param ( + [string]$Message, + [string]$LogFile = "C:\windows\temp\HPBiosUpdate.log" + ) + $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + $logMessage = "$timestamp : $Message" + Add-Content -Path $LogFile -Value $logMessage +} + +# Créer le répertoire de log s'il n'existe pas +if (-not (Test-Path -Path "C:\Systools\OptLog")) { + New-Item -Path "C:\Systools\OptLog" -ItemType Directory +} + +# Importer le module +import-module HP.ClientManagement +Write-Log "Module HP.ClientManagement importé" + +# Récupérer la version actuelle du BIOS +$BiosVer = Get-HPBIOSVersion +Write-Log "Version actuelle du BIOS: $BiosVer" + +# Enregistrer la sortie de Get-HPBIOSUpdates +$HPBIOSUpdates = Get-HPBIOSUpdates +Write-Log "Résultat de Get-HPBIOSUpdates : $($HPBIOSUpdates | Out-String)" + +# Convertir les versions en objets [Version] +$CurrentBiosVer = [Version]$BiosVer +$TargetBiosVer = [Version]"2.20.01" + +# Comparer les versions de manière appropriée +if ($CurrentBiosVer -lt $TargetBiosVer) { + # Exécuter la mise à jour du BIOS si la version est inférieure + Get-HPBIOSUpdates -Flash -Version "2.20.01" -Yes -BitLocker:suspend + Write-Log "Mise à jour du BIOS lancée, version actuelle $BiosVer est inférieure à 2.20.01" + Write-Host "Update BIOS need update $BiosVer" +} else { + Write-Log "Mise à jour du BIOS ignorée, version actuelle $BiosVer est à jour" + Write-Host "Bypass update BIOS" +} diff --git a/Bios-Update-HP-v3.0/BIOS_Update.bat b/Bios-Update-HP-v3.0/BIOS_Update.bat new file mode 100644 index 0000000..8a0e525 --- /dev/null +++ b/Bios-Update-HP-v3.0/BIOS_Update.bat @@ -0,0 +1,62 @@ +:: Supprimer la tâche planifiée "BiosUpdateAtStartup" +SCHTASKS /DELETE /TN "BiosUpdateAtStartup" /F + + +:: Define log file +set LOGFILE=c:\windows\temp\HPBiosUpdate.log +echo [%DATE% %TIME%] --------- BIOS update started ----------->> "%LOGFILE%" + +:: Find the "sp156628" directory in the script folder +if exist "%~dp0sp156628" ( + set BIOSFILE=sp156628 + goto :found +) + +echo [%DATE% %TIME%] ERROR: Directory "sp156628" not found in %~dp0 >> "%LOGFILE%" +exit /B 1 + +:found +set Fullpath=%~dp0%BIOSFILE% +echo [%DATE% %TIME%] --------- Full path = %Fullpath% ----------->> "%LOGFILE%" + +del "%Fullpath%\HpFirmwareUpdRec*.log" /F /Q +rmdir /s /q "%Fullpath%\ldcacheinfo" + +:: Log possible exit codes +( + echo [%DATE% %TIME%] 3010:SUCCESS:REBOOT=A restart is required to complete the install + echo [%DATE% %TIME%] 1602:CANCEL:NOREBOOT=The install cannot complete due to a dependency + echo [%DATE% %TIME%] 273:CANCEL:NOREBOOT=Flash did not update because update is same BIOS version + echo [%DATE% %TIME%] 282:CANCEL:NOREBOOT=Flash did not update because update is an older BIOS version +) >> "%LOGFILE%" + +:: Execute BIOS update +echo [%DATE% %TIME%] Running HpFirmwareUpdRec64.exe >> "%LOGFILE%" +start /wait "bios" "%Fullpath%\HpFirmwareUpdRec64.exe" -s -r -h -b -f"%Fullpath%" + +:: Retrieve exit code +set exitcode=%ERRORLEVEL% +echo [%DATE% %TIME%] Exit code = %exitcode% >> "%LOGFILE%" + +:: Handle exit codes +if %exitcode% EQU 3010 ( + echo [%DATE% %TIME%] BIOS update successful, restart required. >> "%LOGFILE%" + echo [%DATE% %TIME%] Restarting in 30 seconds... >> "%LOGFILE%" + shutdown /r /t 30 /c "BIOS update completed. Restarting in 30 seconds." + exit /B 0 +) +if %exitcode% EQU 1602 ( + echo [%DATE% %TIME%] Installation canceled: dependency issue. >> "%LOGFILE%" + exit /B 1602 +) +if %exitcode% EQU 273 ( + echo [%DATE% %TIME%] Update skipped: same BIOS version detected. >> "%LOGFILE%" + exit /B 273 +) +if %exitcode% EQU 282 ( + echo [%DATE% %TIME%] Update canceled: older BIOS version detected. >> "%LOGFILE%" + exit /B 282 +) +del "%Fullpath%\HpFirmwareUpdRec*.log" /F /Q +echo [%DATE% %TIME%] Unknown error: exit code %exitcode%. >> "%LOGFILE%" +exit /B 99 diff --git a/Bios-Update-HP-v3.0/CreateTask.ps1 b/Bios-Update-HP-v3.0/CreateTask.ps1 new file mode 100644 index 0000000..63011df --- /dev/null +++ b/Bios-Update-HP-v3.0/CreateTask.ps1 @@ -0,0 +1,60 @@ +# 1) Define paths +$sourcePath = "$PSScriptRoot\*" +$destinationPath = "C:\Windows\Temp\Bios" +$logFiles = "$destinationPath\sp156628\HpFirmwareUpdRec*.log" +$cacheFolder = "$destinationPath\sp156628\ldcacheinfo" + +# 2) Remove the target folder if it exists +if (Test-Path $destinationPath) { + Remove-Item -Path $destinationPath -Recurse -Force -ErrorAction SilentlyContinue +} + +# 3) Recreate the target folder +New-Item -ItemType Directory -Path $destinationPath -Force | Out-Null + +# 4) Copy files +Write-Host "Copying BIOS files to '$destinationPath'..." +Copy-Item -Path $sourcePath -Destination $destinationPath -Recurse -Force + +# 5) Delete log files if they exist +if (Test-Path $logFiles) { + Remove-Item -Path $logFiles -Force -ErrorAction SilentlyContinue +} + +# 6) Delete the ldcacheinfo folder if it exists +if (Test-Path $cacheFolder) { + Remove-Item -Path $cacheFolder -Recurse -Force -ErrorAction SilentlyContinue +} + +# 7) Define the scheduled task name +$taskName = "BiosUpdateAtStartup" + +Write-Host "Creating scheduled task '$taskName' to run the BIOS update at startup..." + +# 8) Define the action: Run the script in silent mode +$scriptPath = "$destinationPath\BIOS_Update.bat" +if (-not (Test-Path $scriptPath)) { + Write-Host "Error: The file '$scriptPath' was not found!" -ForegroundColor Red + exit 1 +} + +$action = New-ScheduledTaskAction -Execute "cmd.exe" -Argument "/c `"$scriptPath`"" + +# 9) Set execution as SYSTEM with highest privileges +$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -RunLevel Highest + +# 10) Define the trigger with a 2-minute delay (ISO 8601: PT2M) +$trigger = New-ScheduledTaskTrigger -AtStartup +$trigger.Delay = "PT2M" + +# 11) Check for and remove any existing task +if (Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue) { + Write-Host "Existing task detected. Removing..." + Unregister-ScheduledTask -TaskName $taskName -Confirm:$false +} + +# 12) Create and register the new scheduled task +$scheduledTask = New-ScheduledTask -Action $action -Trigger $trigger -Principal $principal +Register-ScheduledTask -TaskName $taskName -InputObject $scheduledTask | Out-Null + +Write-Host "Scheduled task '$taskName' successfully created. It will run at startup with a 2-minute delay." diff --git a/Bios-Update-HP-v3.0/readme.md b/Bios-Update-HP-v3.0/readme.md new file mode 100644 index 0000000..f96f48d --- /dev/null +++ b/Bios-Update-HP-v3.0/readme.md @@ -0,0 +1,14 @@ +# 🚀 BIOS Update – Staged & Scheduled + +## 🔧 What it does +- Copies the **entire folder** next to the script to `C:\Windows\Temp\Bios` +- Cleans previous **HpFirmwareUpdRec logs** and `ldcacheinfo` +- Creates a **scheduled task** `BiosUpdateAtStartup` that runs + `C:\Windows\Temp\Bios\BIOS_Update.bat` **at startup with a 2-minute delay** (as SYSTEM, highest) + +## ✅ Prerequisites +- Run as **Administrator** +- Ensure `BIOS_Update.bat` exists in the source folder (it will be copied to `C:\Windows\Temp\Bios`) +- Include the HP package folder (e.g. `sp156628\...`) expected by `BIOS_Update.bat` +- Machine will execute the BIOS update **on next boot** via the scheduled task + diff --git a/Bios-Update-HP-v3.0/sp156628/BCUsignature32.dll b/Bios-Update-HP-v3.0/sp156628/BCUsignature32.dll new file mode 100644 index 0000000..32bf3fc Binary files /dev/null and b/Bios-Update-HP-v3.0/sp156628/BCUsignature32.dll differ diff --git a/Bios-Update-HP-v3.0/sp156628/BCUsignature64.dll b/Bios-Update-HP-v3.0/sp156628/BCUsignature64.dll new file mode 100644 index 0000000..545e97d Binary files /dev/null and b/Bios-Update-HP-v3.0/sp156628/BCUsignature64.dll differ diff --git a/Bios-Update-HP-v3.0/sp156628/Bios Flash.htm b/Bios-Update-HP-v3.0/sp156628/Bios Flash.htm new file mode 100644 index 0000000..6f2f62b --- /dev/null +++ b/Bios-Update-HP-v3.0/sp156628/Bios Flash.htm @@ -0,0 +1,394 @@ + + + + + + + + +HP Firmware Flash Update + + + + + + + + + +
+ + + + + + + +
+

+
+

Firmware Flash Update

+
+

+
+ +
+ +
+ +
+ +

This Firmware Update SoftPaq contains utilities and data files for restoring or upgrading the firmware on HP business notebooks and desktops. See below for descriptions of some of the supported methods.

+ +
+ +
+ +
+ + + + +

+
+ +
+ +
+ +
+ +

General Information +

+ +

This package is used to update firmware locally or to provide files needed to deploy the firmware update to supported systems on a local network. The default Softpaq unbundle location is C:\SWSETUP\SPnnnnn\ where 'nnnnn' is the Softpaq number.

+ +

However the target systems may also use the internet to search for and apply the latest system firmware updates - check Windows Update to find new releases for supported firmware components. In addition the BIOS firmware can be updated directly from BIOS Setup (F10 hotkey at boot). Select the 'Update System BIOS' option under the Main menu to access this function. Under the 'BIOS Update Preferences' option you may set up periodic update checks, or you can use the 'Check HP.com for BIOS Updates' link to search for an update immediately.

+ +
+ +
+ +
+ +

HP Firmware Update and Recovery (HpFirmwareUpdRec) Flash Utility

+ +

The HP Firmware Update tool for use in Microsoft Windows operating systems is found in this package. To display the available options for this utility, enter [Path]\HpFirmwareUpdRec -? at a command prompt or local search box. If the system has a BIOS administrator password enabled, then HpFirmwareUpdRec will prompt for the password to be entered before completing the flash process. For more information, view contents.txt or HpFirmwareUpdRec.txt.

+ + +

Using a USB Device to run HpFirmwareUpdRec

+ +

HpFirmwareUpdRec can also be run from a USB storage device, including flash memory devices and external hard drives. To do this insert the device and take note of the assigned drive letter. Run HpFirmwareUpdRec64.exe and choose the option to Create Recovery USB flash drive. Or you can manually copy the application .exe and the associated .bin file and .inf file to the root of the drive indicated by the drive letter or a folder on that drive. The update utility can then be executed from its location on the USB device. If the system has a BIOS Setup password enabled, then HpFirmwareUpdRec will prompt for the password to be entered before completing the flash process. For +more information, view contents.txt +or HpFirmwareUpdRec.txt.

+ +

Several HP models support more than one configuration, requiring a different BIOS family for each. In some cases the included version of the update utility packs both files together when creating BIOS Update USB key, which will not result in a successful update. You may avoid this problem by checking the system's BIOS version and family in the BIOS information page +(F1 or F10 key at boot) or using msinfo32.exe in Windows. Once you know the correct family for your system, delete the other 2 files in the Softpaq folder that do not match your system's BIOS. The folder default location is c:\swsetup\SP######.

+ +
+ +
+ +
+ +

Startup Menu / F10 +Setup Firmware Update

+ +

The HP Business Desktop systems provide a firmware upgrade option through both the Startup Menu and the F10 Setup application. using the "Update System BIOS" +link.  Reboot the PC and press the Esc key to display the Startup Menu. Select the "Update System and Supported Device Firmware" menu option directly for an immediate update from media (see below).   Alternatively, select "BIOS Setup (F10)" or reboot and press F10 to access the BIOS Setup utility. In the Update System BIOS menu, select "Update System and Supported Device Firmware Using Local Media".

+ +

These methods require that the firmware binary file is present on USB media or the hard drive in a specific folder - either "HP\DEVFW" or "EFI\HP\DEVFW" will support this feature. The file must be named 'firmware.bin'. +The HP Firmware Update and Recovery utility has a feature that will copy the image file to the correct folder on a USB device for you.   If no firmware file is found on USB media, the system will look for a firmware file on the hard drive.   +If a BIOS administrator password has been set, the password will be required before being able to access the "Update System BIOS" menu or BIOS Setup.   The firmware update will not be complete until the system is restarted.

+ +
+ +
+ +
+ +

HP Client Management Solutions (HPCMS) BIOS Management

+ +

Use this Softpaq with more Client Management Solutions from HP and other vendors to remotely target, distribute, and update the System BIOS and BIOS settings on network PCs. Refer to the chosen application's documentation for specific capabilities and instructions. For more information, see HP Client Management Solutions -> Additional Resources: HP Whitepapers.

+ +
+ +
+ +
+ +

BitLocker Drive Encryption / BIOS Measurements

+ +

If you have Windows BitLocker Drive Encryption (BDE) enabled on your system, it is recommended that BDE be suspended temporarily before the BIOS is updated. +You should also obtain your BDE recovery password or recovery PIN before suspending BDE. After the BIOS is flashed, BDE can be resumed.

+ +

To make a change to BDE, select Start > Control Panel > BitLocker Drive Encryption, click 'Suspend Protection' or 'Resume Protection' and then click 'Yes'.

+ +

If you use HpFirmwareUpdRec to update your BIOS in Windows, the application will attempt to suspend Bitlocker for you while the firmware updates are in progress.

+ +

As a general rule, updating the BIOS will modify measurement values stored in the Platform Configuration Registers (PCRs) of the system's security module (TPM). +Technologies that use these PCR values to verify platform health (BDE is one such example) should be temporarily disabled prior to flashing the BIOS. Once the BIOS is updated, the functions should be re-enabled and the system should be restarted so that new measurements can be taken.

+ +

The primary measurement for BIOS code is stored in PCR 0. When the TPM is enabled, the value of PCR 0 after the system has been updated should match the value listed in the revision history (History.txt).

+ +
+ +
+ +
+ +

Crisis Recovery Mode

+ +

In the event of a failed BIOS update (for example if power is lost while updating), the System BIOS may become corrupted.  Crisis Recovery Mode detects this condition and will automatically attempt to recover to a known good state. Some advanced systems have the ability to recover without user intervention - an error response during boot up showing 2 red and then 4 white blinks on the power LED indicates this mode. After restoring the BIOS image, the system will reboot normally. If this feature is not present on your model, the recovery process will search the hard drive and any USB media sources for a compatible binary image.   +The original factory image will have a suitable BIOS binary for automatic recovery without user intervention. Otherwise, the binary (.bin) file in the Softpaq root folder should be copied to the "EFI\HP\BIOS\current" folder of the desired storage device in a FAT or FAT32 partition, and the system powered on. Once the binary image is located, the BIOS will display a recovery screen and will start the recovery process. Do not power off the system until recovery is complete.

+ +

Whenever HpFirmwareUpdRec is used to update the firmware, the utility will automatically populate the recovery file in the correct location should the Tools partition or \EFI file path exist. This process can be used to configure for automatic recovery a system which has had the original hard drive image replaced or reinstalled with system software recovery media.

+ +

Sometimes there are restrictions on which BIOS versions are allowed to be installed on a platform. If the BIOS that was on +the system had restrictions, then only allowable BIOS versions may be used for recovery.

+ +

 

+ +
+ +
+ +
+ +

Copyright (c) 2025 HP Development Company, L.P. All Rights Reserved.
+Product names mentioned herein may be trademarks and/or registered trademarks +of their respective companies.

+ +
+ + + + diff --git a/Bios-Update-HP-v3.0/sp156628/History.txt b/Bios-Update-HP-v3.0/sp156628/History.txt new file mode 100644 index 0000000..9c4d990 --- /dev/null +++ b/Bios-Update-HP-v3.0/sp156628/History.txt @@ -0,0 +1,462 @@ + Revision History + S30 ROM Family + + +Models Supported: HP Engage One Pro AIO System + +Version 02.22.00 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.25 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 6.8.0 + Intel GOP EFI Driver, version 9.0.1107.A.11 + USB Type-C PD firmware FW 6.8.0 + Management Engine (ME) Firmware, version 14.1.75.2420 + Intel UEFI PXE Driver, version 0.2.1 + Realtek UEFI PXE Driver, version 2.041 + + + ENHANCEMENTS: + -Enhancement to address security vulnerabilities CVE-2024-24853 + -Enhancement to address security vulnerabilities CVE-2023-41833,CVE-2023-23904,CVE-2023-22351,CVE-2023-25546 + -Enhancement to address security vulnerabilities CVE-2023-34424, CVE-2023-38655,CVE-2024-21844,CVE-2023-48361 + -Enhancement to address security vulnerabilities CVE-2023-45229, CVE-2023-45230, CVE-2023-45231, CVE-2023-45232, CVE-2023-45233, CVE-2023-45234, CVE-2023-45235, CVE-2023-45236, CVE-2023-45237 + -Enhancement to address security vulnerabilities CVE-2024-5477 + + FIXES: + -Fixes the issue where the system shows the memory manufacturer information as "Unknow - [0X0B83]" in setup menu for memory option with Nanya (TM) 8G Memory . + + PCR0(with TPM2.0 SHA256) = A301B32E762783083FCF07D63B60F3B5C461DAA2ED8C946AA315309555594866 + +Version 02.21.00 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.24 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 6.8.0 + Intel GOP EFI Driver, version 9.0.1107.A.11 + USB Type-C PD firmware FW 6.8.0 + Management Engine (ME) Firmware, version 14.1.74.2355 + Intel UEFI PXE Driver, version 0.2.1 + Realtek UEFI PXE Driver, version 2.041 + + + ENHANCEMENTS: + - Improve stability + + FIXES: + - None + + PCR0(with TPM2.0 SHA256) = FF48A97755D53621E8D5615AE03E12F718791FD86DED2BEAD6DE8563A735B494 + +Version 02.20.01 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.24 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 6.8.0 + Intel GOP EFI Driver, version 9.0.1107.A.11 + USB Type-C PD firmware FW 6.8.0 + Management Engine (ME) Firmware, version 14.1.74.2355 + Intel UEFI PXE Driver, version 0.2.1 + Realtek UEFI PXE Driver, version 2.041 + + + ENHANCEMENTS: + - Enhancement to address security vulnerabilities CVE-2024-24853 + - Enhancement to address security vulnerabilities CVE-2023-41833, CVE-2023-23904, CVE-2023-22351, CVE-2023-25546 + - Enhancement to address security vulnerabilities CVE-2023-34424, CVE-2023-38655, CVE-2024-21844, CVE-2023-48361 + - Enhancement to address security vulnerabilities + CVE-2023-45229, CVE-2023-45230, CVE-2023-45231, CVE-2023-45232, CVE-2023-45233, CVE-2023-45234, CVE-2023-45235, CVE-2023-45236, CVE-2023-45237 + - Enhancement to address security vulnerabilities CVE-2024-5477 + + FIXES: + - Fixes the issue where the system shows the memory manufacturer information as "Unknow - [0X0B83]" in setup menu for memory option with Nanya (TM) 8G Memory . + + PCR0(with TPM2.0 SHA256) = 4DA0FA18E1648C4262E0F3716E59AB61ABA9928B2D89B68BDEEC21A1E1B0F0A6 + +Version 02.20.00 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.23 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 6.8.0 + Intel GOP EFI Driver, version 9.0.1107.A.11 + USB Type-C PD firmware FW 6.8.0 + Management Engine (ME) Firmware, version 14.1.74.2355 + Intel UEFI PXE Driver, version 0.2.1 + Realtek UEFI PXE Driver, version 2.041 + + + ENHANCEMENTS: + - Enhancement to address security vulnerabilities CVE-2024-24853 + - Enhancement to address security vulnerabilities CVE-2023-41833,CVE-2023-23904,CVE-2023-22351,CVE-2023-25546 + - Enhancement to address security vulnerabilities CVE-2023-34424, CVE-2023-38655,CVE-2024-21844,CVE-2023-48361 + - Enhancement to address security vulnerabilities + CVE-2023-45229, CVE-2023-45230, CVE-2023-45231, CVE-2023-45232, CVE-2023-45233, CVE-2023-45234, CVE-2023-45235, CVE-2023-45236, CVE-2023-45237 + + FIXES: + - Fixes the issue where the system shows the memory manufacturer information as "Unknow - [0X0B83]" in setup menu for memory option with Nanya (TM) 8G Memory + + PCR0(with TPM2.0 SHA256) = 786CE64EF93CBEBD990CEB5C7B5C9F06040810D08D17CD812454A778FAE7F3EA + +Version 02.18.01 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.23 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 6.8.0 + Intel GOP EFI Driver, version 9.0.1107.A.11 + USB Type-C PD firmware FW 6.8.0 + Management Engine (ME) Firmware, version 14.1.72.2287 + Intel UEFI PXE Driver, version 0.2.1 + Realtek UEFI PXE Driver, version 2.041 + + + ENHANCEMENTS: + - Updates Intel MCU for compatibility enhancement + - Enhancement to address security vulnerabilities CVE-2023-32282 + - Enhancement to address security vulnerabilities CVE-2023-28389, CVE-2023-27502 and CVE-2023-32633 + - Enhancement to address security vulnerabilities CVE-2023-28402, CVE-2023-27504 and CVE-2023-28383 + + FIXES: + + PCR0(with TPM2.0 SHA256) = 33985C5A7B32AF34B1B50F2310470EF6022F5DE3DCC76A0F46EF3C9FD22A855A + +Version 02.17.01 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.23 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 6.8.0 + Intel GOP EFI Driver, version 9.0.1107.A.11 + USB Type-C PD firmware FW 6.8.0 + Management Engine (ME) Firmware, version 14.1.70.2228 + Intel UEFI PXE Driver, version 0.2.1 + Realtek UEFI PXE Driver, version 2.041 + + + ENHANCEMENTS: + - Enhancement to address security vulnerabilities CVE-2023-25756, CVE-2023-22329 + - Enhancement to support SMBIOS type1 version string for 'db' addition. + - Enhancements to secure boot keys protection. + - HP strongly recommends updating system BIOS to address a potential issue with HP Sure Start that can cause some devices to experience a SecureBoot error at boot. + + FIXES: + - Fixes issue where System cannot create POST Power-On Password when selecting "Create POST Power-On Password" and entering the pin provided by the "Phone App" after creating the BIOS Administrator Password with EBAM. + - Fixes issue where Power-On Authentication with fingerprint would not function. + - Fixes issue where FUR GUI would report “Incorrect password was entered” when flashing BIOS with correct password after setting EBAM and BIOS admin password. + + PCR0(with TPM2.0 SHA256) = 2C5F850CD9826B6DA955972DF15874FB259D4E644FF84E3E47C370E51B225AE1 + +Version 02.16.20 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.23 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 6.8.0 + Intel GOP EFI Driver, version 9.0.1107.A.11 + USB Type-C PD firmware FW 6.8.0 + Management Engine (ME) Firmware, version 14.1.70.2228 + Intel UEFI PXE Driver, version 0.2.1 + Realtek UEFI PXE Driver, version 2.025 + + + ENHANCEMENTS: + + FIXES: + - HP strongly recommends updating system BIOS to address a potential issue with HP Sure Start that can cause some devices to enter into an unrecoverable state. + + PCR0(with TPM2.0 SHA256) = 5FBF73CD7D6BC55EB407E6E975BB27E7F0F78A46AC096CD4DD72BC1E8AB2DA83 + +Version 02.16.00 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.23 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 6.8.0 + Intel GOP EFI Driver, version 9.0.1107.A.11 + USB Type-C PD firmware FW 6.8.0 + Management Engine (ME) Firmware, version 14.1.70.2228 + Intel UEFI PXE Driver, version 0.2.1 + Realtek UEFI PXE Driver, version 2.025 + + + ENHANCEMENTS: + - Enhancement to address security vulnerabilities CVE-2022-40982 + - Enhancement to address security vulnerabilities CVE-2022-43505, CVE-2022-44611 + - Enhancement to address security vulnerabilities CVE-2022-29871, CVE-2022-36392 + - Add "Network Boot TFTP Window Size" setting to F10/Public WMI + - Implement new feature to clear pw by RTC battery removal & add "Clear BIOS Passwords on RTC Battery Removal" under Security tab in F10. + - Integrate Infineon TPM EFI Driver v02.02.3776.00 + + FIXES: + - Fixes black screen issue on 23" under F10 by rollbacking GOP driver. + - Fixes an issue where KBC version format is not match in system information and release note. + + PCR0(with TPM2.0 SHA256) = E700143450FFE0950F9F522535B8F6E1C2E39B21D245AB721FC4F8F82A303A46 + +Version 02.15.01 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.23 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 6.8.0 + Intel GOP EFI Driver, version 9.0.1113.A.2 + USB Type-C PD firmware FW 6.8.0 + Management Engine (ME) Firmware, version 14.1.67.2046 + Intel UEFI PXE Driver, version 0.0.24 + Realtek UEFI PXE Driver, version 2.025 + + + ENHANCEMENTS: + - Updates the Intel i225-V EFI Driver to 0.10.5 for compatibility enhancement + - Enhancement to address security vulnerabilities CVE-2022-33894 + - Updates the Intel silicon MCU for compatibility enhancement + - Updates the Intel GOP EFI Driver to 9.0.1113 for compatibility enhancement + - Updates the PD firmware to 1.2 for the system USB-C power on compatibility Enhancement + - Enhancement to support new feature that POST error will indicate QR code and URL to the proper HP Support documentation. + - Add ExtendedDHCPTimeout support in BIOS setup menu. + - Enhancement to address security vulnerabilities CVE-2022-3602, CVE-2022-3786. + FIXES: + - Fixes issue where System cannot to create POST Power-On Password when select "Create POST Power-On Password" and enter the pin provided by the "Phone App" after creating the BIOS Administrator Password with EBAM. + + PCR0(with TPM2.0 SHA256) = 6FD724D84980E7C778B69BF7AF33F9ACD90F505E0854796AA10E8210112B94DC + +Version 02.14.00 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.23 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 6.8.0 + Intel GOP EFI Driver, version 9.0.1107.A.11 + USB Type-C PD firmware FW 6.8.0 + Management Engine (ME) Firmware, version 14.1.67.2046 + Intel UEFI PXE Driver, version 0.0.24 + Realtek UEFI PXE Driver, version 2.025 + + + ENHANCEMENTS: + - Enhancement to address security vulnerabilities CVE-2022-27541 + - Enhance potentially ROM crash risk causes system no power and no LED lights. + - Enhancement to address security vulnerabilities CVE-2022-33894 + - Enhancement to address security vulnerabilities CVE-2022-43777 + - Enhancement to address security vulnerabilities CVE-2022-43778 + - Updates the Intel silicon reference code for compatibility enhancement + - Enhancement to address security vulnerabilities CVE-2022-27539 + - Add wireless 5GHz frequency supported for Indonesia + - Updates basic HP PC Hardware Diagnostics utility to 2.3.1.0. + FIXES: + - Fixes issue where BIOS Administrator password/Power on password can be accepted when the password length is less than Password Minimum Length. + - Fixes an issue where the user is unable to enter F10 BIOS menu via keyboard or unable to boot to USB storage if plug specific USB Cash Drawer. + + PCR0(with TPM2.0 SHA256) = 2178FBFF9227737DB04DA4447758A6BB8C27F614E2B54ABDB4D3BF95B0EA7D44 + +Version 02.13.00 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.22 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 6.8.0 + Intel GOP EFI Driver, version 9.0.1107.A.11 + USB Type-C PD firmware FW 6.8.0 + Management Engine (ME) Firmware, version 14.1.67.2046 + Intel UEFI PXE Driver, version 0.0.24 + Realtek UEFI PXE Driver, version 2.025 + + + ENHANCEMENTS: + - Enhancement to address security vulnerabilities CVE-2022-21198 + - Enhancement to address security vulnerabilities CVE-2022-26845, CVE-2022-29893, CVE-2022-27497, CVE-2022-33159 + - Updates the CPU microcode for Intel processors for stability enhancement. + - Updates basic HP PC Hardware Diagnostics utility to 2.3.0.0. + - Enhancement to address security vulnerabilities CVE-2022-27541. + - Enhancement to address security vulnerabilities CVE-2022-27538. + FIXES: + + + PCR0(with TPM2.0 SHA256) = 75611466D169E589BDD5B5387492A0207E39FAC3B9DE2DFA97DF220F94FD7B6D + +Version 02.12.01 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.22 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 6.8.0 + Intel GOP EFI Driver, version 9.0.1107.A.11 + USB Type-C PD firmware FW 6.8.0 + Management Engine (ME) Firmware, version 14.1.65.1990 + Intel UEFI PXE Driver, version 0.0.24 + Realtek UEFI PXE Driver, version 2.025 + + + ENHANCEMENTS: + - Add option "Second Power Button Startup Menu" to control boot to menu via power button. + - Enhancement to update Intel Management Engine firmware to 14.1.65.1990. + - Enhancement to improve connection stability when running HP Sure Recover. + - Enhancement to address security vulnerabilities CVE-2022-31644, CVE-2022-31645, CVE-2022-31646, CVE-2022-27537. + - Enhancement to address security vulnerabilities CVE-2022-31640, CVE-2022-31641, CVE-2022-31642. + - Enhancement to address security vulnerabilities CVE-2022-31635, CVE-2022-31636, CVE-2022-31637, CVE-2022-31638, CVE-2022-31639. + - Update Super IO 18.9 firmware to v9.8.22. + FIXES: + - Fixes an issue where sometimes D32- D38system shut down unexpectedly + - Fixes issue where system failure to boot on multiple boot entries with unique description. + + PCR0(with TPM2.0 SHA256) = 988E44ADE2C9055DD50C30D505E5B7E266C25911FCA8E87E034641FF02BF79E6 + +Version 02.11.01 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.17 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 6.6.0 + Intel GOP EFI Driver, version 9.0.1107.A.11 + USB Type-C PD firmware FW 6.6.0 + Management Engine (ME) Firmware, version 14.1.65.1969 + Intel UEFI PXE Driver, version 0.0.24 + Realtek UEFI PXE Driver, version 2.025 + + + ENHANCEMENTS: + + FIXES: + - Fixes issue unexpected system shutdown during system restart. + + PCR0(with TPM2.0 SHA256) = E89DFB7CBC3A5E378A620E5CFD92D97CF9548ECFA75A094C415C933F675EE5FB + +Version 02.11.00 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.17 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 6.6.0 + Intel GOP EFI Driver, version 9.0.1107.A.11 + USB Type-C PD firmware FW 6.6.0 + Management Engine (ME) Firmware, version 14.1.65.1969 + Intel UEFI PXE Driver, version 0.0.24 + Realtek UEFI PXE Driver, version 2.025 + + + ENHANCEMENTS: + - Adds Windows11 operating system support. + - Update Intel RST PreOS driver to to 18.31.3.5434 + - Update Camera fw to enhance user experience. + - Enhancement to address security vulnerabilities CVE-2021-0091, CVE-2021-0156, CVE-2021-0157, CVE-2021-0158. + - Update PD Firmware to v6.6 for compatibility enhancement.- Enhancement to address security vulnerabilities CVE-2022-21166, CVE-2022-21123, CVE-2022-21151, CVE-2022-0005. + - Enhancement to address security vulnerabilities CVE-2021-33122. + - Remove physical presence interface pops up when changing the ""Intel Software Guard Extensions (SGX)"" setting from ""Software control"" to ""Disable"". + - Enhancement to address security vulnerabilities CVE-2022-23924, CVE-2022-23925, CVE-2022-23926, CVE-2022-23927, CVE-2022-23928, CVE-2022-23929, CVE-2022-23930, CVE-2022-23931, CVE-2022-23932, CVE-2022-23933, CVE-2022-23934. + - Enhancement to address security vulnerabilities CVE-2022-23953, CVE-2022-23954, CVE-2022-23955, CVE-2022-23956, CVE-2022-23957, CVE-2022-23958. + - Adds a feature to control display of BIOS Admin login based on ""BIOS Administrator visible at power-on authentication"" when Enhanced BIOS Authentication Mode (EBAM) is set. + - Enhancement to address security vulnerabilities CVE-2022-0004. + - Enhancement to address security vulnerabilities CVE-2021-33123, CVE-2021-33124, CVE-2021-33103. + + FIXES: + - Fixes issue where hub was turned off automatically and all ports have no function during BIOS update. + - Fixes issue where Remote HP PC Diagnostics Execution Physical Presence Interface continuous occur when some specific settings are applied at the same time. + - Fixes issue where some F10 settings or help message display incomplete when change to non-English language.- Fixes an issue where system attempt to recover ME infinitely if customer deploy recover image via 3-party application + - Fixes an issue where TBT firmware display different fromat with Setup Menu during the BIOS update process via FUR (HP Firmware Update and Recovery). + - Fixes an issue where system cannot boot to OS while 3-rd party audio card installed (Digigram VX222e) + - Fixes issue where system failure to boot after switching between two different saved bootstores. + + PCR0(with TPM2.0 SHA256) = 94DF17E3A4E2409459ED282678364B7187CC48EFD43C515E1E27627A4E4DF035 + +Version 02.10.10 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.17 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 6.6.0 + Intel GOP EFI Driver, version 9.0.1107.A.11 + USB Type-C PD firmware FW 6.6.0 + Management Engine (ME) Firmware, version 14.1.60.1807 + Intel UEFI PXE Driver, version 0.0.24 + Realtek UEFI PXE Driver, version 2.025 + + + ENHANCEMENTS: + - Enhancement to address security vulnerabilities CVE-2022-23924, CVE-2022-23925, CVE-2022-23926, CVE-2022-23927, CVE-2022-23928, CVE-2022-23929, CVE-2022-23930, CVE-2022-23931, CVE-2022-23932, CVE-2022-23933, CVE-2022-23934. + - Enhancement to address security vulnerabilities CVE-2022-23953, CVE-2022-23954, CVE-2022-23955, CVE-2022-23956, CVE-2022-23957, CVE-2022-23958. + - Adds a feature to control display of BIOS Admin login based on "BIOS Administrator visible at power-on authentication" when Enhanced BIOS Authentication Mode (EBAM) is set. + + FIXES: + - Fixes issue where system would fail to boot after switching between two different saved bootstores. + + PCR0(with TPM2.0 SHA256) = E7A325FADB8C69FE4D73F8BE665CF8E2223D98F6896C812D2B2F32F43C3BE952 + +Version 02.10.00 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.17 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 6.6.0 + Intel GOP EFI Driver, version 9.0.1107.A.11 + USB Type-C PD firmware FW 6.6.0 + Management Engine (ME) Firmware, version 14.1.60.1807 + Intel UEFI PXE Driver, version 0.0.24 + Realtek UEFI PXE Driver, version 2.025 + + + ENHANCEMENTS: + - Updates Intel ME Firmware 14.1.60.1807. + - Enhancement to address security vulnerabilities CVE-2021-33107. + - Enhancement to address security vulnerabilities CVE-2021-0103, CVE-2021-0107, CVE-2021-0111, CVE-2021-0114, CVE-2021-0115, CVE-2021-0116, CVE-2021-0117, CVE-2021-0118, CVE-2021-0119, CVE-2021-0124, CVE-2021-0125. + - Enhancement to address security vulnerabilities CVE-2021-0127. + - Enhancement to address security vulnerabilities CVE-2021-39297, CVE-2021-39299, CVE-2021-39300, CVE-2021-39301. + - Disable Turbo Boost as BIOS default setting. + + FIXES: + + PCR0(with TPM2.0 SHA256) = 8CF3A8FE3C687F2AF14FE31735DE7A6CE08386A5DEECB2FD9878B1180ADD7AE8 + +Version 02.09.00 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.17 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 6.6.0 + Intel GOP EFI Driver, version 9.0.1107.A.11 + USB Type-C PD firmware FW 6.6.0 + Management Engine (ME) Firmware, version 14.1.53.1649 + Intel UEFI PXE Driver, version 0.0.24 + Realtek UEFI PXE Driver, version 2.025 + + + ENHANCEMENTS: + - Adds Windows11 operating system support. + - Update Intel RST PreOS driver to 18.31.3.5434 + - Update Camera fw to enhance user experience. + - Enhancement to address security vulnerabilities CVE-2021-0091, CVE-2021-0156, CVE-2021-0157, CVE-2021-0158. + - Update PD Firmware to v6.6 for compatibility enhancement. + + FIXES: + - Fixes issue where hub would automatically turn off and all ports would lose functionality during BIOS update. + - Fixes issue where Remote HP PC Diagnostics Execution Physical Presence Interface continuously occurred when some specific settings are applied at the same time. + - Fixes issue where some F10 settings or help messages display incomplete when system is changed to a non-English languag + + PCR0(with TPM2.0 SHA256) = B6CAB34E18600F06E732D1E9F413FCD84ECF1971BD9270D553399FE1B8AE5C45 + +Version 02.08.01 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.17 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 6.3.0 + Intel GOP EFI Driver, version 9.0.1107.A.11 + USB Type-C PD firmware FW 6.3.0 + Management Engine (ME) Firmware, version 14.1.53.1649 + Intel UEFI PXE Driver, version 0.0.24 + Realtek UEFI PXE Driver, version 2.025 + + + ENHANCEMENTS: + - Adds support for Intel Pyramid Glacier. + - Updates HP Firmware Update and Recovery tool to v2.0.31.1 to fix issue where current and new versions are reversed. + + FIXES: + - Fixes issue where some F10 settings or help messages would not display completely when changing language to non-English language. + - Fixes issue where Power On Password cannot be cleared after selecting 'Restore Security Settings to Factory Defaults' with Sure Admin enabled. + - Fixes issue where an error message pops up (0x8007054F) while enabling Power-On Authentication if user account name exceeds 11 characters. + - Fixes issue where Intune service would report that the TCG device is 'NOT COMPLIANT'. + - Fixes issue where PCR7 Configuration is 'Binding Not Possible' while Intel Management Engine is "permanently disable" + + PCR0(with TPM2.0 SHA256) = 8203A5D3CFE78642F92F617F36F6E114DD0C1268BF73543A81984B5A11142507 + +Version 02.02.01 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.17 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 6.3.0 + Intel GOP EFI Driver, version 9.0.1107.A.11 + USB Type-C PD firmware FW 6.3.0 + Management Engine (ME) Firmware, version 14.1.53.1649 + Intel UEFI PXE Driver, version 0.0.24 + Realtek UEFI PXE Driver, version 2.025 + + + -Update Intel Reference code to 09.00.45.10 + -Update Intel MRC to 0.0.0.75 + -Update Intel Microcode to 0xE4/0xE6. + -Update Super IO to 09.08.17 + -Update Management Engine (ME) Firmware, version to 14.1.53.1649 + -Update Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C to 6.3.0 + -Update Adjust minimum brightness for 23.8" panel + -Enhanced CVE-2020-24506, CVE-2020-24507, CVE-2020-8703, CVE-2020-8704, CVE-2020-24512, CVE-2020-24511, CVE-2020-12359, CVE-2020-8700 + + PCR0(with TPM2.0 SHA256) = 3FB6FE2357C5D778C5E45CBE4BACE8DF284BEE54A2179F4A08D56A6AD91E7CDA +Version 02.01.00 + This BIOS upgrade package also includes the following firmware versions: (only list appropriate ones) + SIO Firmware, version 09.08.14 + Cypress Power Delivery (PD) Firmware (CCG5),Cypress - CCG5C: 5.8.0 + Intel GOP EFI Driver, version 9.0.1107.A.11 + USB Type-C PD firmware FW 5.8.0 + Management Engine (ME) Firmware, version 14.0.45.1389 + Intel UEFI PXE Driver, version 0.0.24 + Realtek UEFI PXE Driver, version 2.025 + - Initial BIOS release. + PCR0(with TPM2.0 SHA256) = C24CCDCAD861B65C4C89415ED0A2047E4CC53CCA022FA7F5C8304DB817B16C23 + diff --git a/Bios-Update-HP-v3.0/sp156628/HpFirmwareUpdRec.exe b/Bios-Update-HP-v3.0/sp156628/HpFirmwareUpdRec.exe new file mode 100644 index 0000000..f7305f2 Binary files /dev/null and b/Bios-Update-HP-v3.0/sp156628/HpFirmwareUpdRec.exe differ diff --git a/Bios-Update-HP-v3.0/sp156628/HpFirmwareUpdRec.txt b/Bios-Update-HP-v3.0/sp156628/HpFirmwareUpdRec.txt new file mode 100644 index 0000000..d41dfc5 --- /dev/null +++ b/Bios-Update-HP-v3.0/sp156628/HpFirmwareUpdRec.txt @@ -0,0 +1,84 @@ +HP Firmware Update and Recovery + +The purpose of the HP Firmware Update and Recovery Utility is to provide a method for end-users +to update the system BIOS, ME (Intel only), and other supported firmware on a system running MS Windows. + +NOTES: + 1. [Path]\HPFIRMWAREUPDREC -? will display the available options for this utility. + + 2. If the system has a BIOS Setup password enabled, then HPFIRMWAREUPDREC will prompt + for the password to be entered before completing the update process. + +USAGE: + + 1. Close all other applications before launching HPFIRMWAREUPDREC. The system will + restart to apply the update. + + 2. Open the folder containing the application and firmware binary file. Double-click + on the HPFIRMWAREUPDREC icon. + + 3. HPFIRMWAREUPDREC will inform the user that a firmware update is about to occur. + + 4. The version of the firmware image in the binary file and the version of the + current system firmware are displayed. Once OK is selected the system will restart + to begin the update process. + + 5. Upon completion, the user is notified that the firmware update was successful. + Select Restart. + + 6. On restart, you may see the firmware performing the final update, and the system + may reset several times before loading the operating system. + + 7. When the system starts Windows, the system firmware update is complete. + + +ADVANCED USAGE: + + 1. Close all other applications before launching HPFIRMWAREUPDREC. + + 2. On the Windows Task Bar select Start, then Run, and enter + the following on the command line: + [Path]\HPFIRMWAREUPDREC -f[bin file] + + 3. HPFIRMWAREUPDREC will inform the user that a firmware update is about to occur. + + 4. The version of the firmware image in the [bin file] and the version of the + current system firmware are displayed. Once OK is selected the system will + restart to begin the update process. + + 5. Upon completion, the user is notified that the firmware update was successful. + Select Restart. + + 6. On restart, you may see the firmware performing the final update, and the system + may reset several times before loading the operating system. + + 7. When the system starts Windows, the system firmware update is complete. + + + +Command Line Options + + +-fBIN-file Specifies the path to the .BIN image file, and does not change the working + directory?from the location of the utility. Default is *.BIN in the executable + folder. Valid with all other options. + +-ppassword-file Specify encrypted password file created with the HpqPswd utility. Valid with + all other options. + +-s Silent mode. Suppresses all output. + +-a Eliminates version comparison when -s is present. It is ignored otherwise. There + is no log entry or usage dialog if it appears without the silent option. + +-b If BitLocker with TPM is in use, automatically suspend it. + +-? Show the same usage dialog that appears if an invalid command line is detected. + This options overrides all other options, including -s. + + +Copyright (c) 2019 HP Development Company, L.P. + + +Product names mentioned herein may be trademarks and/or registered trademarks +of their respective companies. diff --git a/Bios-Update-HP-v3.0/sp156628/HpFirmwareUpdRec64.exe b/Bios-Update-HP-v3.0/sp156628/HpFirmwareUpdRec64.exe new file mode 100644 index 0000000..8b483cd Binary files /dev/null and b/Bios-Update-HP-v3.0/sp156628/HpFirmwareUpdRec64.exe differ diff --git a/Bios-Update-HP-v3.0/sp156628/HpqPswd.exe b/Bios-Update-HP-v3.0/sp156628/HpqPswd.exe new file mode 100644 index 0000000..07b0182 Binary files /dev/null and b/Bios-Update-HP-v3.0/sp156628/HpqPswd.exe differ diff --git a/Bios-Update-HP-v3.0/sp156628/HpqPswd.txt b/Bios-Update-HP-v3.0/sp156628/HpqPswd.txt new file mode 100644 index 0000000..e8833d0 --- /dev/null +++ b/Bios-Update-HP-v3.0/sp156628/HpqPswd.txt @@ -0,0 +1,29 @@ +HP Password Encryption Utility Client Usage Guide + +HPQPswd is a utility for saving a BIOS Setup Password to an encrypted file. +This file can be provided to HP BIOS update utilities for automated scripting, +to avoid user prompting. + +Command Line Switches + +Command Result + +-p"password" BIOS Setup Password to encrypt. Quotes are optional. +-f"filename" File pathname to create. Quotes are optional. +-s Silent mode. Requires p and f options. +-? Show usage. + +Requirements: + +- AES 256 encryption is used. +- User interface prompts for password, verification, and destination file. +- Browse supported for file location. +- Command line options are provided to support automated silent mode execution. +- No dependencies on other software. +- Support password max length of 32 Unicode characters. + + +Copyright (c) 2019 HP Development Company, L.P. + +Product names mentioned herein may be trademarks and/or registered trademarks +of their respective companies. diff --git a/Bios-Update-HP-v3.0/sp156628/HpqPswd64.exe b/Bios-Update-HP-v3.0/sp156628/HpqPswd64.exe new file mode 100644 index 0000000..6c84d45 Binary files /dev/null and b/Bios-Update-HP-v3.0/sp156628/HpqPswd64.exe differ diff --git a/Bios-Update-HP-v3.0/sp156628/S30_02220000.bin b/Bios-Update-HP-v3.0/sp156628/S30_02220000.bin new file mode 100644 index 0000000..3352ca1 Binary files /dev/null and b/Bios-Update-HP-v3.0/sp156628/S30_02220000.bin differ diff --git a/Bios-Update-HP-v3.0/sp156628/S30_02220000.inf b/Bios-Update-HP-v3.0/sp156628/S30_02220000.inf new file mode 100644 index 0000000..a26a898 --- /dev/null +++ b/Bios-Update-HP-v3.0/sp156628/S30_02220000.inf @@ -0,0 +1,57 @@ + +; Copyright (C) 2024 HP Development Company. L.P. All Rights Reserved. + +[Version] +Signature = "$WINDOWS NT$" +Provider = %Provider% +Class = Firmware +ClassGuid = {f2e7dd72-6468-4e36-b6f1-6488f42c1b52} +DriverVer = 12/30/2024,2.22.0.0 +CatalogFile = S30_02220000.cat +PnpLockdown = 1 + +[Manufacturer] +%MfgName% = Firmware,NTx86, NTamd64, NTarm + +[Firmware.NTx86] +%FirmwareDesc% = Firmware_Install,UEFI\RES_{45518414-ff98-4d79-a2b6-ac718e0d1909} + +[Firmware.NTamd64] +%FirmwareDesc% = Firmware_Install,UEFI\RES_{45518414-ff98-4d79-a2b6-ac718e0d1909} + +[Firmware.NTarm] +%FirmwareDesc% = Firmware_Install,UEFI\RES_{45518414-ff98-4d79-a2b6-ac718e0d1909} + +[Firmware_Install.NT] +CopyFiles = Firmware_CopyFiles + +[Firmware_CopyFiles] +S30_02220000.bin + +[Firmware_Install.NT.Hw] +AddReg = Firmware_AddReg + +[Firmware_AddReg] +HKR,,FirmwareId,,{45518414-ff98-4d79-a2b6-ac718e0d1909} +HKR,,FirmwareVersion,%REG_DWORD%,0x02160000 +HKR,,FirmwareFilename,,{45518414-ff98-4d79-a2b6-ac718e0d1909}\S30_02220000.bin + +[SourceDisksNames] +1 = %DiskName% + +[SourceDisksFiles] +S30_02220000.bin = 1 + +[DestinationDirs] +DefaultDestDir = %DIRID_WINDOWS%,Firmware\{45518414-ff98-4d79-a2b6-ac718e0d1909} ; %SystemRoot%\Firmware + +[Strings] +; localizable +Provider = "HP Inc." +MfgName = "HP Inc." +FirmwareDesc = "HP S30 System Firmware" +DiskName = "Firmware Update" + +; non-localizable +DIRID_WINDOWS = 10 +REG_DWORD = 0x00010001 diff --git a/Bios-Update-HP-v3.0/sp156628/contents.txt b/Bios-Update-HP-v3.0/sp156628/contents.txt new file mode 100644 index 0000000..2ddc258 --- /dev/null +++ b/Bios-Update-HP-v3.0/sp156628/contents.txt @@ -0,0 +1,32 @@ +FILES INCLUDED IN THIS PACKAGE: + +Bios Flash.htm (How to Use documentation) +History.txt (Softpaq release history) +HPFIRMWAREUPDREC.exe +HPFIRMWAREUPDREC64.exe +HPFIRMWAREUPDREC.txt +HpqPswd.exe +HpqPswd64.exe +HpqPswd.txt +contents.txt (this file) +xxx_xxxxxx.bin (firmware image file) +xxx_xxxxxx.inf (firmware install map) +license.txt (copy of Softpaq license text) +BCUsignature32.dll +BCUsignature64.dll + +HpFirmwareUpdRec.exe - A utility to locally update the system firmware on + individual systems in Microsoft Windows. + +HpFirmwareUpdRec64.exe - 64-bit version of HpFirmwareUpdRec.exe + + +HPQ Password Utility - HPQPswd is a utility for saving a BIOS Setup Password to + an encrypted file. This file is provided to HP firmware update + utilities for automated scripting to avoid user prompting. + + +Copyright (c) 2020 HP Development Company, L.P. + +Product names mentioned herein may be trademarks and/or registered trademarks +of their respective companies. diff --git a/Bios-Update-HP-v3.0/sp156628/license.txt b/Bios-Update-HP-v3.0/sp156628/license.txt new file mode 100644 index 0000000..567c6da --- /dev/null +++ b/Bios-Update-HP-v3.0/sp156628/license.txt @@ -0,0 +1,49 @@ +PLEASE READ CAREFULLY BEFORE USING THIS SOFTWARE OR SOFTWARE AVAILABLE ON AN HP PRODUCT: +This End-User license Agreement ("EULA") is a legal agreement between (a) you (either an individual or a single entity) and (b) HP Inc. ("HP") that governs your use of any Software Product, installed on or made available by HP for use as a standalone product or with your HP product ("HP Product") that is not otherwise subject to a separate license agreement between you and HP or its suppliers. The term "Software Product" includes application software, firmware, operating systems, drivers, and any other types of software and may include associated media, printed materials, and online or electronic documentation. +AN AMENDMENT OR ADDENDUM TO THIS EULA MAY ACCOMPANY THE HP PRODUCT OR THE SOFTWARE PRODUCT. IN THE EVENT OF A CONFLICT BETWEEN ANY SUCH AMENDMENT OR ADDENDUM AND THIS EULA, THE TERMS OF THE AMENDMENT OR ADDENDUM SHALL CONTROL. +RIGHTS IN THE SOFTWARE PRODUCT ARE OFFERED ONLY ON THE CONDITION THAT YOU AGREE TO ALL TERMS AND CONDITIONS OF THIS EULA. BY INSTALLING, COPYING, DOWNLOADING, OR OTHERWISE USING THE SOFTWARE PRODUCT, YOU AGREE TO BE BOUND BY THE TERMS OF THIS EULA. IF YOU DO NOT ACCEPT THESE LICENSE TERMS, YOUR SOLE REMEDY IS TO RETURN THE ENTIRE UNUSED PRODUCT (HARDWARE AND SOFTWARE) WITHIN 14 DAYS FOR A REFUND SUBJECT TO THE REFUND POLICY OF YOUR PLACE OF PURCHASE. +THIS EULA IS A GLOBAL AGREEMENT AND IS NOT SPECIFIC TO ANY PARTICULAR COUNTRY, STATE OR TERRITORY. IF YOU ACQUIRED THE HP PRODUCT OR THE SOFTWARE PRODUCT AS A CONSUMER WITHIN THE MEANING OF RELEVANT CONSUMER LEGISLATION IN YOUR COUNTRY, STATE OR TERRITORY, THEN DESPITE ANYTHING TO THE CONTRARY IN THIS EULA, NOTHING IN THIS EULA AFFECTS ANY NON-EXCLUDABLE STATUTORY RIGHTS OR REMEDIES THAT YOU MAY HAVE UNDER SUCH CONSUMER LEGISLATION; THIS EULA IS SUBJECT TO THOSE RIGHTS AND REMEDIES. +1. GRANT OF LICENSE. HP grants you the following rights provided you comply with all terms and conditions of this EULA: +a. Use. You may use the Software Product on a single HP Product. If the Software Product is provided to you via the internet and was originally licensed for use on more than one HP Product, you may install and use the Software Product only on those HP Products. You may not separate component parts of the Software Product for use on more than one HP Product. You do not have the right to distribute the Software Product. You may load the Software Product into your HP Product’s temporary memory (RAM) for purposes of using the Software Product. +b. Storage. You may copy the Software Product into the local memory or storage device of the HP Product. +c. Copying. You may make archival or back-up copies of the Software Product, provided the copy contains all of the original Software Product's proprietary notices and that it is used only for back-up purposes. +d. Reservation of Rights. To the maximum extent permitted by applicable law, HP and its suppliers reserve all rights not expressly granted to you in this EULA. +e. Freeware. Notwithstanding the terms and conditions of this EULA, all or any portion of the Software Product which constitutes non-proprietary HP software or software provided under public license by third parties ("Freeware"), is licensed to you subject to the terms and conditions of the software license agreement accompanying such Freeware whether in the form of a discrete agreement, shrink wrap license or electronic license terms accepted at time of download. Use of the Freeware by you shall be governed entirely by the terms and conditions of such license. +f. Recovery Solution. Any software recovery solution provided with/for your HP Product, whether in the form of a hard disk drive-based solution, an external media-based recovery solution (e.g. CD or DVD) or an equivalent solution delivered in any other form, may only be used for restoring the hard disk of the HP Product with/for which the recovery solution was originally purchased. The use of any Microsoft operating system software contained in such recovery solution shall be governed by the Microsoft License Agreement. +2. UPGRADES. To use a Software Product identified as an upgrade, you must first be licensed for the original Software Product identified by HP as eligible for the upgrade. After upgrading, you may no longer use the original Software Product that formed the basis for your upgrade eligibility as a separate Software Product. +3. ADDITIONAL SOFTWARE. This EULA applies to updates or supplements to the original Software Product provided by HP unless HP provides other terms along with the update or supplement. In case of a conflict between such terms, the other terms will prevail. +4. TRANSFER. +a. Third Party. The initial user of the Software Product may make a one-time transfer of the Software Product to another end user. Any transfer must include all component parts, media, printed materials, this EULA, and if applicable, the Certificate of Authenticity. The transfer may not be an indirect transfer, such as a consignment. Prior to the transfer, the end user receiving the transferred product must agree to all the EULA terms. Upon transfer of the Software Product, your license is automatically terminated. +b. Restrictions. You may not rent, lease, or lend the Software Product or use the Software Product for commercial timesharing or bureau use. You may not sublicense, assign, or transfer the license or Software Product except as expressly provided in this EULA. +5. PROPRIETARY RIGHTS. All intellectual property rights in the Software Product and user documentation are owned by HP or its suppliers and are protected by law, including but not limited to United States copyright, trade secret, and trademark law, as well as other applicable laws and international treaty provisions. You shall not remove any product identification, copyright notices, or proprietary restrictions from the Software Product. +6. LIMITATION ON REVERSE ENGINEERING. You may not reverse engineer, decompile, or disassemble the Software Product, except and only to the extent that the right to do so is mandated under applicable law notwithstanding this limitation or it is expressly provided for in this EULA. +7. TERM. This EULA is effective unless terminated or rejected. This EULA will also terminate upon conditions set forth elsewhere in this EULA or if you fail to comply with any term or condition of this EULA. +8. NOTICE OF DATA COLLECTION. HP and its affiliates may collect, combine, and use device and individual user information you provide in relation to support services related to the Software Product. HP will not use this information to market to you without your consent. Learn More about HP data collection practices at www.hp.com/go/privacy. +9. DISCLAIMER OF WARRANTIES. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, HP AND ITS SUPPLIERS PROVIDE THE SOFTWARE PRODUCT "AS IS" AND WITH ALL FAULTS, AND HEREBY DISCLAIM ALL OTHER WARRANTIES, DUTIES AND CONDITIONS, EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, WARRANTIES: (i) OF FITNESS FOR A PARTICULAR PURPOSE; (ii) OF MERCHANTABILITY; (iii) OF TITLE, (iv) OF NONINFRINGEMENT, (v) THAT THE SOFTWARE PRODUCT WILL FUNCTION WITH NON-HP SUPPLIES OR ACCESSORIES; AND (vi) OF LACK OF VIRUSES ALL WITH REGARD TO THE SOFTWARE PRODUCT. Some states/jurisdictions do not allow exclusion of implied warranties or limitations on the duration of implied warranties, so the above disclaimer may not apply to you in its entirety. +10. LIMITATION OF LIABILITY. Subject to local law, notwithstanding any damages that you might incur, the entire liability of HP and any of its suppliers under any provision of this EULA and your exclusive remedy for all of the foregoing shall be limited to the greater of the amount actually paid by you separately for the Software Product or U.S. $5.00. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL HP OR ITS SUPPLIERS BE LIABLE FOR (A) ANY LOSS OF PROFITS, BUSINESS, REVENUE, ANTICIPATED SAVINGS, GOODWILL, DATA, OR CONTRACTS, (B) ANY TYPE OF SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER, (C) BUSINESS INTERRUPTION, (D) PERSONAL INJURY, OR (E) LOSS OF PRIVACY, ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF OR INABILITY TO USE THE SOFTWARE PRODUCT, OR OTHERWISE IN CONNECTION WITH ANY PROVISION OF THIS EULA, EVEN IF HP OR ANY SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES AND EVEN IF THE REMEDY FAILS OF ITS ESSENTIAL PURPOSE. Some states/jurisdictions do not allow the exclusion or limitation of incidental, consequential, product liability, or certain direct damages, so the above limitation or exclusion may not apply to you. +11. U.S. GOVERNMENT CUSTOMERS. Consistent with FAR 12.211 and 12.212, Commercial Computer Software, Computer Software Documentation, and Technical Data for Commercial Items are licensed to the U.S. Government under HP's standard commercial license. +12. COMPLIANCE WITH EXPORT LAWS. You shall comply with all laws and regulations of the United States and other countries ("Export Laws") to assure that the Software Product is not (1) exported, directly or indirectly, in violation of Export Laws, or (2) used for any purpose prohibited by Export Laws, including, without limitation, nuclear. +13. CAPACITY AND AUTHORITY TO CONTRACT. You represent that you are of the legal age of majority in your state or country of residence and, if applicable, you are duly authorized by your employer to enter into this contract. +14. APPLICABLE LAW. If the Software Product is provided as part of an HP Product, this EULA is governed by the laws of the country, state, or territory in which the HP Product was purchased. If the Software Product is being licensed to you as a standalone product, this EULA is governed by the laws of the State of California, U.S.A. +15. ENTIRE AGREEMENT. This EULA (including any addendum or amendment to this EULA which is included with the HP Product) is the entire agreement between you and HP relating to the Software Product, and this EULA supersedes all prior or contemporaneous oral or written communications, proposals, and representations with respect to the Software Product or any other subject matter covered by this EULA. To the extent the terms of any HP policies or programs for support services conflict with the terms of this EULA, the terms of this EULA shall control. Should any term, condition or provision of this EULA be held invalid or unenforceable as to any party or circumstance, such ruling shall not affect the validity and enforceability of the remaining terms, conditions, and provisions of this EULA. +16. CONSUMER RIGHTS. Consumers in some countries, states, or territories may have the benefit of certain statutory rights, remedies, localizations, and limitations under consumer legislation in respect of which HP’s liability cannot lawfully be excluded or limited. Notwithstanding anything to the contrary in this EULA, if you acquired the HP Product or licensed the Software Product as a consumer within the meaning of relevant consumer legislation in your country, state, or territory, the provisions of this EULA (including the disclaimers of warranties, limitations and exclusion of liability) must be read subject to applicable law and apply only to the maximum extent permitted by such applicable law. For example: +AUSTRALIA: If you acquired the Software Product as a consumer within the meaning of the ‘Australian Consumer Law’ under the Australian Competition and Consumer Act 2010 (Cth), then despite any other provision of this EULA: +(1) The Software Product comes with guarantees that cannot be excluded under the Australian Consumer Law, including that goods will be of acceptable quality and services will be supplied with due care and skill. If HP fails to comply with any such consumer guarantee, HP’s or HP’s licensors’ liability is limited to the following: +(A) in connection with the provision of warranty and support services for the Software Product, to any one or more of the following (at HP’s discretion): (i) the supplying of the services again; or (ii) the payment of the costs of having the services supplied again; and +(B) in connection with the provision of the Software Product, to any one or more of the following (at HP’s discretion): (i) the replacement of the Software Product or the supply of equivalent software; (ii) the repair of the Software Product; (iii) the payment of the costs of replacing the Software Product or of acquiring equivalent software; or (iv) the payment of the costs of having the Software Product repaired; and +(C) otherwise, to the maximum extent permitted by law; +(2) Nothing in this EULA excludes, restricts, or modifies any right or remedy, or any guarantee, warranty, or other term or condition implied or imposed by the Australian Consumer Law which cannot be lawfully excluded or limited; and +(3) The benefits provided to you by the warranties in this EULA are in addition to other rights and remedies available to you under applicable law in relation to the goods or services to which the warranty relates. +If you think that you are entitled to any warranty under this EULA or any of the above remedies, please contact HP at: +HP PPS Australia Pty Ltd +353 Burwood Hwy +Forest Hill +VIC 3131 +Australia +To initiate a support request or warranty claim, please call 13 10 47 (within Australia) or +61 2 8278 1039 (if dialing internationally) or visit www.hp.com.au and select the “Customer Service” option for the most current list of phone support numbers. +NEW ZEALAND: If you are purchasing goods for personal, domestic or household use or consumption and not for the purpose of a business as a New Zealand consumer, you are entitled to repair, replacement, or refund for a failure, as well as compensation for other reasonably foreseeable loss or damage as a result of the failure. +© Copyright 2015, 2021 HP Development Company, L.P. +The information contained herein is subject to change without notice. The only warranties for HP products and services are set forth in the express warranty statements accompanying such products and services. Nothing herein should be construed as constituting an additional warranty. HP shall not be liable for technical or editorial errors or omissions contained herein. +Third Edition: June 2021 +First Edition: August 2015 +Document Part Number: 817678-003 diff --git a/Bios-Update-HP-v3.0/sp156628/logo.bmp b/Bios-Update-HP-v3.0/sp156628/logo.bmp new file mode 100644 index 0000000..6d7553e Binary files /dev/null and b/Bios-Update-HP-v3.0/sp156628/logo.bmp differ diff --git a/Chrome-HideCrash/HideCrash.ps1 b/Chrome-HideCrash/HideCrash.ps1 new file mode 100644 index 0000000..e3b7131 --- /dev/null +++ b/Chrome-HideCrash/HideCrash.ps1 @@ -0,0 +1 @@ +(Get-Content "$env:USERPROFILE\AppData\Local\Google\Chrome\User Data\Default\Preferences").replace('"exit_type":"Crashed"', '"exit_type":"Normal"') | Set-Content "$env:USERPROFILE\AppData\Local\Google\Chrome\User Data\Default\Preferences" \ No newline at end of file diff --git a/Chrome-HideCrash/readme.md b/Chrome-HideCrash/readme.md new file mode 100644 index 0000000..31267fd --- /dev/null +++ b/Chrome-HideCrash/readme.md @@ -0,0 +1,10 @@ +# 🌐 Chrome Notification Tweaks + +## ✅ Prerequisites +- Script must be run while **Chrome is closed**. +- Run as the **logged-in user** (modifies user profile). + +## 🔧 What it does +- `hidecrash.ps1` edits Chrome’s `Preferences` file to: + - Disable **crash notifications** (`exit_type` forced to `Normal`). + - Disable **Translate notifications**. diff --git a/Deploy-Chrome/DownloadInstall.ps1 b/Deploy-Chrome/DownloadInstall.ps1 new file mode 100644 index 0000000..f416bca --- /dev/null +++ b/Deploy-Chrome/DownloadInstall.ps1 @@ -0,0 +1,110 @@ +<# +.SYNOPSIS + Fast download & silent install of Google Chrome Enterprise MSI (auto-arch). +.DESCRIPTION + Tries curl.exe (fast), then BITS (robust), then Invoke-WebRequest as fallback. + No version checks. Always installs. Retries & timeouts included. +#> + +$ErrorActionPreference = 'Stop' + +# -------- Config -------- +$Is64OS = [Environment]::Is64BitOperatingSystem +$Arch = if ($Is64OS) { 'x64' } else { 'x86' } +$Url64 = 'https://dl.google.com/chrome/install/GoogleChromeStandaloneEnterprise64.msi' +$Url32 = 'https://dl.google.com/chrome/install/GoogleChromeStandaloneEnterprise.msi' +$Url = if ($Arch -eq 'x64') { $Url64 } else { $Url32 } + +$OutFile = Join-Path $env:TEMP ("GoogleChrome_Enterprise_{0}.msi" -f $Arch) +$MaxRetries = 3 +$TimeoutSec = 120 # per attempt (curl/IWR) +$BitsTimeoutS = 300 # global timeout for BITS attempt +$RetryDelayS = 3 + +# (Optional) Proxy if needed +# $env:HTTPS_PROXY = 'http://proxy.mycorp.local:8080' +# $env:HTTP_PROXY = 'http://proxy.mycorp.local:8080' + +# -------- Helpers -------- +function Test-FileValid([string]$Path){ + if (-not (Test-Path $Path)) { return $false } + try { + $fi = Get-Item $Path -ErrorAction Stop + return ($fi.Length -gt 1MB) # Chrome MSI is ~100+ MB; change if needed + } catch { return $false } +} + +function Download-WithCurl([string]$Url,[string]$Dst,[int]$TimeoutSec){ + $curl = Get-Command curl.exe -ErrorAction SilentlyContinue + if (-not $curl) { return $false } + # -L follow redirects, --fail to fail on HTTP errors, --max-time timeout seconds + $args = @('-L', '--fail', '--max-time', $TimeoutSec, '-o', $Dst, $Url) + $p = Start-Process -FilePath $curl.Source -ArgumentList $args -Wait -PassThru -WindowStyle Hidden + return ($p.ExitCode -eq 0 -and (Test-FileValid $Dst)) +} + +function Download-WithBITS([string]$Url,[string]$Dst,[int]$TimeoutS){ + # Foreground = plus rapide que background (throttling OS réduit) + try { + if (Test-Path $Dst) { Remove-Item $Dst -Force -ErrorAction SilentlyContinue } + $job = Start-BitsTransfer -Source $Url -Destination $Dst -Priority Foreground -Asynchronous -ErrorAction Stop + $sw = [System.Diagnostics.Stopwatch]::StartNew() + while ($job.JobState -in 'Connecting','Transferring','Queued') { + Start-Sleep -Seconds 1 + $job = Get-BitsTransfer -Id $job.Id -ErrorAction SilentlyContinue + if ($sw.Elapsed.TotalSeconds -gt $TimeoutS) { + Remove-BitsTransfer -BitsJob $job -ErrorAction SilentlyContinue + throw "BITS timeout after ${TimeoutS}s" + } + } + if ($job.JobState -eq 'Transferred') { + Complete-BitsTransfer -BitsJob $job -ErrorAction Stop + } else { + throw "BITS failed with state: $($job.JobState)" + } + return (Test-FileValid $Dst) + } catch { + return $false + } +} + +function Download-WithIWR([string]$Url,[string]$Dst,[int]$TimeoutSec){ + try { + if (Test-Path $Dst) { Remove-Item $Dst -Force -ErrorAction SilentlyContinue } + [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls13 + Invoke-WebRequest -Uri $Url -OutFile $Dst -UseBasicParsing -TimeoutSec $TimeoutSec + return (Test-FileValid $Dst) + } catch { return $false } +} + +function Download-Fast([string]$Url,[string]$Dst){ + for ($i=1; $i -le $MaxRetries; $i++) { + Write-Host "Attempt $i/$MaxRetries with curl.exe ..." + if (Download-WithCurl $Url $Dst $TimeoutSec) { return $true } + Write-Host "curl.exe failed. Trying BITS ..." + if (Download-WithBITS $Url $Dst $BitsTimeoutS) { return $true } + Write-Host "BITS failed. Trying Invoke-WebRequest ..." + if (Download-WithIWR $Url $Dst $TimeoutSec) { return $true } + Write-Warning "All methods failed (attempt $i). Retrying in ${RetryDelayS}s..." + Start-Sleep -Seconds $RetryDelayS + } + return $false +} + +# -------- Download & Install -------- +Write-Host "Downloading Chrome $Arch from $Url" +if (-not (Download-Fast $Url $OutFile)) { + throw "Download failed after $MaxRetries attempts." +} + +Write-Host "Installing Chrome $Arch silently..." +$msiArgs = @('/i', "`"$OutFile`"", '/qn', '/norestart') +$proc = Start-Process -FilePath 'msiexec.exe' -ArgumentList $msiArgs -Wait -PassThru +switch ($proc.ExitCode) { + 0 { Write-Host "Chrome $Arch installed successfully." } + 3010 { Write-Host "Chrome $Arch installed. Reboot required (3010)." } + default { throw "msiexec exited with $($proc.ExitCode)" } +} + +# Optional cleanup: +Remove-Item $OutFile -Force -ErrorAction SilentlyContinue diff --git a/Deploy-Chrome/Readme.md b/Deploy-Chrome/Readme.md new file mode 100644 index 0000000..bec5280 --- /dev/null +++ b/Deploy-Chrome/Readme.md @@ -0,0 +1,16 @@ +# Chrome Enterprise MSI — Fast Auto-Arch Installer (PowerShell) + +Downloads and silently installs **Google Chrome Enterprise MSI** with the **correct architecture** +(**x64 on 64-bit OS, x86 on 32-bit OS**). +Fast, resilient download pipeline: **curl.exe → BITS → Invoke-WebRequest** with **retries** and **timeouts**. +**No version checks** (handled elsewhere by design). + +> Official Google endpoints always deliver the **latest available** version. + +## Features +- Auto-detects OS arch (x64/x86) and picks the proper **Enterprise MSI**. +- Download strategy with fallbacks: **curl.exe** (fast) → **BITS** (robust) → **IWR**. +- **Retries**, **timeouts**, and basic file sanity check. +- **Silent install** (`/qn /norestart`). +- No uninstall / no version comparison (deliberate). + diff --git a/Domain-Integrate-commandline/Install.cmd b/Domain-Integrate-commandline/Install.cmd new file mode 100644 index 0000000..6a156fb --- /dev/null +++ b/Domain-Integrate-commandline/Install.cmd @@ -0,0 +1,15 @@ +Set cmdreg=reg +Set cmdpowershell=powershell +Set cmdpowercfg=powercfg +if defined PROCESSOR_ARCHITEW6432 Set cmdreg=%SystemRoot%\sysnative\reg.exe +if defined PROCESSOR_ARCHITEW6432 Set cmdpowershell=%SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell.exe +if defined PROCESSOR_ARCHITEW6432 Set cmdpowercfg=%SystemRoot%\Sysnative\cmd.exe /c powercfg + +%cmdpowershell% -noprofile -command "Set-ExecutionPolicy bypass LocalMachine" + +:: force un dns pour fonctionner sur mon LAB +%cmdpowershell% -file "%~dp0SetDNS.ps1" + +"%~dp0netdom.exe" JOIN %computername% /Domain:leblogosd.lan /UserD:david /PasswordD:Motdepasse1 + +exit /B 0 diff --git a/Domain-Integrate-commandline/SetDns.ps1 b/Domain-Integrate-commandline/SetDns.ps1 new file mode 100644 index 0000000..75a99b6 --- /dev/null +++ b/Domain-Integrate-commandline/SetDns.ps1 @@ -0,0 +1,26 @@ +# Detect Active Card +$CarteUP = "" +$Cards = Get-NetAdapter +foreach ($Card in $Cards) { + if (($Card.Status -eq "Up") -and ($Card.Name -notlike "*VMware*" )) { + if (($CarteUP -eq "") -or ($CarteUP -like"*wi")) { + $CarteUP = $Card.Name + } + } +} + + +# Detect Index Card +$IndexCarte = "" +$indexCards = Get-NetIPInterface +foreach ($indexCard in $indexCards) { + if (($indexCard.InterfaceAlias -eq "$CarteUP") -and ($indexCard.AddressFamily -eq "IPv4")) { + $IndexCarte = $IndexCard.ifIndex + $DHCPCarte = $IndexCard.DHCP + + } +} + +Set-DnsClientServerAddress -InterfaceIndex $IndexCarte -ServerAddresses ("192.168.0.210") + + diff --git a/Domain-Integrate-commandline/en-US/netdom.exe.mui b/Domain-Integrate-commandline/en-US/netdom.exe.mui new file mode 100644 index 0000000..ace9bf6 Binary files /dev/null and b/Domain-Integrate-commandline/en-US/netdom.exe.mui differ diff --git a/Domain-Integrate-commandline/fr-FR/netdom.exe.mui b/Domain-Integrate-commandline/fr-FR/netdom.exe.mui new file mode 100644 index 0000000..ef05563 Binary files /dev/null and b/Domain-Integrate-commandline/fr-FR/netdom.exe.mui differ diff --git a/Domain-Integrate-commandline/netdom.exe b/Domain-Integrate-commandline/netdom.exe new file mode 100644 index 0000000..e592729 Binary files /dev/null and b/Domain-Integrate-commandline/netdom.exe differ diff --git a/Domain-Integrate-commandline/readme.md b/Domain-Integrate-commandline/readme.md new file mode 100644 index 0000000..e07fc68 --- /dev/null +++ b/Domain-Integrate-commandline/readme.md @@ -0,0 +1,11 @@ +# Domain Join Helper (Batch) + +Batch script to **configure DNS (optional)**, relax PowerShell execution policy for the session, and **join a Windows machine to an AD domain** using `netdom`. + +## 📂 Files +- `JoinDomain.cmd` — main batch script +- `SetDNS.ps1` — optional DNS configuration helper (called by the batch) + +## ⚙️ What it does +1. Executes `SetDNS.ps1` (optional) to force lab DNS. +2. Calls `netdom JOIN` to add the computer to the domain. \ No newline at end of file diff --git a/Download-httpcopy/Download.cmd b/Download-httpcopy/Download.cmd new file mode 100644 index 0000000..fb13054 --- /dev/null +++ b/Download-httpcopy/Download.cmd @@ -0,0 +1 @@ +wget.exe --mirror --no-parent -P . https://nas.wuibaille.fr/LeblogOSDdownload/IVANTI/ diff --git a/Download-httpcopy/readme.md b/Download-httpcopy/readme.md new file mode 100644 index 0000000..0611101 --- /dev/null +++ b/Download-httpcopy/readme.md @@ -0,0 +1,15 @@ + IVANTI Files Mirror + +This repository uses **wget** to create a local mirror of the IVANTI download directory. + +## 📌 Command + +```bash +wget.exe --mirror --no-parent -P . https://nas.wuibaille.fr/LeblogOSDdownload/IVANTI/ +``` + +## ✨ Details +- `--mirror` → Enable mirroring (recursive, time-stamping, infinite depth) +- `--no-parent` → Prevent ascending to parent directory +- `-P .` → Save files into the current working directory + diff --git a/Download-httpcopy/wget.exe b/Download-httpcopy/wget.exe new file mode 100644 index 0000000..0aa4437 Binary files /dev/null and b/Download-httpcopy/wget.exe differ diff --git a/Drivers-downloader-GUI-dell/DownloadDriversGUI.ps1 b/Drivers-downloader-GUI-dell/DownloadDriversGUI.ps1 new file mode 100644 index 0000000..7bfbb15 --- /dev/null +++ b/Drivers-downloader-GUI-dell/DownloadDriversGUI.ps1 @@ -0,0 +1,324 @@ +[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework') +[xml]$XAML = @' + + + + + + + + +