A boot is a boot, unless it doesn’t boot….
Question:
Why can’t I just network boot this new hardware and image it like I’ve always done? What in the “farfrommovin” (or insert your own expletive here) is going on here?!
Answer:
New computers (tablets, laptops, desktops, etc) all have secure boot enabled these days. I know… this only begs another question by some of us. “What is secure boot, and why do I care?”
I hear questions like this more often that you might think. So, let’s break it down so that everyone is on the same page…
A Tale of Two Boots…
Network BIOS Boot (Legacy PXE Boot)
Let’s start simple with the boot type that everyone understands.
BIOS Boot is the old school boot-up method that everyone has been using since cavemen walked the earth with my dad (not really, but you get it). It’s tried and true, it works.
BIOS boot leverages 16-bit code that is used to enable the network interface and reads the first sector of the hard disk before running additional code, like a Network Boot Program (NBP).
UEFI Boot (Secure PXE Boot)
What is UEFI?
UEFI stands for Unified Extensible Firmware Interface. It’s a specification that defines a software interface between the operating system and the platform firmware. It was developed by Intel Corporation initially back in the last century (feel left behind yet?), when they were working on their Itanium processors. It was called EFI then. In or around 2005 or so, they stopped and began contributing to the Unified version specification. Version 2.1 of UEFI added cryptography, network authentication, and user interface architecture back in 2007. Today, the version is 2.7; not sure what was added or tweaked, but I’ll look that up later…
So, as you might have deduced already, we call UEFI “Secure Boot” because of these two gems that allow us to protect against unknown image snatchers and evil doers…
- Cryptography
- Network Authentication
Summary
In an age of “OH MY GOD! SOMEONE COULD STEAL MY DATA?!” we tend to lean toward the secure side of things so that we can move on to other more pressing matters instead of chasing data (and our tails) when data gets hijacked. This is why UEFI is the mainstream boot process we use now.
Keeping the lights on while changing the bulb…
This leads us to the reason for this write-up… or main question…
How do I enable UEFI boot for my new devices, while making sure that the older devices can still be imaged?
To get everything working we need to do a couple of things.
- Create/ Define DHCP Vendor Classes
- Create/ Set DHCP Server Policies
Requirements
- DHCP Server running Windows Server 2012 or higher
- Windows Deployment Services
- Client that will boot using Legacy BIOS PXE
- Client that will boot using UEFI PXE
- DHCP Administrator rights on the DHCP Server(s)
Assumptions
- DHCP is installed and functional within your environment
- You have the appropriate permissions within DHCP
Create/ Define DHCP Vendor Classes
First, we’ll define our vendor classes. To do this, log onto your DHCP server and perform the following actions:
- Open the DHCP Snap-in
- Connect to the DHCP Server
-
Navigate to DHCP > SERVERFQDN > IPv4
-
Right-click on IPv4 and select “Define Vendor Classes…” from the menu
-
Click the “Add…” button
-
Enter the following information, then click “OK”
- Display Name = PXEClient (UEFI x64)
- Description = PXE:Arch:00007
- ASCII = PXE:Arch:00007
-
Click “Add…” again
-
Perform step 6 & 7 above two more times to add the classes for 32bit UEFI and Legacy BIOS
-
32bit UEFI
- Display Name = PXEClient (UEFI x86)
- Description = PXE:Arch:00006
- ASCII = PXE:Arch:00006
-
Legacy BIOS
- Display Name = PXEClient (BIOS x86 & x64)
- Description = PXE:Arch:00000
- ASCII = PXE:Arch:00000
-
-
Once completed, you should see something like the screen shot below with our three shiny new classes…
Create/ Set DHCP Server Policies
-
In the DHCP console, right-click on the “Policies” container.
- For ALL SCOPES, choose the “Policies” container at the “IPv4” level.
- For SINGLE SCOPE, choose the “Policies” container for the specific DHCP scope
-
Select “New Policy…” from the menu to open the policy wizard.
-
In the wizard, enter the following information and then click “Next”.
- Policy Name = PXEClient (UEFI x64)
- Description = Set correct server and file name for UEFI x64 PXE
-
Ensure that the radio button next to “OR” is selected, then click “Add…”
-
Using the drop-down menu next to “Value”, select “PXEClient (UEFI x64)” from the list.
-
Click “Add…”, then click “OK”
- Click “Next” on the wizard
-
Select “No”, then click “Next”
-
For the options, we will be setting the following under “DHCP Standard Options” in the wizard:
-
Option 60
- PXEClient
-
Option 66
- IP Address of the PXE Boot Service Point (the SCCM DP for you ConfigMgr types)
-
Option 67
- “smsboot\x64\wdsmgfw.efi”
-
-
Click “Next”, then review the settings summary information. If all of it looks right, click “Finish”
-
You should now have the first of the three policies needed.
- Repeat steps 2 through 10 above for the remaining policies. Below are the tables with the information you’ll need.
Policy Information – UEFI 32bit PXE
Display Name | PXEClient (UEFI x86) |
Description | Set correct server and file name for UEFI x86 PXE |
Option 60 | PXEClient |
Option 66 | PXEBootServerIP |
Option 67 | smsboot\x86\wdsmgfw.efi |
Policy Information – Legacy Boot PXE
Display Name | PXEClient (BIOS x86 & x64) |
Description | Set correct server and file name for BIOS x86 & x64 PXE |
Option 60 | PXEClient |
Option 66 | PXEBootServerIP |
Option 67 | smsboot\x64\wdsnbp.com |
After you’ve completed all the policies, you should see something like I have below…
Save yourself some time… AKA – I’ve got more than this to do today!
If you’re like me, then you might rather use some PowerShell to get this done in a hurry. Especially if you have multiple servers or DHCP scopes to update.
Below is some code that you can copy and save to do the work for you. The first snippet will enable the boot on a single DHCP server or scope at a time.
If you want a little more time to relax, use the second one. It leverages a CSV input file and can update multiple DHCP Servers/ Scopes in a single pass.
Both versions and a sample CSV file can be downloaded here.
Special thanks to @skatterbrainz for the assist in validating the code.
# Usage: # Scope Specific - # .\UEFI-Me.ps1 -DHCPSvr dc02 -DHCPFqdn dc02.adventuresinsysctr.net -PXESvr 192.168.0.23 -Scope_ID 192.168.0.0 # # All Scopes - # .\UEFI-Me.ps1 -DHCPSvr dc02 -DHCPFqdn dc02.adventuresinsysctr.net -PXESvr 192.168.0.23 # ############################# # Argument List param ( [parameter(Mandatory=$true)][string]$DHCPSvr, [parameter(Mandatory=$true)][string]$DHCPFqdn, [parameter(Mandatory=$true)][string]$PXESvr, [parameter(Mandatory=$false)][string]$Scope_ID = "" ) $PXE64Name = "PXEClient (UEFI x64)" $PXE86Name = "PXEClient (UEFI x86)" $PXEBName = "PXEClient (BIOS x86 & x64)" # Write-Host "DHCP Server: $DHCPSvr, FQDN: $DHCPFqdn, PXE: $PXESvr, SCOPE: $Scope_ID" # Add DHCP Option 60 if it doesn't exist If (-not(Get-DhcpServerv4OptionDefinition -OptionId 060 -ComputerName $DHCPSvr -ErrorAction SilentlyContinue)){ Add-DhcpServerv4OptionDefinition -ComputerName $DHCPSvr -Name PXEClient -Description "PXE Support" -OptionId 060 -Type String } # Set Vendor Classes: Add-DhcpServerv4Class -Name "$($PXE64Name)" -Description "PXE Client - 64bit UEFI" -Type Vendor -Data "PXE:Arch:00007" -Computer "$($DHCPSvr)" Add-DhcpServerv4Class -Name "$($PXE86Name)" -Description "PXE Client - 32bit UEFI" -Type Vendor -Data "PXE:Arch:00006" -Computer "$($DHCPSvr)" Add-DhcpServerv4Class -Name "$($PXEBName)" -Description "PXE Client - Legacy BIOS" -Type Vendor -Data "PXE:Arch:00000" -Computer "$($DHCPSvr)" # Create DHCP Policies (Leaving out the “ScopeId” option will make the policy a server level policy): if ($Scope_ID -eq "") { Add-DhcpServerv4Policy -Name "$($PXE64Name)" -Description "Set correct server and file name for UEFI x64 PXE" -Condition OR -VendorClass EQ, $PXE64Name -ComputerName "$($DHCPFqdn)" Add-DhcpServerv4Policy -Name "$($PXE86Name)" -Description "Set correct server and file name for UEFI x86 PXE" -Condition OR -VendorClass EQ, $PXE86Name -ComputerName "$($DHCPFqdn)" Add-DhcpServerv4Policy -Name "$($PXEBName)" -Description "Set correct server and file name for BIOS x86 & x64 PXE" -Condition OR -VendorClass EQ, $PXEBName -ComputerName "$($DHCPFqdn)" # Set Policy Options (If server level policy, do not specify the “ScopeId” option): # For UEFI x64 – Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -PolicyName "$($PXE64Name)" -OptionId 60 -Value PXEClient Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -PolicyName "$($PXE64Name)" -OptionId 66 -Value "$($PXESvr)" Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -PolicyName "$($PXE64Name)" -OptionId 67 -Value "smsboot\x64\wdsmgfw.efi" # For UEFI x86 – Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -PolicyName "$($PXE86Name)" -OptionId 60 -Value PXEClient Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -PolicyName "$($PXE86Name)" -OptionId 66 -Value "$($PXESvr)" Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -PolicyName "$($PXE86Name)" -OptionId 67 -Value "smsboot\x86\wdsmgfw.efi" # For BIOS x86 & x64 – Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -PolicyName "$($PXEBName)" -OptionId 66 -Value "$($PXESvr)" Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -PolicyName "$($PXEBName)" -OptionId 67 -Value "smsboot\x64\wdsnbp.com" } Else { Add-DhcpServerv4Policy -Name "$($PXE64Name)" -Description "Set correct server and file name for UEFI x64 PXE" -Condition OR -VendorClass EQ, $PXE64Name -ComputerName "$($DHCPFqdn)" -ScopeId $Scope_ID Add-DhcpServerv4Policy -Name "$($PXE86Name)" -Description "Set correct server and file name for UEFI x86 PXE" -Condition OR -VendorClass EQ, $PXE86Name -ComputerName "$($DHCPFqdn)" -ScopeId $Scope_ID Add-DhcpServerv4Policy -Name "$($PXEBName)" -Description "Set correct server and file name for BIOS x86 & x64 PXE" -Condition OR -VendorClass EQ, $PXEBName -ComputerName "$($DHCPFqdn)" -ScopeId $Scope_ID # Set Policy Options (If server level policy, do not specify the “ScopeId” option): # For UEFI x64 – Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -ScopeId $Scope_ID -PolicyName "$($PXE64Name)" -OptionId 60 -Value PXEClient Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -ScopeId $Scope_ID -PolicyName "$($PXE64Name)" -OptionId 66 -Value "$($PXESvr)" Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -ScopeId $Scope_ID -PolicyName "$($PXE64Name)" -OptionId 67 -Value "smsboot\x64\wdsmgfw.efi" # For UEFI x86 – Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -ScopeId $Scope_ID -PolicyName "$($PXE86Name)" -OptionId 60 -Value PXEClient Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -ScopeId $Scope_ID -PolicyName "$($PXE86Name)" -OptionId 66 -Value "$($PXESvr)" Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -ScopeId $Scope_ID -PolicyName "$($PXE86Name)" -OptionId 67 -Value "smsboot\x86\wdsmgfw.efi" # For BIOS x86 & x64 – Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -ScopeId $Scope_ID -PolicyName "$($PXEBName)" -OptionId 66 -Value "$($PXESvr)" Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -ScopeId $Scope_ID -PolicyName "$($PXEBName)" -OptionId 67 -Value "smsboot\x64\wdsnbp.com" }
The code below uses the CSV input file.
# # Usage: # Scope Specific - # .\Enable-UEFI_ALL.ps1 -CSVFile .\UEFI_Me.csv # ############################# # Argument List param ( [parameter(Mandatory=$true)][string]$CSVFile ) Function Create-VendorClass{ #Get all of the Vendor Classes $PXEClasses = Get-DhcpServerv4Class -Type Vendor -ComputerName $DHCPSvr #Look for the PXE classes needed Foreach ($PXEClass in $PXEClasses){ $ClassName = $PXEClass.Name $ClassType = $PXEClass.Type $ClassData = $PXEClass.Data $ClassAData = $PXEClass.AsciiData $ClassDesc = $PXEClass.Description Switch ($ClassAData){ PXE:Arch:00000{ Write-Host " Vendor Class '$ClassName' already exists" -ForegroundColor Green $BIOSPXE = $True } PXE:Arch:00006{ Write-Host " Vendor Class '$ClassName' already exists" -ForegroundColor Green $X86PXE = $True } PXE:Arch:00007{ Write-Host " Vendor Class '$ClassName' already exists" -ForegroundColor Green $X64PXE = $True } Default{ $BIOSPXE = $False $X86PXE = $False $X64PXE = $False } } } #Create the classes if they don't exist If (-not($BIOSPXE)){ Add-DhcpServerv4Class -Name "$($PXEBName)" -Description "PXE Client - Legacy BIOS" ` -Type Vendor -Data "PXE:Arch:00000" -Computer "$($DHCPSvr)" } If (-not($X64PXE)){ Add-DhcpServerv4Class -Name "$($PXE64Name)" -Description "PXE Client - 64bit UEFI" ` -Type Vendor -Data "PXE:Arch:00007" -Computer "$($DHCPSvr)" } If (-not($X86PXE)){ Add-DhcpServerv4Class -Name "$($PXE86Name)" -Description "PXE Client - 32bit UEFI" ` -Type Vendor -Data "PXE:Arch:00006" -Computer "$($DHCPSvr)" } } $PXE64Name = "PXEClient (UEFI x64)" $PXE86Name = "PXEClient (UEFI x86)" $PXEBName = "PXEClient (BIOS x86 & x64)" $Scopes = Import-Csv -Path $CSVFile Foreach ($Scope in $Scopes){ $DHCPSvr = $Scope.Server $DHCPFqdn = $Scope.ServerFQDN $PXESvr = $Scope.PXEServer $Scope_ID = $Scope.ScopeID If ($Scope_ID){ $ScopeArg = $True } Else{ $ScopeArg = $False } # Add DHCP Option 60 if it doesn't exist If (-not(Get-DhcpServerv4OptionDefinition -OptionId 060 -ComputerName $DHCPSvr -ErrorAction SilentlyContinue)){ Add-DhcpServerv4OptionDefinition -ComputerName $DHCPSvr -Name PXEClient -Description "PXE Support" -OptionId 060 -Type String } # Set Vendor Classes: Create-VendorClass # Create DHCP Policies (Leaving out the “ScopeId” option will make the policy a server level policy): $Names = $PXE64Name,$PXE86Name,$PXEBName Foreach ($Name in $Names){ Switch ($Name){ $PXE64Name{ If ($ScopeArg -eq $False){ If (-not(Get-DhcpServerv4Policy -ComputerName $DHCPSvr -Name $PXE64Name -ErrorAction SilentlyContinue)){ Add-DhcpServerv4Policy -Name "$($Name)" -Description "Set correct server and file name for $($Name) boot" ` -Condition OR -VendorClass EQ, $Name -ComputerName "$($DHCPFqdn)" # -ErrorAction SilentlyContinue Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -PolicyName "$($PXE64Name)" -OptionId 60 ` -Value "PXEClient" Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -PolicyName "$($PXE64Name)" -OptionId 66 ` -Value "$($PXESvr)" Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -PolicyName "$($PXE64Name)" -OptionId 67 ` -Value "smsboot\x64\wdsmgfw.efi" } } If ($ScopeArg -eq $True){ If (-not(Get-DhcpServerv4Policy -ComputerName $DHCPSvr -Name $PXE64Name -ScopeId "$($Scope_ID)" -ErrorAction SilentlyContinue)){ Add-DhcpServerv4Policy -Name "$($Name)" -Description "Set correct server and file name for $($Name) boot" ` -Condition OR -VendorClass EQ, $Name -ComputerName "$($DHCPFqdn)" -ScopeId $Scope_ID # -ErrorAction SilentlyContinue Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -ScopeId "$($Scope_ID)" -PolicyName "$($PXE64Name)" ` -OptionId 60 -Value PXEClient Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -ScopeId "$($Scope_ID)" -PolicyName "$($PXE64Name)" ` -OptionId 66 -Value "$($PXESvr)" Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -ScopeId "$($Scope_ID)" -PolicyName "$($PXE64Name)" ` -OptionId 67 -Value "smsboot\x64\wdsmgfw.efi" } } } $PXE86Name{ If ($ScopeArg -eq $False){ If (-not(Get-DhcpServerv4Policy -ComputerName $DHCPSvr -Name $PXE86Name -ErrorAction SilentlyContinue)){ Add-DhcpServerv4Policy -Name "$($Name)" -Description "Set correct server and file name for $($Name) boot" ` -Condition OR -VendorClass EQ, $Name -ComputerName "$($DHCPFqdn)" # -ErrorAction SilentlyContinue Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -PolicyName "$($PXE86Name)" -OptionId 60 ` -Value PXEClient Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -PolicyName "$($PXE86Name)" -OptionId 66 ` -Value "$($PXESvr)" Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -PolicyName "$($PXE86Name)" -OptionId 67 ` -Value "smsboot\x86\wdsmgfw.efi" } } If ($ScopeArg -eq $True){ If (-not(Get-DhcpServerv4Policy -ComputerName $DHCPSvr -Name $PXE86Name -ScopeId "$($Scope_ID)" -ErrorAction SilentlyContinue)){ Add-DhcpServerv4Policy -Name "$($Name)" -Description "Set correct server and file name for $($Name) boot" ` -Condition OR -VendorClass EQ, $Name -ComputerName "$($DHCPFqdn)" -ScopeId $Scope_ID # -ErrorAction SilentlyContinue Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -ScopeId "$($Scope_ID)" -PolicyName "$($PXE86Name)" ` -OptionId 60 -Value PXEClient Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -ScopeId "$($Scope_ID)" -PolicyName "$($PXE86Name)" ` -OptionId 66 -Value "$($PXESvr)" Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -ScopeId "$($Scope_ID)" -PolicyName "$($PXE86Name)" ` -OptionId 67 -Value "smsboot\x86\wdsmgfw.efi" } } } $PXEBName{ If ($ScopeArg -eq $False){ If (-not(Get-DhcpServerv4Policy -ComputerName $DHCPSvr -Name $PXEBName -ErrorAction SilentlyContinue)){ Add-DhcpServerv4Policy -Name "$($Name)" -Description "Set correct server and file name for $($Name) boot" ` -Condition OR -VendorClass EQ, $Name -ComputerName "$($DHCPFqdn)" # -ErrorAction SilentlyContinue Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -PolicyName "$($PXEBName)" -OptionId 66 ` -Value "$($PXESvr)" Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -PolicyName "$($PXEBName)" -OptionId 67 ` -Value "smsboot\x64\wdsnbp.com" } } If ($ScopeArg -eq $True){ If (-not(Get-DhcpServerv4Policy -ComputerName $DHCPSvr -Name $PXEBName -ScopeId "$($Scope_ID)" -ErrorAction SilentlyContinue)){ Add-DhcpServerv4Policy -Name "$($Name)" -Description "Set correct server and file name for $($Name) boot" ` -Condition OR -VendorClass EQ, $Name -ComputerName "$($DHCPFqdn)" -ScopeId $Scope_ID # -ErrorAction SilentlyContinue Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -ScopeId "$($Scope_ID)" -PolicyName "$($PXEBName)" ` -OptionId 66 -Value "$($PXESvr)" Set-DhcpServerv4OptionValue -ComputerName "$($DHCPSvr)" -ScopeId "$($Scope_ID)" -PolicyName "$($PXEBName)" ` -OptionId 67 -Value "smsboot\x64\wdsnbp.com" } } } } } }
This guide does not work with server 2019 sadly. Going to have to figure out whats wrong here..
LikeLike
Typically in a larger environment with many subnets/ scopes, you would use IPHelpers instead of the DHCP options. I haven’t yet had the opportunity to test on Server 2019, but I should soon.
LikeLike
I have seen this instructions on multiple blogs, one thing I noticed here is that you did not mention to put a check mark in ” Append Wildcard(*) ” when you add vendor class where others have said a check mark is needed.
second thing is that no body has mention whether or not the DHCP is on the same server as WDS or not.
if DHCP is on the same server then in WDS under DHCP tab both check box should be checked and that will automatically set option 060 ,PXEClient, for all scopes in DHCP.
any how I have set this up on my 2012 server and still UEFI pxeboot is not working. my WDS , DHCP are on the same server and same netwrok with clients. is anybody having same issue as mine and how did you make UEFI Pxeboot to work?
thanks
LikeLike
The PowerShell code at the bottom should work with WDS on the same server as DHCP or on a separate server as well. I’ve never had to check the boxes when creating the classes and it works for me every time. 200+/- infrastructures and counting….
LikeLike
For clear-installed dhcp server you must create Option 60 first
#Part: Create/ Define DHCP Vendor Classes
PXEClient: BIOS (00) PXEClient:Arch:00000 smsboot\x64\wdsnbp.com
PXEClient: UEFI x86 (02) PXEClient:Arch:00002 smsboot\x86\wdsmgfw.efi
PXEClient: UEFI x86 (06) PXEClient:Arch:00006 smsboot\x86\wdsmgfw.efi
PXEClient: UEFI x64 (07) PXEClient:Arch:00007 smsboot\x64\wdsmgfw.efi
PXEClient: UEFI x64 (08) PXEClient:Arch:00008 smsboot\x64\wdsmgfw.efi
PXEClient: UEFI x64 (09) PXEClient:Arch:00009 smsboot\x64\wdsmgfw.efi
#Part: Create/ Set DHCP Server Policies. Step 6:
– Lost “Append wildcard(*)” for every condition, because Full class identifier is: “PXEClient:Arch:0000X:UNDI:XXXXXX”
(Russian blog post about Vendor Classes: https://skorotkov.wordpress.com/2017/08/12/sccm-osd-wds-pxe-uefi-bios-dhcp-options-66-67-part-2/)
LikeLike
The code already creates option 60 using set-dhcpserverv4optionvalue command on my servers. I’ll look to see what happens on a fresh server, then modify the code accordingly. Thanks!
LikeLiked by 1 person
I’ll add the following to both scripts and update them on OneDrive as well.. good catch!!
# Add DHCP Option 60 if it doesn’t exist
If (-not(Get-DhcpServerv4OptionDefinition -OptionId 060 -ComputerName $DHCPSvr -ErrorAction SilentlyContinue)){
Add-DhcpServerv4OptionDefinition -ComputerName $DHCPSvr -Name PXEClient -Description “PXE Support” -OptionId 060 -Type String
}
LikeLiked by 1 person
Thanks for u work!
LikeLike
I think that needed -DefaultValue “PXEClient” also
LikeLike