Use PDQ Deploy to push In-Place Windows 10 Upgrade

Comments

47 comments

  • Mike Kercher

    I know this is an old thread, but the following XML has been working for me:

    <?xml version="1.0" encoding="utf-8"?>
    <AdminArsenal.Export Code="PDQDeploy" Name="PDQ Deploy" Version="19.3.30.0" MinimumVersion="15.0">
    <Package>
    <CurrentLibraryPackageVersionId value="null" />
    <PackageDefinition name="Definition">
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Bits64</Architecture>
    <Version>Windows81, Windows10</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <CopyMode>Default</CopyMode>
    <DelayedApprovalTimeSpan>7.00:00:00</DelayedApprovalTimeSpan>
    <DownloadApprovalMode>Manual</DownloadApprovalMode>
    <InventoryScanProfileId value="1" />
    <IsDownloadApprovalModeInherited value="true" />
    <ScanAfterDeployment value="true" />
    <Steps type="list">
    <RebootStep>
    <Message></Message>
    <ShutdownOnly value="false" />
    <Timeout value="1" />
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>IsMember</ConditionMode>
    <InventoryCollectionId value="1058" />
    <InventoryCollectionName>Reboot Required</InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <ErrorMode>StopDeploymentFail</ErrorMode>
    <Title>Reboot</Title>
    <TypeName>Reboot</TypeName>
    <IsEnabled value="true" />
    <IsPostStep value="false" />
    <IsPreStep value="false" />
    </RebootStep>
    <CommandStep>
    <Command>net stop wuauserv</Command>
    <Files></Files>
    <SuccessCodes>0</SuccessCodes>
    <RunAs value="null" />
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <ErrorMode>Continue</ErrorMode>
    <Title>Stop Windows Update</Title>
    <TypeName>Command</TypeName>
    <IsEnabled value="true" />
    <IsPostStep value="false" />
    <IsPreStep value="false" />
    </CommandStep>
    <CommandStep>
    <Command>net stop cryptSvc</Command>
    <Files></Files>
    <SuccessCodes>0</SuccessCodes>
    <RunAs value="null" />
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <ErrorMode>Continue</ErrorMode>
    <Title>Stop Crypt Service</Title>
    <TypeName>Command</TypeName>
    <IsEnabled value="true" />
    <IsPostStep value="false" />
    <IsPreStep value="false" />
    </CommandStep>
    <CommandStep>
    <Command>net stop bits</Command>
    <Files></Files>
    <SuccessCodes>0</SuccessCodes>
    <RunAs value="null" />
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <ErrorMode>Continue</ErrorMode>
    <Title>Stop BITS</Title>
    <TypeName>Command</TypeName>
    <IsEnabled value="true" />
    <IsPostStep value="false" />
    <IsPreStep value="false" />
    </CommandStep>
    <CommandStep>
    <Command>net stop msiserver</Command>
    <Files></Files>
    <SuccessCodes>0</SuccessCodes>
    <RunAs value="null" />
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <ErrorMode>Continue</ErrorMode>
    <Title>Stop MSIEXEC</Title>
    <TypeName>Command</TypeName>
    <IsEnabled value="true" />
    <IsPostStep value="false" />
    <IsPreStep value="false" />
    </CommandStep>
    <CommandStep>
    <Command>rmdir /S /Q C:\Windows\SoftwareDistribution</Command>
    <Files></Files>
    <SuccessCodes>0</SuccessCodes>
    <RunAs value="null" />
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <ErrorMode>Continue</ErrorMode>
    <Title>Delete SoftwareDistribution</Title>
    <TypeName>Command</TypeName>
    <IsEnabled value="true" />
    <IsPostStep value="false" />
    <IsPreStep value="false" />
    </CommandStep>
    <CommandStep>
    <Command>net start wuauserv</Command>
    <Files></Files>
    <SuccessCodes>0</SuccessCodes>
    <RunAs value="null" />
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <ErrorMode>Continue</ErrorMode>
    <Title>Start Windows Update</Title>
    <TypeName>Command</TypeName>
    <IsEnabled value="true" />
    <IsPostStep value="false" />
    <IsPreStep value="false" />
    </CommandStep>
    <CommandStep>
    <Command>net start cryptSvc</Command>
    <Files></Files>
    <SuccessCodes>0</SuccessCodes>
    <RunAs value="null" />
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <ErrorMode>Continue</ErrorMode>
    <Title>Start Crypt Service</Title>
    <TypeName>Command</TypeName>
    <IsEnabled value="true" />
    <IsPostStep value="false" />
    <IsPreStep value="false" />
    </CommandStep>
    <CommandStep>
    <Command>net start bits</Command>
    <Files></Files>
    <SuccessCodes>0</SuccessCodes>
    <RunAs value="null" />
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <ErrorMode>Continue</ErrorMode>
    <Title>Start BITS</Title>
    <TypeName>Command</TypeName>
    <IsEnabled value="true" />
    <IsPostStep value="false" />
    <IsPreStep value="false" />
    </CommandStep>
    <CommandStep>
    <Command>net start msiserver</Command>
    <Files></Files>
    <SuccessCodes>0</SuccessCodes>
    <RunAs value="null" />
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <ErrorMode>Continue</ErrorMode>
    <Title>Start MSIEXEC</Title>
    <TypeName>Command</TypeName>
    <IsEnabled value="true" />
    <IsPostStep value="false" />
    <IsPreStep value="false" />
    </CommandStep>
    <PowerShellStep>
    <CustomCommandLine></CustomCommandLine>
    <Files></Files>
    <Script>Disable-WindowsOptionalFeature -Online -FeatureName Printing-PrintToPDFServices-Features</Script>
    <SuccessCodes>0</SuccessCodes>
    <RunAs value="null" />
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <ErrorMode>Continue</ErrorMode>
    <Title>Disable PrintToPDF</Title>
    <TypeName>PowerShell</TypeName>
    <IsEnabled value="true" />
    <IsPostStep value="false" />
    <IsPreStep value="false" />
    </PowerShellStep>
    <PowerShellStep>
    <CustomCommandLine></CustomCommandLine>
    <Files></Files>
    <Script>Disable-WindowsOptionalFeature -Online -FeatureName Printing-XPSServices-Features</Script>
    <SuccessCodes>0</SuccessCodes>
    <RunAs value="null" />
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <ErrorMode>Continue</ErrorMode>
    <Title>Disable XPS</Title>
    <TypeName>PowerShell</TypeName>
    <IsEnabled value="true" />
    <IsPostStep value="false" />
    <IsPreStep value="false" />
    </PowerShellStep>
    <InstallStep>
    <CustomCommandLine></CustomCommandLine>
    <FileName>$(Repository)\Microsoft\20H2\setup.exe</FileName>
    <Files></Files>
    <IncludeDirectory value="true" />
    <LeaveInstallFile value="false" />
    <MsiOperation>Install</MsiOperation>
    <MsiQuiet value="true" />
    <MsiRestart>Never</MsiRestart>
    <Parameters>/auto Upgrade /quiet /Compat IgnoreWarning /showoobe none /DynamicUpdate Disable /Telemetry Disable /MigrateDrivers All</Parameters>
    <SuccessCodes>0,1641,3010,2359302</SuccessCodes>
    <RunAs value="null" />
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <ErrorMode>StopDeploymentFail</ErrorMode>
    <Title>Perform Upgrade</Title>
    <TypeName>Install</TypeName>
    <IsEnabled value="true" />
    <IsPostStep value="false" />
    <IsPreStep value="false" />
    </InstallStep>
    <SleepStep>
    <Seconds value="3600" />
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <ErrorMode>StopDeploymentFail</ErrorMode>
    <Title>Sleep</Title>
    <TypeName>Sleep</TypeName>
    <IsEnabled value="true" />
    <IsPostStep value="false" />
    <IsPreStep value="false" />
    </SleepStep>
    <RebootStep>
    <Message></Message>
    <ShutdownOnly value="false" />
    <Timeout value="1" />
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <ErrorMode>Continue</ErrorMode>
    <Title>Reboot</Title>
    <TypeName>Reboot</TypeName>
    <IsEnabled value="false" />
    <IsPostStep value="false" />
    <IsPreStep value="false" />
    </RebootStep>
    <PowerShellStep>
    <CustomCommandLine></CustomCommandLine>
    <Files></Files>
    <Script>Enable-WindowsOptionalFeature -Online -FeatureName Printing-PrintToPDFServices-Features -NoRestart
    </Script>
    <SuccessCodes>0</SuccessCodes>
    <RunAs value="null" />
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <ErrorMode>StopDeploymentFail</ErrorMode>
    <Title>Restore Print to PDF</Title>
    <TypeName>PowerShell</TypeName>
    <IsEnabled value="true" />
    <IsPostStep value="false" />
    <IsPreStep value="false" />
    </PowerShellStep>
    <PowerShellStep>
    <CustomCommandLine></CustomCommandLine>
    <Files></Files>
    <Script>Enable-WindowsOptionalFeature -Online -FeatureName Printing-XPSServices-Features -NoRestart</Script>
    <SuccessCodes>0</SuccessCodes>
    <RunAs value="null" />
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <ErrorMode>StopDeploymentFail</ErrorMode>
    <Title>Restore XPS</Title>
    <TypeName>PowerShell</TypeName>
    <IsEnabled value="true" />
    <IsPostStep value="false" />
    <IsPreStep value="false" />
    </PowerShellStep>
    </Steps>
    <Timeout value="240" />
    <UseCustomTimeout value="true" />
    <RunAs value="null" />
    </PackageDefinition>
    <Description></Description>
    <NewLibraryPackageVersionId value="null" />
    <OriginalId value="null" />
    <Version></Version>
    <IsAutoDownload value="false" />
    <FolderId value="1" />
    <LibraryPackageVersionId value="null" />
    <Name>20H2 Update</Name>
    <Path>Packages\20H2 Update</Path>
    <PackageDisplaySettings name="DisplaySettings">
    <DisplayType>Normal</DisplayType>
    <IconKey>Icon-Package</IconKey>
    <SortOrder value="7" />
    </PackageDisplaySettings>
    </Package>
    </AdminArsenal.Export>

    1
    Comment actions Permalink
  • Alex Alexandre

    how do you use this xml in PDQ

    0
    Comment actions Permalink
  • Mike Kercher

    Copy the XML code I pasted into a txt document and save it with an xml extension.  Then, import it into PDQ Deploy.  

    The first reboot step is linked to a PDQ collection for Reboot Required.  You'll probably need to relink that.

    0
    Comment actions Permalink
  • Alex Alexandre

    wow thanks learn something new today :)

    0
    Comment actions Permalink
  • Mike Kercher

    Let me know if you have any questions!

    0
    Comment actions Permalink
  • Mick Duffin

    Mike Kercher

    I realise this is an old post, but just gave your script a go and it worked a treat, thanks for supplying this...

    The only thing that caught me out is that after the install of the update ( I'm testing this on 21H1 ) the device just reboots no warning etc... have you found a way to stop this? I'm not sure how it can work without the reboot as it restarts a couple times .. just trying to get it 100% User free so that the user wont even know the updates been installed except a little slowness when the files are copied etc...

    Anyone know a way to do this..? was thinking of adding the /noreboot switch would this work?

    Thanks,

    Mick.

    0
    Comment actions Permalink
  • Mike Kercher

    This is what my package looks like today:

    The first reboot step is linked to a PDQ Collection for Reboot required as the upgrade process won't run if there's a pending reboot.  I don't know if there's a way to suppress the required reboots since they're part of the process.  Personally, I'd rather perform these updates outside of business hours and let my users wake up to a fresh OS.  If you were to depend on the user to reboot on their schedule, they would be sitting there waiting for a hour or more.

    I disabled the reboot in step 15 because I think it was redundant. 

     

    0
    Comment actions Permalink
  • Mick Duffin

    Thanks for your quick response. I see where you're coming from regarding letting the process take care of the reboot out of hours, the issue I have is our company is trying to be as 'green' as possible so all users are encouraged to shut their PC's down at the end of each day... but I suppose when new feature releases are due for install I could get the users to leave their machines on over night...

    Regarding the security updates, do you just use the PDQ default packages or again create your own? I'm only just starting out with PDQ so trying to get as much info as possible before making the decision to purchase or not.

    Mick.

    0
    Comment actions Permalink
  • Mike Kercher

    We actually still use SCCM for updates (not my choice), but it is what it is.  I would have no problem using PDQ to push those as well.  I use DFS for my Repository so machines always pull their updates from a local server.  If you're on the fence about buying, I'd say make the jump!  I've been using these products for years and couldn't imagine my job without them!

    0
    Comment actions Permalink
  • Mike Resnick

    Mick Duffin

    If it's helpful and if you are just looking for a NoReboot, in-place upgrade, here's our package that I made.

    We use it for the systems that can't reboot during the day. It's silent in the background. Basically just a single command line to your share of the Windows setup files with a "/NoReboot" parameter at the end, like this:

    start /wait \\YourServer\21H1\setup.exe /auto upgrade /migratedrivers all /dynamicupdate enable /telemetry disable /compat IgnoreWarning /showoobe none /pkey XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /NoReboot

    Oh, and don't forget to set the timeout value to something really high (we use 480 minutes) to make sure a slower computer doesn't timeout on an upgrade.

    Here's the XML if you want it, but you could probably just make your own package:

    Good luck!

    BEGIN===================

    <?xml version="1.0" encoding="utf-8"?>
    <AdminArsenal.Export Code="PDQDeploy" Name="PDQ Deploy" Version="19.3.48.0" MinimumVersion="15.0">
    <Package>
    <CurrentLibraryPackageVersionId value="null" />
    <PackageDefinition name="Definition">
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Bits64</Architecture>
    <Version>Windows10</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <CopyMode>Default</CopyMode>
    <DelayedApprovalTimeSpan>7.00:00:00</DelayedApprovalTimeSpan>
    <DownloadApprovalMode>Manual</DownloadApprovalMode>
    <InventoryScanProfileId value="3" />
    <IsDownloadApprovalModeInherited value="true" />
    <ScanAfterDeployment value="false" />
    <Steps type="list">
    <CommandStep>
    <Command>start /wait \\YourServer\Win10-21H1\setup.exe /auto upgrade /migratedrivers all /dynamicupdate enable /telemetry disable /compat IgnoreWarning /showoobe none /pkey XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /NoReboot</Command>
    <Files></Files>
    <SuccessCodes>0</SuccessCodes>
    <RunAs value="null" />
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <ErrorMode>StopDeploymentFail</ErrorMode>
    <Title>Batch Setup.exe Upgrade</Title>
    <TypeName>Command</TypeName>
    <IsEnabled value="true" />
    <IsPostStep value="false" />
    <IsPreStep value="false" />
    </CommandStep>
    </Steps>
    <Timeout value="480" />
    <UseCustomTimeout value="true" />
    <RunAs value="null" />
    <OfflineStatus name="OfflineStatus">
    <IsInherited value="false" />
    <TryWol value="false" />
    <UsePing value="false" />
    </OfflineStatus>
    </PackageDefinition>
    <Description>Performs an In-Place Upgrade to Windows 10 Enterprise, but does NOT reboot</Description>
    <NewLibraryPackageVersionId value="null" />
    <OriginalId value="null" />
    <Version></Version>
    <IsAutoDownload value="false" />
    <FolderId value="1" />
    <LibraryPackageVersionId value="null" />
    <Name>CHS - Win 10 - 21H1 - In-Place Upgrade - NO REBOOT</Name>
    <Path>Packages\CHS - Win 10 - 21H1 - In-Place Upgrade - NO REBOOT</Path>
    <PackageDisplaySettings name="DisplaySettings">
    <DisplayType>Normal</DisplayType>
    <IconKey>Icon-Package</IconKey>
    <SortOrder value="235" />
    </PackageDisplaySettings>
    </Package>
    </AdminArsenal.Export>

    END====================

     

    -Mike

     

    0
    Comment actions Permalink
  • Mick Duffin

    Mike Resnick

    Thanks for your reply, I'll give this a try also, but I've been toying with the idea of using wake on lan for PC's over night... then install the upgrade then after the update is installed shut the machine down again.... In theory this should work but will need to test it on a few PC's first... I'll need to enable WOL on the pc's also... but its worth a try.

    Thanks again.

    Mick.

    0
    Comment actions Permalink
  • Mike Resnick

    Mick Duffin

    We also do WOL to wake computers overnight for all sorts of deployments and activities. If you want, I have a package you can use for configuring the Windows side of WOL. And if you use Dell workstations, by chance, I have a Dell BIOS config package that sets the correct power states in the BIOS to still accept WOL packets in a power-down mode. Just let me know if you would like any of it. Happy to share.

    And as Mike Kercher said, pay and get PDQ Deploy and Inventory! Had it for years also. It's a total game changer. I can't even tell you how much personnel time and effort it has saved us. We also use SCCM for all Microsoft updates, but PDQ takes care of everything else. So awesome.

    0
    Comment actions Permalink
  • Mick Duffin

    Mike Resnick

    Yes please any info / help you can give would be much appreciated. I need to get the expenditure past our FD but I'm going to push for Deploy and Inventory... even in this short time I've been using it, its helped out so got to be worth it.

    We are majority HP workstations with a few Lenovo, is there a package for these? or is it just a case of creating your own? 

    Thanks,

    Mick.

    0
    Comment actions Permalink
  • Mike Kercher

    Mike Resnick  I'd be interested in those packages as well.  We are 100% remote right now, but I'd like to tinker with the WOL at some point.

    0
    Comment actions Permalink
  • Mike Resnick

    Mick Duffin and Mike Kercher

    For the Dell BIOS config for WOL:

    First, you need to download Dell Command Configure and create an EXE package of the BIOS settings. I'll explain a bit. Their GUI makes this easy.

    Here's the entirety of the Dell Command Configure file you will IMPORT into the Dell Command Configure Wizard. BE SURE to save it as a ".cctk" file.

    [cctk]
    AcPwrRcvry=Off
    Aspm=Auto
    BlockSleep=Disabled
    CStatesCtrl=Enabled
    DeepSleepCtrl=Disabled
    WakeOnLan=LanOnly

     

    Then, after you import that, just export the EXE it will create for you. Then, just make a super basic PDQ package to deploy that EXE. It doesn't require ANY switches. Just the path to the EXE and deploy it as the Deploy User account.

    For the Windows settings that need to be set, here is the PDQ package XML:

    BEGIN XML ====================================================

    <?xml version="1.0" encoding="utf-8"?>
    <AdminArsenal.Export Code="PDQDeploy" Name="PDQ Deploy" Version="19.3.48.0" MinimumVersion="15.0">
    <Package>
    <CurrentLibraryPackageVersionId value="null" />
    <PackageDefinition name="Definition">
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <CopyMode>Default</CopyMode>
    <DelayedApprovalTimeSpan>7.00:00:00</DelayedApprovalTimeSpan>
    <DownloadApprovalMode>Manual</DownloadApprovalMode>
    <InventoryScanProfileId value="null" />
    <IsDownloadApprovalModeInherited value="true" />
    <ScanAfterDeployment value="null" />
    <Steps type="list">
    <PowerShellStep>
    <CustomCommandLine></CustomCommandLine>
    <Files></Files>
    <Script>&lt;#

    .SYNOPSIS
    Enable Wake On LAN settings on NIC in Windows

    .DESCRIPTION

    IMPORTANT NOTE: I borrowed some from the WMI portions from here: http://justanothertechnicalblog.blogspot.com/2012/06/setting-power-management-options-on.html

    This script will set the appropriate Windows-side
    Wake-On LAN settings on the NIC that is currently
    CONNECTED and has a match for the name "Ethernet"
    OR "Local Area Connection"

    This script will check/set the following:

    1. "Allow the device to wake the computer" to CHECKED
    2. "Only allow a magic packet to wake the computer" to CHECKED
    3. "Energy Efficient Ethernet" to OFF
    4. Fast Startup to DISABLED (Windows 8-10 only)

    ===============================================================
    If your NIC is named something else, just change the "-match"
    references on the "Get-NetAdapter" command below
    ===============================================================

    NOTE: You will still need to make certain Wake On LAN is enabled
    in the BIOS.

    written by Mike Resnick 05-15-2018

    #&gt;

    $nic = Get-NetAdapter | ? {($_.MediaConnectionState -eq "Connected") -and (($_.name -match "Ethernet") -or ($_.name -match "local area connection"))}
    $nicPowerWake = Get-WmiObject MSPower_DeviceWakeEnable -Namespace root\wmi | where {$_.instancename -match [regex]::escape($nic.PNPDeviceID) }
    If ($nicPowerWake.Enable -eq $true)
    {
    # All good here
    write-output "MSPower_DeviceWakeEnable is TRUE"
    }
    Else
    {
    write-output "MSPower_DeviceWakeEnable is FALSE. Setting to TRUE..."
    $nicPowerWake.Enable = $True
    $nicPowerWake.psbase.Put()
    }

    $nicMagicPacket = Get-WmiObject MSNdis_DeviceWakeOnMagicPacketOnly -Namespace root\wmi | where {$_.instancename -match [regex]::escape($nic.PNPDeviceID) }
    If ($nicMagicPacket.EnableWakeOnMagicPacketOnly -eq $true)
    {
    # All good here
    write-output "EnableWakeOnMagicPacketOnly is TRUE"
    }
    Else
    {
    write-output "EnableWakeOnMagicPacketOnly is FALSE. Setting to TRUE..."
    $nicMagicPacket.EnableWakeOnMagicPacketOnly = $True
    $nicMagicPacket.psbase.Put()
    }

    # Since different NICs will have different registry keys,
    # this recursively scans through the reigstry to find the
    # the EEELinkAdvertisement property
    $FindEEELinkAd = Get-ChildItem "hklm:\SYSTEM\ControlSet001\Control\Class" -Recurse -ErrorAction SilentlyContinue | % {Get-ItemProperty $_.pspath} -ErrorAction SilentlyContinue | ? {$_.EEELinkAdvertisement} -ErrorAction SilentlyContinue
    If ($FindEEELinkAd.EEELinkAdvertisement -eq 1)
    {
    Set-ItemProperty -Path $FindEEELinkAd.PSPath -Name EEELinkAdvertisement -Value 0
    # Check again
    $FindEEELinkAd = Get-ChildItem "hklm:\SYSTEM\ControlSet001\Control\Class" -Recurse -ErrorAction SilentlyContinue | % {Get-ItemProperty $_.pspath} | ? {$_.EEELinkAdvertisement}
    If ($FindEEELinkAd.EEELinkAdvertisement -eq 1)
    {
    write-output "$($env:computername) - ERROR - EEELinkAdvertisement set to $($FindEEELinkAd.EEELinkAdvertisement)"
    }
    Else
    {
    write-output "$($env:computername) - SUCCESS - EEELinkAdvertisement set to $($FindEEELinkAd.EEELinkAdvertisement)"
    }
    }
    Else
    {
    write-output "EEELinkAdvertisement is already turned OFF"
    }

     

    # Disable Fast Startup in Windows 8-10 (Fast Startup breaks Wake On LAN)
    If ((gwmi win32_operatingsystem).caption -match "Windows 8")
    {
    write-output "Windows 8.x detected. Disabling Fast Startup, as this breaks Wake On LAN..."
    powercfg -h off
    }
    ElseIf ((gwmi win32_operatingsystem).caption -match "Windows 10")
    {
    write-output "Windows 10 detected. Disabling Fast Startup, as this breaks Wake On LAN..."
    # This checks if HiberbootEnabled is equal to 1
    $FindHiberbootEnabled = Get-ItemProperty "hklm:\SYSTEM\CurrentControlSet\Control\Session?Manager\Power" -ErrorAction SilentlyContinue
    If ($FindHiberbootEnabled.HiberbootEnabled -eq 1)
    {
    write-output "HiberbootEnabled is Enabled. Setting to DISABLED..."
    Set-ItemProperty -Path $FindHiberbootEnabled.PSPath -Name "HiberbootEnabled" -Value 0 -Type DWORD -Force | Out-Null
    }
    Else
    {
    write-output "HiberbootEnabled is already DISABLED"
    }
    }

    </Script>
    <SuccessCodes>0</SuccessCodes>
    <RunAs value="null" />
    <Conditions type="list">
    <PackageStepCondition>
    <Architecture>Both</Architecture>
    <Version>All</Version>
    <TypeName>OperatingSystem</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <IsUserLoggedOn>AlwaysRun</IsUserLoggedOn>
    <TypeName>LoggedOnUser</TypeName>
    </PackageStepCondition>
    <PackageStepCondition>
    <ConditionMode>None</ConditionMode>
    <InventoryCollectionId value="null" />
    <InventoryCollectionName></InventoryCollectionName>
    <TypeName>Collection</TypeName>
    </PackageStepCondition>
    </Conditions>
    <ErrorMode>StopDeploymentFail</ErrorMode>
    <Title>Windows Settings ONLY</Title>
    <TypeName>PowerShell</TypeName>
    <IsEnabled value="true" />
    <IsPostStep value="false" />
    <IsPreStep value="false" />
    </PowerShellStep>
    </Steps>
    <Timeout value="60" />
    <UseCustomTimeout value="false" />
    <RunAs value="null" />
    </PackageDefinition>
    <Description>This script will set the appropriate Windows-side
    Wake-On LAN settings on the NIC that is currently
    CONNECTED and has a match for the name "Ethernet"
    OR "Local Area Connection"

    This script will check/set the following:

    1. "Allow the device to wake the computer" to CHECKED
    2. "Only allow a magic packet to wake the computer" to CHECKED
    3. "Energy Efficient Ethernet" to OFF
    4. Fast Startup to DISABLED (Windows 8-10 only)

    ===============================================================
    If your NIC is named something else, just change the "-match"
    references on the "Get-NetAdapter" command below
    ===============================================================

    NOTE: You will still need to make certain Wake On LAN is enabled
    in the BIOS.

    written by Mike Resnick 05-15-2018</Description>
    <NewLibraryPackageVersionId value="null" />
    <OriginalId value="null" />
    <Version></Version>
    <IsAutoDownload value="false" />
    <FolderId value="1" />
    <LibraryPackageVersionId value="null" />
    <Name>Wake on LAN - Windows Settings ONLY</Name>
    <Path>Packages\Wake on LAN - Windows Settings ONLY</Path>
    <PackageDisplaySettings name="DisplaySettings">
    <DisplayType>Normal</DisplayType>
    <IconKey>Icon-Package</IconKey>
    <SortOrder value="232" />
    </PackageDisplaySettings>
    </Package>
    </AdminArsenal.Export>

    END XML ====================================================

    Good luck! If you have any issues, let me know.

    -Mike

    0
    Comment actions Permalink
  • Mike Kercher

    Great write up.  I'll mess with it in my copious spare time!

    Thanks!

    0
    Comment actions Permalink
  • Mick Duffin

    Mike,

    Thanks for the info, I'll give this a go...

    One thing I know might not allow this to work is some of our older PC's.. I've tried it on a couple of old HP machines manually and the WOL just doesn't want to kick in, need to get some time to spend on these to see if I've just missed something or they are just too old for this to work... but on some of the newer models it works just fine.

    Thanks again for the info.

    Mick.

    0
    Comment actions Permalink

Please sign in to leave a comment.