Fixed/Refactored function to load environment variables from .env file. Refactored other stuff as well.

This commit is contained in:
Alexis Lazcano 2024-12-16 13:42:53 -06:00
parent fdc25dfbab
commit 307723ce82
2 changed files with 90 additions and 69 deletions

View File

@ -2,12 +2,10 @@
#e.g. https://snipe-it.contoso.com/api/v1/
SNIPEIT_URL=
#API Token generated from Snipe-IT -- instructions here:
#https://snipe-it.readme.io/reference/generating-api-tokens
SNIPEIT_TOKEN=
#The download location for AMIDEWINx64 and WINAIA -- should be a zip file.
AMIDEWINx64_URL=
WINAIA_URL=

View File

@ -5,10 +5,9 @@
Created by: Alexis Lazcano
===========================================================================
.DESCRIPTION
Lenovo computers contain a BIOS property to store a device's asset tag.
Unfortunately, this field is not writeable without the use of a 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.
Lenovo computers contain a BIOS property to store a device's asset tag accessible via WMI/CIM.
Get-CIMInstance -ClassName Win32_SystemEnclosure -NameSpace root\CIMV2 | Format-Table -Property SMBIOSAssetTag
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...
@ -20,23 +19,7 @@ if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]:
exit
}
#Load variables from .env file in to env:\ drive.
function Load-EnvFile
{
#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 $MyInvocation.MyCommand.Path. Please double check it exists and is named properly."; Exit 404 }
Get-Content .env | foreach {
$variableKey, $variableValue = $_.split('=')
if ([string]::IsNullOrWhiteSpace($variableKey) -or $variableKey.Contains('#'))
{
continue
}
Set-Content env:\$variableKey $variableValue
}
}
Load-EnvFile
$VerbosePreference = 'SilentlyContinue'
$ScriptRoot = "$env:PROGRAMFILES\SCMG\Scripts"
$ScriptLogs = "$ScriptRoot\Logs"
@ -45,18 +28,36 @@ $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 }
$ComputerSystemProduct = Get-CIMInstance -ClassName Win32_ComputerSystemProduct -NameSpace root\CIMV2
$CurrentSMBIOSAssetTag = Get-CIMInstance -ClassName Win32_SystemEnclosure -NameSpace root\CIMV2 | Format-Table -Property SMBIOSAssetTag
function Get-AssetNumber
#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 "#*")}
foreach ($Line in $EnvFile)
{
$variableKey, $variableValue = $Line.split('=')
Write-Verbose "$variableKey will be set to $variableValue"
Set-Content env:\$variableKey $variableValue
}
}
Load-EnvFile
function Get-SnipeAssetNumber
{
param
(
[Parameter(Mandatory = $true)]
[String]$Serial
)
$baseURI = $env:SNIPEIT_URL
$hardwareURI = $baseURI + "hardware"
$headers = @{ }
$headers.Add("accept", "application/json")
$headers.Add("Authorization", "Bearer $env:SNIPEIT_TOKEN")
@ -70,40 +71,62 @@ function Get-AssetNumber
}
}
Write-Host "Downloading AMIDEWINx64"
Invoke-WebRequest -Uri "$env:AMIDEWIN_URL" -OutFile "$ScriptTemp\AMIDEWINx64.zip"
try
function Get-BiosTool
{
Expand-Archive -Path "$ScriptTemp\AMIDEWINx64.zip" -DestinationPath "$ScriptTemp" -Force
}
catch
{
Write-Host "An error occurred:"
Write-Host $_
}
finally
{
Remove-Item "$ScriptTemp\AMIDEWINx64.zip" -Force
}
[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 {
#<code>
}
default {
exit
}
}
$ComputerSystemProduct = Get-CIMInstance -ClassName Win32_ComputerSystemProduct -NameSpace root\CIMV2
$CurrentSMBIOSAssetTag = Get-CIMInstance -ClassName Win32_SystemEnclosure -NameSpace root\CIMV2 | Format-Table -Property SMBIOSAssetTag
}
If ($ComputerSystemProduct.Vendor -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-AssetNumber -Serial $PSComputerInfo.serial
$SnipeAssetTag = Get-SnipeAssetNumber -Serial $PSComputerInfo.serial
Set-Location $ScriptTemp
.\AMIDEWINx64\AMIDEWINx64.exe /CA "$SnipeAssetTag"
Remove-Item $ScriptTemp\* -Recurse
Set-Location -Path $(Split-Path $MyInvocation.MyCommand.Path -Parent)
}
else
{
@ -113,8 +136,8 @@ else
# SIG # Begin signature block
# MIIvYQYJKoZIhvcNAQcCoIIvUjCCL04CAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDw+YpSrIJcWYVE
# J2s8uvZ7sUTuDqxcPjAaSCMlFWDTHqCCKGYwggQyMIIDGqADAgECAgEBMA0GCSqG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBjs+JMqPrrbeXe
# t6xlvmH3J2Sz9PE5IwjBOfPiZ1qFfqCCKGYwggQyMIIDGqADAgECAgEBMA0GCSqG
# SIb3DQEBBQUAMHsxCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNo
# ZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1p
# dGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2VydmljZXMwHhcNMDQwMTAx
@ -333,35 +356,35 @@ else
# MYIGUTCCBk0CAQEwaDBUMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBM
# aW1pdGVkMSswKQYDVQQDEyJTZWN0aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcgQ0Eg
# UjM2AhAtmKdfiMvdO1IQbTd6fBa6MA0GCWCGSAFlAwQCAQUAoEwwGQYJKoZIhvcN
# AQkDMQwGCisGAQQBgjcCAQQwLwYJKoZIhvcNAQkEMSIEILvjUGuwDeF+SJPc7jo7
# aZWzCfaPf8kaf9ObGFMjJU4TMA0GCSqGSIb3DQEBAQUABIICAKavR/fgitIBACCs
# IoEGyR83mzm/o7FdhhMkL8cWL/7/i0mgtfJJHhyHGvMDfT8pXQa4tRj558BlCJD2
# zjdNY9ga5jYAOehGAh6uBx8Eqokq48k2+cWSfBbn1AcyOawG2PUig3j126aNbtbl
# 9AzO6ZbGfwrHRjaCXkMllrhGZ+oYJyLZaZs3vY3F/2R1YPFw8oL9qIDGOGQq/ktE
# gOalV/3YKSIntzfPgsqGNvdN6RBLURX+FiSXWvB3qFnFoF4NgIvCpqMW8psLVU6L
# 6x7T6RK96jNNOaBT6HK8X3ACYiCmFzuIWizqYZxkX4OeJi3YfOy9xuFKuFJg48qB
# tAs+9jTO9j6p8aUHrLrO99Rsj3XNowhBem6GuFVjE1j1QzvLzzVvEWl3qN1bpqv5
# 5n9iiDZ76sTWGHdWiyCwkN8BMLBwNlwuenbQQERQNpsbWn4zoieWiA7e8YL/GViU
# NHBJUsRP8HpiB6x01Ft83+BKRo+JX8+C2119bo8zvympY+LsA9kghU3iJM2Iqhkh
# NpJHhX/GyFOiXysLixsbbM/3LHpfH5CHXBVBGWHnpURnOALXAMpvS0eXhQHQhZ+V
# Nv2S4wWIkqKAHI25JxHoN2avCmOcTRmNjY8wlP+yhOp5VsTJS1fLYHR/1m/0XkNz
# bWTPwK6xjyco57oontN5+Zdx8yCboYIDbDCCA2gGCSqGSIb3DQEJBjGCA1kwggNV
# AQkDMQwGCisGAQQBgjcCAQQwLwYJKoZIhvcNAQkEMSIEIFOdqQKPKOWFNMHwKbkP
# CK2ODm7gDc2gt+OYMrA4HNziMA0GCSqGSIb3DQEBAQUABIICAJX9FMRkuRNmHtPv
# yE0TLddNY70BlBqQDEU9Dtv5u4PlUbVZ2jZY2ELQPTAq1jjXyNqr1fXI9AVoUBuz
# TfTcalj+3DsYZVqaiiBlVdQ2DDrZJLv7Z3IAGAWl9NBlgjIlSP0PdGYZ7b0128iu
# RoCSvTl6GB3ptGSWQ6MYMc1pdYarv+Wi8OM73I1MU4qWOsH65Y2AgLGWKgEpueZt
# Y3rQ1bInMODFkk4FwFfZv/QCCEVJK7jEwzM7HnVfvWZiR3cV09MtTE81ZHs5ZKnR
# vWnxd2yFEH+ui+E7Omfhy/F3zp+D5g2agpSxGwmiKTi1ULW3fRImpy9vUuXwrLQJ
# idOMCbPtvqSAc6wKCR8jJDhj6GcNpRHX6l/DZbYoCq7S87KwV7AQfneDzz+utm4G
# ydRi3I8yZ6HRiLFrDVWgCHH9Ajp5/LXztOFNBuIJahwtiVzvRLlkY3nw8K4i0Ia6
# /v4HArENnGYjeyz6g2of1i5m7vuOnHUbgeKTimeyelwpjDV8h6Lzup6tRd8zoc/A
# VG6ofWM3UPmBM1w7s4POWEcr52BLjdMQAd72mUGw5gsDqEY4q8lkrEFuyRcXYnhB
# xyOUMgVuAHLIbrRGPIKf/oSa0dgUaRCi4iwY58MiSmMuU4aKbqD/BENa/NpaunL+
# W2KNmh2Oix9of2RitnSwKSiBfV4ioYIDbDCCA2gGCSqGSIb3DQEJBjGCA1kwggNV
# AgEBMG8wWzELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2Ex
# MTAvBgNVBAMTKEdsb2JhbFNpZ24gVGltZXN0YW1waW5nIENBIC0gU0hBMzg0IC0g
# RzQCEAEHZJsIsKf+fdZUqPL0KfYwCwYJYIZIAWUDBAIBoIIBPTAYBgkqhkiG9w0B
# CQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0yNDEyMTYxODEwNThaMCsG
# CQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0yNDEyMTYxOTM5NTFaMCsG
# CSqGSIb3DQEJNDEeMBwwCwYJYIZIAWUDBAIBoQ0GCSqGSIb3DQEBCwUAMC8GCSqG
# SIb3DQEJBDEiBCA0kdGmz3U/huvbSSPNtuXDtio/vp/rPEMr30hJBEUdAjCBpAYL
# SIb3DQEJBDEiBCB1drKVrq/shE9wOdX/tsSZZr1iDENpJ7iz5i0Ui8cK/DCBpAYL
# KoZIhvcNAQkQAgwxgZQwgZEwgY4wgYsEFETTk5zNG4h/hnrM2oHsrw9l/NJZMHMw
# X6RdMFsxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTEw
# LwYDVQQDEyhHbG9iYWxTaWduIFRpbWVzdGFtcGluZyBDQSAtIFNIQTM4NCAtIEc0
# AhABB2SbCLCn/n3WVKjy9Cn2MA0GCSqGSIb3DQEBCwUABIIBgCh6ecky2xVF2PkI
# 7HXhA1gxxVLeu/nJF0SPw+vgeKUM6a3gCevWN2SuTXmJSuz0fFPf4IrXCXECcRiA
# DfCk5ln7VFlq/BnlNEKUKgbiUwt/p383JCmvVGwhCKc/TpWS1knpGcYjhGlX0je1
# inzClc3PRwDMnsNKoXYklPszV8C1PV/Ko2zHaA18q977h5HRLLUPmblnz0q/qtmV
# 82KJUgidw+z6PXFHAFurbgVTGQA/VyJp7rRHreJEdKluFkz3FVEFGZRIWdil0U+F
# JWvFBoFTdJ7NfZfoixj5p5zCC18XyXCFVaZE7oFOoHcoedKp8bDHrhSOntnObfv6
# bwA5psV+g6YCz4WZRcYzEIyxMOVM+3sHGgDnjyHIch5wDwXlT5A2kzHiIvhvMipO
# GmyeG5htbJBo9tOmueYiw83tREb4YBNle6/+Dmo0b+bu2mUMvK+nuRfx946cesRZ
# l/QpxyxUcNFBt+341tZXUsOkONcqA+ptJuUIyHBLZmPqhmDK1g==
# AhABB2SbCLCn/n3WVKjy9Cn2MA0GCSqGSIb3DQEBCwUABIIBgGc8v3HxAEQng4Lw
# WN8KsDMCQW/CF+Ez3X+FLUMxajoNgKuAcRMjyLHPK3f0Nusb6iW1hDu0AnEz9NR0
# gPZYGtBDz2NtKsSQqpNzs4NYNETmEEQ61GLB09X3iTgZgyZF1u/fkIK/nCL4k8bp
# nyo3Hxd04vIQgNJ3Q2m5D31V0yrVDvGkeFAUnecDQM1ik07l0zhZ/vpwtJiQ0g5F
# NnAqe0/Qmxjt7iqq7yS8PnaHpruhf0xlu59UU9/KtIT/RB0x+DX6nFXQid0Rhgfb
# HnP6RKV6P0jJwl7ZZwFcuXaGw5saniT+qIJOetA0cEPmqF7AmBYsPO52no3q3wG+
# kSQXp1VC99NdFKQCC18BiJYhxdklst9Atvps//sWOFVySHM0sXpKBr1XNnVoyp18
# ZSmNOEec8ee7bfBTOxeBqdYc1s7UeZedW89NOClebXXMn1hb/DKV6uqzHvoVOYOO
# BaXUTpxvq/tKiB/MABPjVDe5v4nCGoCO1SA1biZbfwZpVb24oA==
# SIG # End signature block