Using WMI Delete method


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:


void Delete_ (int, IDispatch)

The VBScript code is from this link at:, 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'")

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.

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



That did it.

Thank you for the help!

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