<# .SYNOPSIS .DESCRIPTION .NOTES Version: 0.1 Creation Date: 21.03.2024 Author: Ákos Bakos Company: SmartCon GmbH Contact: akos.bakos@smartcon.ch Copyright (c) 2024 SmartCon GmbH HISTORY: Date By Comments ---------- --- ---------------------------------------------------------- 21.03.2024 Ákos Bakos Script created #> #region Helper Functions function Write-DarkGrayDate { [CmdletBinding()] param ( [Parameter(Position=0)] [System.String] $Message ) if ($Message) { Write-Host -ForegroundColor DarkGray "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) $Message" } else { Write-Host -ForegroundColor DarkGray "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) " -NoNewline } } function Write-DarkGrayHost { [CmdletBinding()] param ( [Parameter(Mandatory=$true, Position=0)] [System.String] $Message ) Write-Host -ForegroundColor DarkGray $Message } function Write-DarkGrayLine { [CmdletBinding()] param () Write-Host -ForegroundColor DarkGray "=========================================================================" } function Write-SectionHeader { [CmdletBinding()] param ( [Parameter(Mandatory=$true, Position=0)] [System.String] $Message ) Write-DarkGrayLine Write-DarkGrayDate Write-Host -ForegroundColor Cyan $Message } function Write-SectionSuccess { [CmdletBinding()] param ( [Parameter(Position=0)] [System.String] $Message = 'Success!' ) Write-DarkGrayDate Write-Host -ForegroundColor Green $Message } function Write-SectionError { [CmdletBinding()] param ( [Parameter(Position=0)] [System.String] $Message = 'Error!' ) Write-DarkGrayDate Write-Host -ForegroundColor Red $Message } #endregion $Title = "BIOS Settings" $host.UI.RawUI.WindowTitle = $Title [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 [System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials $env:APPDATA = "C:\Windows\System32\Config\SystemProfile\AppData\Roaming" $env:LOCALAPPDATA = "C:\Windows\System32\Config\SystemProfile\AppData\Local" $Env:PSModulePath = $env:PSModulePath+";C:\Program Files\WindowsPowerShell\Scripts" $env:Path = $env:Path+";C:\Program Files\WindowsPowerShell\Scripts" $Global:Transcript = "$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-Set_Lenovo_BIOS_Settings.log" Start-Transcript -Path (Join-Path "$env:ProgramData\Microsoft\IntuneManagementExtension\Logs\OSD\" $Global:Transcript) -ErrorAction Ignore | Out-Null Write-SectionHeader "Custom Lenovo BIOS Settings" $Get_Manufacturer_Info = (Get-WmiObject win32_computersystem).Manufacturer If($Get_Manufacturer_Info -notlike "*lenovo*") { Write-SectionError "Device manufacturer not supported" Write-DarkGrayHost "$Get_Manufacturer_Info device is not supported" EXIT 1 } Else { Write-SectionSuccess "Device manufacturer is Lenovo" } Write-DarkGrayHost "Staring the script" # Define Bezirk custom settings $Get_Settings = @( [pscustomobject]@{ Setting = 'BootOrder' Value = 'NVMe0:USBHDD' } [pscustomobject]@{ Setting = 'USBBoot' Value = 'Disable' } ) # Set BIOS settings $BIOS = Get-WmiObject -Class Lenovo_SetBiosSetting -Namespace root\wmi ForEach($Settings in $Get_Settings) { $MySetting = $Settings.Setting $NewValue = $Settings.Value Write-DarkGrayHost "Change to do: $MySetting - $NewValue" $Change_Return_Code = $BIOS.SetBiosSetting("$MySetting,$NewValue").Return If(($Change_Return_Code) -eq "Success") { Write-DarkGrayHost "New value for $MySetting is $NewValue" Write-SectionSuccess "The setting has been set" } Else { Write-SectionError "An issue occured while changing the setting" Write-DarkGrayHost "Can not change setting $MySetting (Return code $Change_Return_Code)" } } # Save BIOS change part $Save_BIOS = (Get-WmiObject -class Lenovo_SaveBiosSettings -namespace root\wmi) $Save_Change_Return_Code = $SAVE_BIOS.SaveBiosSettings().Return If(($Save_Change_Return_Code) -eq "Success") { Write-SectionSuccess "BIOS settings have been saved" } Else { Write-SectionError "An issue occured while saving changes - $Save_Change_Return_Code" } Stop-Transcript | Out-Null