Powershell Script for setting DHCP reservation description & host value
Very impressed with your formatting and spacing. Top notch to see that in practice. I see a couple areas that could be improved and I see at least 2 problems.
Variable Expansion in Strings
Variables will expand in double quotes easy. However you need to be using subexpressions in order to get the property portion to work correctly. You can also use the format operator -f but that is better used for more complicated string.
... -Description &quot;$($PrinterObjects.Name) &amp; $($PrinterObjects.Location)&quot;

If this code is in use already check existing descriptions for dependencies.
Efficient and Reliable conditions

Where-Object { ($_.Name -match &quot;^.{6}$&quot;) -and ($_.PortName -match &quot;IP*&quot; -or $_.PortName -match '^10*') -and ($_.Shared -EQ $True)}


The first clause looks like you are just trying to find Name's that are exactly 6 characters long? Just use the length property all strings have instead. No need for regex: $_.Name.Length -eq 6).
In the second clause you are using regex as well and while I doubt it will cause conflicts you need to be aware you would match IP as well as IPPPPPPPPPPP. -like &quot;IP*&quot; or the string method .StartsWith(&quot;IP&quot;) would work just as well. Note that StartsWith() is case sensitive.
Similarily with $_.PortName -match '^10*' if you are just trying to find ones where the first octet is 10 you will also match ones that are 100 or 1000000 since the greedy quantifier is in use here. Solution is the same as the last one. -like &quot;10.*&quot; or the string method .StartsWith(&quot;10.&quot;). Notice I added periods. That may or not be an issue for you in production.
Possible trade off of readabilty but for the last clause here (($_.Shared -EQ $True)) you don't need to use -eq. PowerShell will evaluate $_.Shared as its own expression. If it is a non-zero length string or non-zero integer it will evaluate to true.
Curly Braces
You are slightly inconsistent in your foreach blocks. Some have the opening brace after the block and some have it on the following line. I would pick on standard and stick with it. I personally favour the former.
foreach ($DHCPSvrReservation in $DHCPSvrReservations){
    # Do stuff
}

Same goes for your if and other similar blocks and constructs.
Your Set-DhcpServerv4Reservation and Set-DhcpServerv4OptionValue dont need to be surrounded by curly braces. They should function the same without them.
Using if when Where would do
You act on all $printerobject's that have a matching reservation. You loop though is still running through the $printerobject's that don't match. True, you don't do anything with them but you could move that condition into your loop then you can drop the if
foreach ($DHCPSvrReservation in $DHCPSvrReservations){
    foreach ($PrinterObject in ($PrinterObjects | Where-Object{$DHCPSvrReservation.IPAddress -eq $_.PortName})){     
            Set-DhcpServerv4Reservation -ComputerName $DHCPSvr -IPAddress $PrinterObjects.PortName -Description &quot;$($PrinterObjects.Name) &amp; $($PrinterObjects.Location)&quot;
            Set-DhcpServerv4OptionValue -ScopeId $DHCPSvrScope -OptionId 12 $PrinterObjects.Name
    }
}

That should work but you should test first.