Using WMI Delete method

This topic contains 3 replies, has 3 voices, and was last updated by  Richard Siddaway 1 year, 6 months ago.

  • Author
    Posts
  • #34948

    Clum09
    Participant

    Hello,

    I have a PowerShell script that uses the WMI COM object to connect to the SCCM server to delete the device from the SCCM server before I add the device to the SCCM server.

    When I used WMI in VBScript to connect to the SCCM server and delete the device, it works fine. However, when I translated the VBScript code to PowerShell, it generated the output below, and the device is not deleted:

    OverloadDefinitions
    ——————-
    void Delete_ (int, IDispatch)

    The VBScript code is from this link at: http://eskonr.com/2012/04/vb-script-delete-computer-from-sccm-database/, which I translated into the PowerShell code as shown below:

    $sccmServer = 'MySCCMServer'
    $siteCode = 'MySCCMSite'
    $computer = 'PC1'
    $username = 'Domain\user'
    $password = 'secrete!'
    
    $objSWBemlocator = New-Object -ComObject WbemScripting.SWbemLocator;
    $objWMIService = $objSWBemlocator.ConnectServer($sccmServer,"root\SMS\site_"+$siteCode,$userName,$password);
    $strQry = "SELECT ResourceID FROM SMS_R_System WHERE Name='$computer'";
    $objEnumerator = $objWMIService.ExecQuery($strQry);
    foreach ($objInstance in $objEnumerator)
    {
    	foreach ($objItem in $objInstance.Properties_)
    	{
    		$resourceId = $objItem.Value;
    	}
    }
    $objDevice = $objWMIService.Get("SMS_R_System='$resourceId'")
    $objDevice.Delete_
    
    I also try:
    
    $objDevice = $objWMIService.Get("SMS_R_System='$resourceId'") | % {$_.Delete_}
    
    and the result is the same.
    
    

    Any help or comment will greatly be appreciated.

    Thanks in advance.

  • #34950

    Dave Wyatt
    Moderator

    When you call methods on objects in PowerShell, you have to include parentheses (even if you're not passing in any arguments.)

    $objDevice.Delete_()
    
  • #34951

    Clum09
    Participant

    Dave,

    That did it.

    Thank you for the help!

  • #34966

    Richard Siddaway
    Moderator

    You really should look at using the WMI cmdlets instead of using the COM objects like this

You must be logged in to reply to this topic.