# Hardware Autogenerated Variables

The DeployR gather process is based on the similar gather process used in MDT and PSD (PowerShell Deploy), which is a project that was sponsored by 2Pint.  The Current Gather Script is located on our GitHub, you can take a look to see exactly how it looks:\
<https://github.com/2pintsoftware/2Pint-DeployR/blob/main/Samples/PowerShell%20Scripts/Gather-TSVariables.ps1>

Below is a list of the variables created, with additional details

### Chassis

**Description**: This will return the Chassis type based on the system enclosure and create the following additional variables;

* IsDeskop
* IsLaptop
* IsServer
* IsSFF
* IsTablet

**WMI**: ClassName = Win32\_SystemEnclosure

**Returned Values**:

* Laptop \[8,9,10,11,12,14,18,21]
* Desktop \[3,4,5,6,7,15,16]
* Server \[23]
* Small Form Factor \[34,35,36]
* Tablet \[13,31,32,30]

**PowerShell Code**:

```powershell
$LocalInfo = @{}		
$LocalInfo['IsDesktop'] = "False"
$LocalInfo['IsLaptop'] = "False"
$LocalInfo['IsServer'] = "False"
$LocalInfo['IsSFF'] = "False"
$LocalInfo['IsTablet'] = "False"
Get-CimInstance -ClassName Win32_SystemEnclosure | ForEach-Object {
	if ($_.ChassisTypes[0] -in "8", "9", "10", "11", "12", "14", "18", "21") { $LocalInfo['IsLaptop'] = "True"; $LocalInfo['Chassis'] = "Laptop"}
	if ($_.ChassisTypes[0] -in "3", "4", "5", "6", "7", "15", "16") { $LocalInfo['IsDesktop'] = "True"; $LocalInfo['Chassis'] = "Desktop"}
	if ($_.ChassisTypes[0] -in "23") { $LocalInfo['IsServer'] = "True"; $LocalInfo['Chassis'] = "Server"}
	if ($_.ChassisTypes[0] -in "34", "35", "36") { $LocalInfo['IsSFF'] = "True"; $LocalInfo['Chassis'] = "Small Form Factor"}
	if ($_.ChassisTypes[0] -in "13", "31", "32", "30") {$LocalInfo['IsTablet'] = "True"; $LocalInfo['Chassis'] = "Tablet"}
}


PS C:\WINDOWS\system32> $LocalInfo

Name                           Value                                                                                                                                                                                                                             
----                           -----                                                                                                                                                                                                                             
IsLaptop                       True                                                                                                                                                                                                                              
Chassis                        Laptop                                                                                                                                                                                                                            
IsDesktop                      False                                                                                                                                                                                                                             
IsSFF                          False                                                                                                                                                                                                                             
IsServer                       False                                                                                                                                                                                                                             
IsTablet                       False
```

### MacAddress

**Description**: Lists all MAC addresses of the device, can be several

**WMI**: Win32\_NetworkAdapterConfiguration

**Returned Values**: MAC Address strings

**PowerShell Code**:

```powershell
$macList = @()
Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration -Filter "IPEnabled = 1" | ForEach-Object {
	$_.MacAddress | ForEach-Object { $macList += $_ }
}

PS C:\WINDOWS\system32> $macList
58:1C:F8:23:3C:0A
E0:73:E7:66:3F:A7
```

### IPAddress

**Description**: Lists all IP addresses of the device, can be several

**WMI**: Win32\_NetworkAdapterConfiguration

**Returned Values**: IP Address strings

**PowerShell Code**:

```powershell
$ipList = @()
Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration -Filter "IPEnabled = 1" | ForEach-Object {
	$_.IPAddress | ForEach-Object { $ipList += $_ }

}

PS C:\WINDOWS\system32> $ipList
192.168.20.162
fe80::b2f6:4d89:f447:4ee3
169.254.141.136
fe80::87c2:d75a:288e:8da1
```

### DefaultGateway

**Description**: Is the default gateway IP Address of the machine

**WMI**: Win32\_NetworkAdapterConfiguration

**Returned Values**: IP Address of gateway in string

**PowerShell Code**:

```powershell
$gwList = @()
Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration -Filter "IPEnabled = 1" | ForEach-Object {
	if ($_.DefaultIPGateway) {
		$_.DefaultIPGateway | ForEach-Object { $gwList += $_ }
	}
}

PS C:\WINDOWS\system32> $gwList
192.168.20.1
```

### OSVersion

**Description**: the OS version of the OS currently running

**Registry**: HKLM:System\CurrentControlSet\Control\MiniNT

