PDQ.com mobilePDQ.com desktop

How to Deploy PDQ Client Consoles

Colby BoumaColby Bouma

Greetings, citizens of the internet! I’m going to share with you how to deploy PDQ to client consoles. It’s pretty straightforward, but there are a few tricks I need to explain first. Also, these packages will probably not be added to the Package Library any time soon. I would love to have them in there, but we can’t guarantee that it would work for everyone for reasons you’ll see below.

There are a couple of prerequisites to using these packages:

1. Create a Custom Variable named ConsoleHostName. Fill in the hostname of the computer where PDQ is installed as the Value. If you import my packages below, this variable will already exist and you just need to update it.

2. Enable Remote PowerShell on the computer where PDQ is installed. It should be as simple as running “Enable-PSRemoting -Force”. This allows Step 3 to grab information like the license and port number.

3. Restart Deploy’s background service if you update Inventory. Deploy has a bug where it will occasionally use the old value for $(PDQInventoryVersion) unless you do so.

Here are my packages:

What to Know About How to Deploy PDQ to Client Consoles

Download these as XML files and import them into PDQ Deploy. Next, I will go over the steps in detail and cover some things you may want to change to fit your environment.

Step 0 – Properties

The only important thing I changed here was “Options\Copy Mode” to Push. This is important because Step 2 uses a local path. You can change this to Pull if you alter Step 2 to use a UNC path.

Step 1 – Kill

Just a simple kill step to stop any running consoles. This is important when you’re using this package for updating rather than installing.

I set “Options\Error Mode” to Continue, but you can use “Stop Deployment with Error” if you want to.

Step 2 – Install Deploy/Inventory Client

This is where the fun begins. PDQ Deploy and Inventory store a copy of the MSI version of their installer in “C:\Windows\Downloaded Installations\Admin Arsenal\PDQ (Deploy/Inventory)\(Version Number)\PDQ(Deploy/Inventory).msi”. I used the %WINDIR% variable here in case you installed Windows to a drive other than C. I used a local path to try to maximize compatibility. $(PDQDeployVersion) and $(PDQInventoryVersion) are System Variables that were added to Deploy and Inventory

Step 3 – Set registry values

This part reaches back to the PDQ Deploy console machine to retrieve the license and server port. @(ConsoleHostName) is a Custom Variable that needs to be set to the hostname of your PDQ computer. See the prerequisites at the top of this page. If you can’t use Remote PowerShell in your environment you can edit this step to hardcode your server port and license.

$Product    = "PDQ Deploy"

$ServerName = "@(ConsoleHostName)"

$License, $ServerPort = Invoke-Command -ComputerName $ServerName {

    ( Get-ItemProperty -Path "HKLM:\SOFTWARE\Admin Arsenal\$Using:Product" ).License

    ( Get-ItemProperty -Path "HKLM:\SOFTWARE\Admin Arsenal\$Using:Product\Protocol" ).ServerPort


Creating the Registry Keys

Here we create the registry keys where the Client configuration information is stored if they don’t already exist. I added a five second pause because I ran into issues where these didn’t exist yet when the next section ran. I don’t know if it’s necessary for every environment, but better safe than sorry.

New-Item -Force -Path "HKLM:\SOFTWARE\Admin Arsenal"          -Name 

"$Product" -ErrorAction SilentlyContinue | Out-Null

New-Item -Force -Path "HKLM:\SOFTWARE\Admin Arsenal\$Product" -Name

"Protocol" -ErrorAction SilentlyContinue | Out-Null

Start-Sleep -Seconds 5

Finally, we set the registry values we gathered above.

New-ItemProperty -Force -Path "HKLM:\SOFTWARE\Admin Arsenal\$Product"          

-Name "License"        -PropertyType "String" -Value "$License"    |


New-ItemProperty -Force -Path "HKLM:\SOFTWARE\Admin Arsenal\

$Product\Protocol" -Name "Mode"           -PropertyType "String" -

Value "Client"      | Out-Null

New-ItemProperty -Force -Path "HKLM:\SOFTWARE\Admin Arsenal\

$Product\Protocol" -Name "ServerHostName" -PropertyType "String" -

Value "$ServerName" | Out-Null

New-ItemProperty -Force -Path "HKLM:\SOFTWARE\Admin Arsenal\

$Product\Protocol" -Name "ServerPort"     -PropertyType "Dword"  -

Value "$ServerPort" | Out-Null

That concludes today’s demonstration of building a PDQ Deploy package for installing PDQ Deploy and Inventory in Client mode. Thank you for joining me on this wacky journey. If you have any questions or suggestions please leave a comment below. 

Don't miss the next post!

Software Rollback

How to rollback or uninstall software patches due to an unexpected network vulnerability.