From eaaf430e4d53f9788c10edf3eabe5238ff679da4 Mon Sep 17 00:00:00 2001 From: Alexis Lazcano Date: Mon, 16 Dec 2024 18:41:23 -0600 Subject: [PATCH] Restored local copy after branch mishap. --- Lenovo-Asset-Tag-Writer.ps1 | 143 +++++++++++++++--------------------- 1 file changed, 61 insertions(+), 82 deletions(-) diff --git a/Lenovo-Asset-Tag-Writer.ps1 b/Lenovo-Asset-Tag-Writer.ps1 index 5185789..92f1f3e 100644 --- a/Lenovo-Asset-Tag-Writer.ps1 +++ b/Lenovo-Asset-Tag-Writer.ps1 @@ -12,10 +12,9 @@ Unfortunately, this field is not writeable without the use of a tool from Lenovo. This script helps automate the process of obtaining the asset tag from Snipe-IT and writing it to the BIOS for later retrieval through WMI. #> -#Check if running as Administrator... +#region Check if running in elevated context if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { - # If not elevated, re-launch the script with elevated privileges $params = @{ FilePath = "powershell.exe" Verb = "RunAs" @@ -25,30 +24,36 @@ if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]: Start-Process @params -Wait exit } +#endregion Check if running in elevated context $ScriptRoot = "$env:PROGRAMFILES\SCMG\Scripts" $ScriptLogs = "$ScriptRoot\Logs" $ScriptTemp = "$ScriptRoot\Temp" - if (!(Test-Path -Path $ScriptLogs)) { New-Item -Path $ScriptLogs -ItemType Directory -Force | Out-Null } if (!(Test-Path -Path $ScriptTemp)) { New-Item -Path $ScriptTemp -ItemType Directory -Force | Out-Null } +#region Get asset information from WMI/CIM and add it to new hashtable $ComputerSystemProduct = Get-CIMInstance -ClassName Win32_ComputerSystemProduct -NameSpace root\CIMV2 $CurrentSMBIOSAssetTag = Get-CIMInstance -ClassName Win32_SystemEnclosure -NameSpace root\CIMV2 | Format-Table -Property SMBIOSAssetTag +$PSComputerInfo = @{ } +$PSComputerInfo.Add("serial", $($ComputerSystemProduct.IdentifyingNumber)) +$PSComputerInfo.Add("manufacturer", $($ComputerSystemProduct.Vendor)) +$PSComputerInfo.Add("model_number", $($ComputerSystemProduct.Name)) +$PSComputerInfo.Add("model_name", $($ComputerSystemProduct.Version)) +#endregion Get asset information from WMI/CIM and add it to new hashtable + -#Load variables from .env file in to env:\ drive. function Load-EnvFile { [CmdletBinding()] Param () - #Exit with an error if there's not .env file in the current working directory. if (!(Test-Path -Path .env)) { Write-Error ".env file does not exist in $((Get-Location).Path)\ `nPlease double check it exists and is named properly."; Exit 404 } - $EnvFile = Get-Content .env | where {!([string]::IsNullOrWhiteSpace($_)) -and ($_ -notlike "#*")} + $EnvFile = Get-Content .env | where { !([string]::IsNullOrWhiteSpace($_)) -and ($_ -notlike "#*") } foreach ($Line in $EnvFile) { $variableKey, $variableValue = $Line.split('=') Write-Verbose "$variableKey will be set to $variableValue" - Set-Content env:\$variableKey $variableValue + Set-Content env:\$variableKey $variableValue } } @@ -73,64 +78,38 @@ function Get-SnipeAssetNumber else { return $response.asset_tag - } -} - -function Get-BiosTool -{ - [CmdletBinding(ConfirmImpact = 'Medium')] - param - ( - [Parameter(Mandatory = $true, - Position = 1)] - [String]$DeviceType - ) - - switch ($DeviceType) { - Desktop { - Invoke-WebRequest -Uri "$env:AMIDEWINx64_URL" -OutFile "$ScriptTemp\AMIDEWINx64.zip" - try - { - Expand-Archive -Path "$ScriptTemp\AMIDEWINx64.zip" -DestinationPath "$ScriptTemp" -Force - } - catch - { - Write-Host "An error occurred:" - Write-Host $_ - } - finally - { - Remove-Item "$ScriptTemp\AMIDEWINx64.zip" -Force - } - } - Laptop { - # - } - default { - exit - } } - } -If ($ComputerSystemProduct.Vendor -like "Lenovo") +If ($PSComputerInfo.manufacturer -like "Lenovo") { - Get-BiosTool -DeviceType Desktop - - $PSComputerInfo = @{ } - $PSComputerInfo.Add("serial", $($ComputerSystemProduct.IdentifyingNumber)) - $PSComputerInfo.Add("model_number", $($ComputerSystemProduct.Name)) - $PSComputerInfo.Add("model_name", $($ComputerSystemProduct.Version)) - $SnipeAssetTag = Get-SnipeAssetNumber -Serial $PSComputerInfo.serial - $params = @{ - FilePath = "$ScriptTemp\AMIDEWINx64\AMIDEWINx64.exe" - ArgumentList = "/CA `"$SnipeAssetTag`"" + switch -wildcard ($PSComputerInfo.model_name) + { + "ThinkCentre*" { + Invoke-WebRequest -Uri "$env:AMIDEWINx64_URL" -OutFile "$ScriptTemp\Lenovo-Asset-Tag-Writer.zip" + $params = @{ + FilePath = "$ScriptTemp\AMIDEWINx64\AMIDEWINx64.exe" + ArgumentList = "/CA `"$SnipeAssetTag`"" + } + } + "ThinkPad*" { + Invoke-WebRequest -Uri "$env:WINAIA_URL" -OutFile "$ScriptTemp\Lenovo-Asset-Tag-Writer.zip" + $params = @{ + FilePath = "$ScriptTemp\WINAIA\WinAIA64.exe" + ArgumentList = "-set `"USERASSETDATA.ASSET_NUMBER=`"$SnipeAssetTag`"`"" + } + } + default { + Write-Error "Device model not supported." + exit 99 + } } + Expand-Archive -Path "$ScriptTemp\Lenovo-Asset-Tag-Writer.zip" -DestinationPath "$ScriptTemp" -Force + Remove-Item "$ScriptTemp\Lenovo-Asset-Tag-Writer.zip" -Force Start-Process @params -Wait -NoNewWindow - Remove-Item $ScriptTemp\* -Recurse } else @@ -141,8 +120,8 @@ else # SIG # Begin signature block # MIIvYQYJKoZIhvcNAQcCoIIvUjCCL04CAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG -# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBJvdq7f24iN171 -# +rfGmoyWkbHBZh/RhhkGQIP0j4bv+KCCKGYwggQyMIIDGqADAgECAgEBMA0GCSqG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCknNZ3BWTVBjx3 +# QI2DdsPw9Qtwj9YGGOLljsSJ2MVKqKCCKGYwggQyMIIDGqADAgECAgEBMA0GCSqG # SIb3DQEBBQUAMHsxCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNo # ZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1p # dGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2VydmljZXMwHhcNMDQwMTAx @@ -361,35 +340,35 @@ else # MYIGUTCCBk0CAQEwaDBUMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBM # aW1pdGVkMSswKQYDVQQDEyJTZWN0aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcgQ0Eg # UjM2AhAtmKdfiMvdO1IQbTd6fBa6MA0GCWCGSAFlAwQCAQUAoEwwGQYJKoZIhvcN -# AQkDMQwGCisGAQQBgjcCAQQwLwYJKoZIhvcNAQkEMSIEILiWYcPV5h9SEoxBpC27 -# JeuPmhi0Wj6b7uVIAD4SlDmqMA0GCSqGSIb3DQEBAQUABIICAAWabBJRESgzorwW -# 2B9XCmIRZBWwoTn8XFLZf45lpswWLr+dMQz7bag4YeEuOCiW6xVRLlY83NHPWlDE -# CKjwecdhvo2Tl/KerOTcdZixNiRbtqjnxLZBY2CpQYKRkWyEEBnwlFmPxECaEKpQ -# oBOeuvpcy7IO8VD4hcoelFf4RGGH9eO+kMOMsUblQa0848b6+It3qmUAWu3uHMuS -# 9UAB8MRw8GJpjn6ymJC5uoSKCgO86MTFMm33SW5RYTvopMB58JEwg7ZSBJSamnMb -# yWxqrOpReEY8dBnWEFSsmWT103FOCNjUzf3vbnnILPAFwXqLlR6eRTDwroNO+GBe -# i1u3aPFkU49zkVTgwLEjjbNiXtK4u+P/nWLOYRZBnzXdNSwHo2CeoyBRPsAfi01R -# lY+MG0yWgBuHejaEba/cKoTZErXMwANth/Bt7mlEfASwcbjScc8zSE5l8Ob7QUn7 -# 4uzNT1lPwfLUr22q94fTO7ghPL3+QPQJSBaGZD0Dhz1NGpT2MGLKj+TOwI3vN7fe -# oo0+oRlhS6yFMuQmOJguOW5Bv7RYaPXs4ygDCIo2/ikmEhK+BGTfPxy5uxHEiO04 -# ljWBG4iUiUrbGBDoAVTN6SZuugjP7u14vo8kdS3ySR/lgTkJgg04EO7yqmYPUeds -# jcRkldLIHzDs3B7O8nLZT9wHEE6ToYIDbDCCA2gGCSqGSIb3DQEJBjGCA1kwggNV +# AQkDMQwGCisGAQQBgjcCAQQwLwYJKoZIhvcNAQkEMSIEIEtcCPjZMfhtxOgmQshL +# couMo5iphBqNHVwI5LWPe1XHMA0GCSqGSIb3DQEBAQUABIICAAuNU2SEf35xaTGn +# sXyh3xuXEFWRlGQWT310UFIRcy4PcDvEVj82DGkwo8CQRYOI3vRmfVq4esz5MP6K +# oINNDBBci7VtrR7ls8esVE2+w4uj0AEBjT0I5hT4NVFvQiihQFyIYD+B/Ei0b22r +# CEcxsr/0EDiugnfyZGPiN8AN/TEtobRh/sWmJTG+Ie3+8G17hs5JNhByVYLzo0hN +# g3U48WZhje7nJJa61Z9TBaTSC3P02KZXemqADf/GFedco/SDeVac+ADiipuqJaFa +# PSXrJiAxSmBmUwzdhUxrxF3Nq/f6rp1gpsSMUxSd/m0pCVIyWzlGThqt0G5HZp8g +# hJ9Y+veLHZ8VWckGnr+bDdgW6Il0kW3JRqF90D8Htid3UF8bem+QpE/oyUzSyRkO +# mLJ+hxzrFJMtZ6JGQs7PWP4t08ABGdlk18Sc7/JS5ywFMdVwOxj4bqAe9aEsbpy/ +# IASU3ROvNZiCDp2jFCYKRjJXm9tnxrOAyi2xSb7r7jHv83gNro0vWfmUOMCLhOrB +# 6X8BzokKwxIv8ff7k2JwF4iBw+EaUSjlziur1Lo4WqF3Ie1Bo2neA7fqh2xWjhUY +# fAfmrVw304LOr+xgV1CXFjAYLuWRC5NeZeA6fxiUGlYUTR/4AQ9urPIupkodzm1j +# oXR45kXr+SEXasrarAn1G8ViNznMoYIDbDCCA2gGCSqGSIb3DQEJBjGCA1kwggNV # AgEBMG8wWzELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2Ex # MTAvBgNVBAMTKEdsb2JhbFNpZ24gVGltZXN0YW1waW5nIENBIC0gU0hBMzg0IC0g # RzQCEAEHZJsIsKf+fdZUqPL0KfYwCwYJYIZIAWUDBAIBoIIBPTAYBgkqhkiG9w0B -# CQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0yNDEyMTYyMTM0NDRaMCsG +# CQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0yNDEyMTcwMDM5NTJaMCsG # CSqGSIb3DQEJNDEeMBwwCwYJYIZIAWUDBAIBoQ0GCSqGSIb3DQEBCwUAMC8GCSqG -# SIb3DQEJBDEiBCCMgwQNoEdvo9nwFeuglFIwxtvpzpeBx9DVkl8i9UyI0zCBpAYL +# SIb3DQEJBDEiBCDsQWi4AJ+q/D3ngPGfrAf5yiolSzU4btYkWbYvuysupTCBpAYL # KoZIhvcNAQkQAgwxgZQwgZEwgY4wgYsEFETTk5zNG4h/hnrM2oHsrw9l/NJZMHMw # X6RdMFsxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTEw # LwYDVQQDEyhHbG9iYWxTaWduIFRpbWVzdGFtcGluZyBDQSAtIFNIQTM4NCAtIEc0 -# AhABB2SbCLCn/n3WVKjy9Cn2MA0GCSqGSIb3DQEBCwUABIIBgExwWCxLeEi/WyGM -# WjVegUELgPn0KW+A9m9x7NJhQcfiNShFXp7+o6KmzyPB+Rex/PdJIpKe2DiFO/C+ -# uSWG55NSHLJJk5X+hCs0GKoYdXXqhFHd9KujQRforSgp9ey8RsDl5O6hO4yl4wzM -# SbHbMsEsfTqMRwNqHvjEy4JMyuQ9QB6BtoJtBtLmL+/Vt4AI1aBuUrvl5r+EDpIV -# jjhkX5ByvNOLQGwvG/GM1PVtNfwCcLMybChJvd+UmkzTz0b7LELsqj/T9w8iqkxr -# OnvHcHlevWEbe5dC0+si2mRaJ0lMxjx+xXYShETYNEKL6oOKfAnzadz2k3Dmix5a -# LRr9H/hT7D+L4Wo5KBx8C47LmfdxKM6rJG7r5sdLejg1Jpi9M+Vr9/rZ7gEcdFw+ -# QJpf5nl+O2fLPFLHpeltEKT77y1dCjt36y/wlllTuAjbgVixxzwJs4gbdit4uiXn -# 0EtLOABXrEd3YZsdRFvd/vzAgU8pYLeqZDA6e4YtMOeE0DTXpQ== +# AhABB2SbCLCn/n3WVKjy9Cn2MA0GCSqGSIb3DQEBCwUABIIBgEHnjlrDy0Ax4u1e +# iWOzYH2gf/PyLbPJWTJJtNr1CnQmcu6prIJcUA73DnSHrgndyRvVax2BsNNHFYwK +# 6PPfUtSa9Tx5Znah+juAzkX7wpUBqGrXWyLEdDFteEZzORCs5gN6PuhL7P8Hccp4 +# G/MWpbOb354jZhb7s1UgPKkZcvLzl1N1WzR5NAbW3MSGKX6Aw91OHqGPi+03xAGP +# UVmqCSovtnXNQoPgmOJSnqyU579mJPV03Tbngw1CrIupZBTkeXACfDyHoHwR4vTE +# tUKJEhjwh0tINFTzC0tbcQKfkHpTzcjycAP+3cjXRUQzgA0EtYXdP2XovKmaQxsj +# Fm3HOCuqprPQQ0XHrsmA8tCNJe+BHAkrDuxNdNfHS5KglnsQAt9qvnUdbf11MBPA +# LWSsPb9P084++TtZi0znnZ9v8kpyOsav0GBXAXF8x/Q4T0oBOr50qsyjOpqNGBtm +# Y4Xi489w64hG6Uk8T7CM725wUK0kxL2GAHQvkiCMagjwvzXYVA== # SIG # End signature block