**Returned Values**: WinPE, Other

**PowerShell Code**:

```powershell
$LocalInfo = @{}	
if (Test-Path HKLM:System\CurrentControlSet\Control\MiniNT) {
	$LocalInfo['OSVersion'] = "WinPE"
}
else {
	$LocalInfo['OSVersion'] = "Other"
}

PS C:\WINDOWS\system32> $LocalInfo

Name                           Value                                                                                                                                                                                                                             
----                           -----                                                                                                                                                                                                                             
OSVersion                      Other
```

### OSCurrentVersion

**Description**: provides the Operating System's current version

**WMI**: Win32\_OperatingSystem

**Returned Values**: OS Version Number, ex:

* 10.0.26100
* 10.0.22631
* 10.0.19045

**PowerShell Code**:

<pre class="language-powershell"><code class="lang-powershell"><strong>PS C:\WINDOWS\system32> (Get-CimInstance -ClassName Win32_OperatingSystem).Version
</strong>10.0.26220
</code></pre>

### OSCurrentBuild

**Description**: provides the Operating System's build version

**WMI**: Win32\_OperatingSystem

**Returned Values**: OS Build Number, ex:

* 26100
* 22631
* 19045

**PowerShell Code**:

```powershell
PS C:\WINDOWS\system32> (Get-CimInstance -ClassName Win32_OperatingSystem).BuildNumber
26100
```

### Serial Number

**Description**: provides the serial number of the device

**WMI**: Win32\_BIOS

**Returned Values**: serial number string

**PowerShell Code**:

```powershell
PS C:\WINDOWS\system32> (Get-CimInstance -ClassName Win32_BIOS).SerialNumber
5CG3160H2Z
```

### Architecture

**Description**: provides the architechture of the processor

**PowerShell**: $env:PROCESSOR\_ARCHITEW6432 or $env:PROCESSOR\_ARCHITECTURE

**Returned Values**: x64, ARM64

**PowerShell Code**:

```powershell
$LocalInfo = @{}	
if ($env:PROCESSOR_ARCHITEW6432) {
	if ($env:PROCESSOR_ARCHITEW6432 -eq "AMD64") {
		$LocalInfo['Architecture'] = "x64"
	}
	else {
		$LocalInfo['Architecture'] = $env:PROCESSOR_ARCHITEW6432.ToUpper()
	}
}
else {
	if ($env:PROCESSOR_ARCHITECTURE -eq "AMD64") {
		$LocalInfo['Architecture'] = "x64"
	}
	else {
		$LocalInfo['Architecture'] = $env:PROCESSOR_ARCHITECTURE.ToUpper()
	}
}

PS C:\WINDOWS\system32> $LocalInfo

Name                           Value                                                                                                                                                                                                                             
----                           -----                                                                                                                                                                                                                             
Architecture                   x64
```

### ProcessorSpeed

**Description**: provides the max clock speed of the processor

**WMI**: Win32\_Processor

**Returned Values**: Number relateing to max clock speed of processor

**PowerShell Code**:

```powershell
PS C:\WINDOWS\system32> (Get-CimInstance -ClassName Win32_Processor).MaxClockSpeed
2600
```

### SupportsSLAT

**Description**: provides details about the Second Level Address Translation Extensions of the processor

**WMI**: Win32\_Processor

**Returned Values**: True / False

**PowerShell Code**:

```powershell
PS C:\WINDOWS\system32> (Get-CimInstance -ClassName Win32_Processor).SecondLevelAddressTranslationExtensions
False
```

### Memory

**Description**: provides a number of calculated memory in MB

**WMI**: Win32\_ComputerSystem

**Returned Values**: Number corrisponding to memory

* This will not equal exactly the GB you're expecting. If you have "8GB" of RAM in your device, this returned value will often come in a bit under that number, so if you are creating your own scripts with memory requirements, and you want a machine to have "8GB" of RAM, you should give a 1 GB buffer in your script.

**PowerShell Code**

```
PS C:\WINDOWS\system32> (Get-CimInstance -ClassName Win32_ComputerSystem).TotalPhysicalMemory / 1024 / 1024
65168.2890625

```

**PowerShell Example for GB for reference**: (comes in just under the 64 that I expect)

```
PS C:\WINDOWS\system32> (Get-CimInstance -ClassName Win32_ComputerSystem).TotalPhysicalMemory / 1024 / 1024 / 1024
63.6409072875977

```

### Manufacturer | Make | Model

**Description**: provides the details of the device from the OEM, grabbing the info from a couple locations if requried.

