Author Posts

February 6, 2016 at 8:28 am

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.

February 6, 2016 at 9:31 am

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

$objDevice.Delete_()

February 6, 2016 at 9:39 am

Dave,

That did it.

Thank you for the help!

February 7, 2016 at 1:46 am

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