Remotely Invoking SCCM Client Actions

This topic contains 6 replies, has 6 voices, and was last updated by  David Stein 1 year, 2 months ago.

  • Author
  • #20509

    William Anderson

    Hey there everyone. Me again. I've been writing more and more functions in my "SCCM Toolbox" for the admins in my environment, and thought I'd start sharing them here. I post snippets on my blog as well, but figure since this gets a little more exposure, that I'd share with the class. 🙂 Let me know if these are useful and I'll keep posting them!

    Function Invoke-CMClient{
    < #
           Invoke commands remotely on an SCCM Client for a system or systems.
           This function allows you to remotely trigger some of the more common actions that you would find on the local
           Configuration Manager console.
        .PARAMETER -ComputerName 
           Specifies the target computer for the management operation. Enter a fully qualified domain name, a NetBIOS name, or an IP address. When the remote computer
           is in a different domain than the local computer, the fully qualified domain name is required.
           This command defaults to localhost.
        .PARAMETER -Action 
           Specifies the action to be taken on the SCCM Client.  The available actions are as follows:
                    HardwareInv - Runs a Hardware Inventory Cycle on the target machine.
                    SoftwareInv - Runs a Software Inventory Cycle on the target machine.
                    UpdateScan - Runs a Software Updates Scan Cycle on the target machine.
                    MachinePol - Runs a Machine Policy Retrieval and Evaluation Cycle on the target machine.
                    UserPolicy - Runs a User Policy Retrieval and Evaluation Cycle on the target machine.
                    FileCollect - Runs a File Collection Cycle on the target machine.
           You can pipe a computer name to Invoke-CMClient
           Invoke-CMClientAction -ComputerName server01 -Action HardwareInv
           The above command will invoke the Configuration Manager Client's Hardware Inventory Cycle on the targeted computer.  The return will look like the following:
            __GENUS          : 1
            __CLASS          : __PARAMETERS
            __SUPERCLASS     :
            __DYNASTY        : __PARAMETERS
            __RELPATH        : __PARAMETERS
            __PROPERTY_COUNT : 1
            __DERIVATION     : {}
            __SERVER         : server01
            __NAMESPACE      : ROOT\ccm
            __PATH           : \\server01\ROOT\ccm:__PARAMETERS
            ReturnValue      :
            PSComputerName   : server01
           Created by Will Anderson. 
           This script is provided AS IS without warranty of any kind.
                [string[]]$ComputerName = $env:COMPUTERNAME,
                )#Close Param
        SWITCH ($action) {
                            'HardwareInv'  {$_action = "{00000000-0000-0000-0000-000000000001}"}
                            'SoftwareInv'  {$_action = "{00000000-0000-0000-0000-000000000002}"}
                            'UpdateScan'   {$_action = "{00000000-0000-0000-0000-000000000113}"}
                            'MachinePol'   {$_action = "{00000000-0000-0000-0000-000000000021}"}
                            'UserPolicy'   {$_action = "{00000000-0000-0000-0000-000000000027}"}
                            'FileCollect'  {$_action = "{00000000-0000-0000-0000-000000000010}"}
                            } #switch
        FOREACH ($Computer in $ComputerName){
            if ($PSCmdlet.ShouldProcess("$action $computer")) {
                Invoke-WmiMethod -ComputerName $Computer -Namespace root\CCM -Class SMS_Client -Name TriggerSchedule -ArgumentList "$_action"
        }#End FOREACH Statement
    }#Close Function Invoke-CMClient
  • #20511

    Don Jones

    Absolutely – thank you! Your'e welcome to contact me if you'd like to post these as blog articles, and I definitely recommend submitting to the TechNet Script Gallery as well.

  • #20514

    Daniel Krebs


    Thank you!. You might want to look into Adam Bertram's module which he posted into the TechEd Gallery and his blog a couple of month ago. It includes additional functions to manage the CMClient remotely.

    • #47605

      David Stein

      When loading this into Visual Studio Code, it's balking at not having [CmdletBinding(SupportsShouldProcess=$true,...)], since it is invoked within the foreach() block.

  • #20518

    William Anderson

    Many thanks to both of you gents! I'll definitely send you some notes Don! And thanks for posting those links Daniel. I definitely need to work on my use of Try-Catch like Mr. Bertram's post. I'll keep exploring. 🙂

  • #33014

    Mark MacLachlan

    Shouldn't the function name in this code be Invoke-CMClientAction as is listed in the example text?

  • #33065


    Hi William, thanks for taking the time to share. I have been looking for some good SCCM tools – I have some bits here and there cobbled together. I am relatively new to Powershell, but from me – I think your formatting is excellent

You must be logged in to reply to this topic.