**WMI**: Win32\_ComputerSystem & Win32\_BaseBoard&#x20;

**Returned Values**: string values that correspond to details about the device's OEM information

**PowerShell Code**:

```powershell
$LocalInfo = @{}	
Get-CimInstance -ClassName Win32_ComputerSystem | ForEach-Object {
	$LocalInfo['Manufacturer'] = $_.Manufacturer.Trim()
	$LocalInfo['Make'] = $_.Manufacturer.Trim()
	$LocalInfo['Model'] = $_.Model.Trim()
}

if ($LocalInfo['Make'] -eq "") {
	$Make = (Get-CimInstance -ClassName Win32_BaseBoard | Select-Object -ExpandProperty Manufacturer).Trim()
	$LocalInfo['Make'] = $Make
	$LocalInfo['Manufacturer'] = $Make
}

if ($LocalInfo['Model'] -eq "") {
	$LocalInfo['Model'] = (Get-CimInstance -ClassName Win32_BaseBoard | Select-Object -ExpandProperty Product).Trim()
}

PS C:\WINDOWS\system32> $LocalInfo

Name                           Value                                                                                                                                                                                                                             
----                           -----                                                                                                                                                                                                                             
Make                           HP                                                                                                                                                                                                                                
Manufacturer                   HP                                                                                                                                                                                                                                
Model                          HP ZBook Studio 16 inch G10 Mobile Workstation PC
```

### UUID

**Description**: Universal Identifier number

**WMI**: Win32\_ComputerSystemProduct

**Returned Values**: GUID String

**PowerShell Code**:

```powershell
PS C:\WINDOWS\system32> (Get-CimInstance -ClassName Win32_ComputerSystemProduct).UUID.Trim()
B5999BAA-4FA3-4EBD-B109-EF39AF8892AA
```

### CSPVersion&#x20;

**Description**: provides the Chassis System Product Version set by the OEM

**WMI**: Win32\_ComputerSystemProduct

**Returned Values**: Sting Value of Item(s) created by OEM

**PowerShell Code**:

```powershell
PS C:\WINDOWS\system32> (Get-CimInstance -ClassName Win32_ComputerSystemProduct).Version.Trim()
SBKPF,SBKPFV2
```

### BaseboardProduct&#x20;

**Description**: provides the Baseboard Product value created by OEM

**WMI**: MS\_SystemInformation

**Returned Values**: string, varies widely based on OEM

**PowerShell Code**:

```powershell
PS C:\WINDOWS\system32> (Get-CimInstance -ClassName MS_SystemInformation -NameSpace root\WMI).BaseBoardProduct.Trim()
8B8F
```

### Product

**Description**: provides the Baseboard Product value created by OEM

**WMI**: Win32\_BaseBoard

**Returned Values**: string, varies widely based on OEM.  HP uses this for their OEM lookups

**PowerShell Code**:

```powershell
PS C:\WINDOWS\system32> (Get-CimInstance -ClassName Win32_BaseBoard).Product.trim()
8B8F

```

### SystemSku&#x20;

**Description**: provides the System SKU value created by OEM

**WMI**: MS\_SystemInformation

**Returned Values**:  string, varies widely based on OEM.  MS Surface & Dell uses this for their OEM lookups

**PowerShell Code**:

```powershell
PS C:\WINDOWS\system32> (Get-CimInstance -ClassName MS_SystemInformation -NameSpace root\WMI).SystemSKU.Trim()
823Y4AA#ABA
```

### IsUEFI

**Description**: Lists all mac addresses of the device, can be several

**PowerShell**: Get-SecureBootUEFI

**Returned Values**: True | False

**PowerShell Code**:

```powershell
$LocalInfo = @{}	
try {
	Get-SecureBootUEFI -Name SetupMode | Out-Null
	$LocalInfo['IsUEFI'] = "True"
}
catch {
	$LocalInfo['IsUEFI'] = "False"
}

Name                           Value                                                                                                                                                                                                                             
----                           -----                                                                                                                                                                                                                             
IsUEFI                         True 
```

### SetupMode

**Description**: Lists all mac addresses of the device, can be several

**PowerShell**: Get-SecureBootUEFI

**Returned Values**: BIOS | UEFI

**PowerShell Code**:

```powershell
$LocalInfo = @{}	
try {
	Get-SecureBootUEFI -Name SetupMode | Out-Null
	$LocalInfo['SetupMode'] = "UEFI"
}
catch {
	$LocalInfo['SetupMode'] = "BIOS"
}

PS C:\WINDOWS\system32> $LocalInfo 

Name                           Value                                                                                                                                                                                                                             
----                           -----                                                                                                                                                                                                                             
SetupMode                      UEFI   
```

### IsOnBattery

**Description**: is created if the device has a battery and is currently on battery.  If it does not have a battery, or is currently on AC, it will skip creating the variable.

**WMI**: Win32\_Battery

**Returned Values**: TRUE&#x20;

**PowerShell Code**:

```powershell
$LocalInfo = @{}	
$bFoundAC = $false
$bOnBattery = $false
$bFoundBattery = $false
foreach ($Battery in (Get-CimInstance -ClassName Win32_Battery)) {
	$bFoundBattery = $true
	if ($Battery.BatteryStatus -eq "2") {
		$bFoundAC = $true
	}
}
If ($bFoundBattery -and !$bFoundAC) {
	$LocalInfo['IsOnBattery'] = $true
}
```

### OSSku

**Description**: Determines the Edition or SKU of Windows on the computer, info from: <https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getproductinfo>

WM&#x49;**:** win32\_operatingsystem

**Returned Values**: Number, 0-85 then Translated to Edition

**PowerShell Code**:

```powershell
$LocalInfo = @{}
$sku = (Get-CimInstance -ClassName win32_operatingsystem).OperatingSystemSKU
switch ($sku)
{
	0       {$LocalInfo['OSSku']="Undefined";break}
	1       {$LocalInfo['OSSku']="Ultimate Edition";break}
	2       {$LocalInfo['OSSku']="Home Basic Edition";break}
	3       {$LocalInfo['OSSku']="Home Basic Premium Edition";break}
	4       {$LocalInfo['OSSku']="Enterprise Edition";break}
	5       {$LocalInfo['OSSku']="Home Basic N Edition";break}
	6       {$LocalInfo['OSSku']="Business Edition";break}
	7       {$LocalInfo['OSSku']="Standard Server Edition";break}
	8       {$LocalInfo['OSSku']="Datacenter Server Edition";break}
	9       {$LocalInfo['OSSku']="Small Business Server Edition";break}
	10      {$LocalInfo['OSSku']="Enterprise Server Edition";break}
	11      {$LocalInfo['OSSku']="Web Server";break}
	12      {$LocalInfo['OSSku']="Datacenter Server Core Edition";break}
	13      {$LocalInfo['OSSku']="Standard Server Core Edition";break}
	14      {$LocalInfo['OSSku']="Enterprise Server Core Edition";break}
	15      {$LocalInfo['OSSku']="Storage Server Standard";break}
	16      {$LocalInfo['OSSku']="Storage Server Workgroup";break}
	17      {$LocalInfo['OSSku']="Storage Server Enterprise";break}
	18      {$LocalInfo['OSSku']="Windows Essential Server Solutions";break}
	19      {$LocalInfo['OSSku']="Small Business Server Premium";break}
	20      {$LocalInfo['OSSku']="Storage Express Server Edition";break}
	21      {$LocalInfo['OSSku']="Server Foundation";break}
	22      {$LocalInfo['OSSku']="Storage Workgroup Server Edition";break}
	23      {$LocalInfo['OSSku']="Windows Essential Server Solutions";break}
	24      {$LocalInfo['OSSku']="Server For Small Business Edition";break}
	25      {$LocalInfo['OSSku']="Small Business Server Premium Edition";break}
	30      {$LocalInfo['OSSku']="Pro Edition";break}
	40      {$LocalInfo['OSSku']="Server Hyper Core V";break}
	48	{$LocalInfo['OSSku']="Enterprise Edition";break}
	50      {$LocalInfo['OSSku']="Datacenter Server Edition";break}
	54      {$LocalInfo['OSSku']="Enterpise N Edition";break}
	62      {$LocalInfo['OSSku']="Home N Edition";break}
	65      {$LocalInfo['OSSku']="Home Edition";break}
	68      {$LocalInfo['OSSku']="Mobile Edition";break}
	79	{$LocalInfo['OSSku']="Education Edition";break}
	81	{$LocalInfo['OSSku']="Enterprise 2015 LTSB";break}
	82	{$LocalInfo['OSSku']="Enterprise 2015 N LTSB";break}
	85	{$LocalInfo['OSSku']="Mobile Enterprise";break}
	default {$LocalInfo['OSSku']="Not Supported";break}
}
PS C:\WINDOWS\system32> $LocalInfo

Name                           Value                                                                                                                                                                                                                             
----                           -----                                                                                                                                                                                                                             
OSSku                          Enterprise Edition
```
