| Platform SDK: Active Directory, ADSI, and Directory Services |
The following function deletes a group on a member server or a computer running Windows NT Workstation/Windows 2000 Professional:
////////////////////////////////////////////////////////////////////////////////////////////////////
/* DeleteADObject() - Deletes the passed object by AdsPath
Parameters
LPOLESTR pwszAdsPath - AdsPath of object to delete
Optional Parameters:
LPOLESTR pwszUser - User Name and Password, if the parameters are NOT passed,
LPOLESTER pwszPassWord - Binding will use ADsGetObject, if the parameters
- Are specified, will use ADsOpenObject, passing user name and password
*/
HRESULT DeleteADObject(LPOLESTR pwszAdsPath, LPOLESTR pwszUser,LPOLESTR pwszPassWord)
{
HRESULT hr;
BSTR bsParentPath;
IADs * pIADsToDelete = NULL;
IDirectoryObject * pIDirObjectParent= NULL;
VARIANT vCNToDelete;
WCHAR pwszTemp[512];
VariantInit(&vCNToDelete);
OutputDebugString(pwszAdsPath);
OutputDebugString(L"\r\n");
// Bind to the object being deleted
assert((pwszUser==NULL && pwszPassWord == NULL) || (pwszUser && pwszPassWord));
// If a username and password are passed in, use ADsOpenObject()
// otherwise use ADsGetObject()
if (!pwszUser) // No user password passed, use ADsOpenObject
{
hr = ADsGetObject( pwszAdsPath, IID_IADs,(void **)& pIADsToDelete);
}
else
{
hr = ADsOpenObject(pwszAdsPath, pwszUser, pwszPassWord,
ADS_SECURE_AUTHENTICATION,IID_IADs, (void**) & pIADsToDelete);
}
if (SUCCEEDED(hr))
{
// Get the parent path
hr = pIADsToDelete->get_Parent(&bsParentPath);
// Get the CN property for the object to delete
hr = pIADsToDelete->Get(L"cn",&vCNToDelete);
if (SUCCEEDED(hr))
{
// ************************************************************
// Now bind to the parent
// If a username and password are passed in, use ADsOpenObject()
// otherwise use ADsGetObject()
if (!pwszUser) // No user password passed, use ADsOpenObject
{
hr = ADsGetObject( bsParentPath, IID_IDirectoryObject,(void **)& pIDirObjectParent);
}
else
{
hr = ADsOpenObject(bsParentPath, pwszUser, pwszPassWord,
ADS_SECURE_AUTHENTICATION,IID_IDirectoryObject, (void**) & pIDirObjectParent);
}
if (SUCCEEDED(hr))
{
// Release the object to delete
pIADsToDelete->Release();
pIADsToDelete =NULL;
// Put the CN property into a string beginning with CN=
swprintf(pwszTemp,L"cn=%s\n",vCNToDelete.bstrVal);
// Ask the parent to delete the child
hr =pIDirObjectParent->DeleteDSObject(pwszTemp);
// Release the Parent Object
pIDirObjectParent->Release();
pIDirObjectParent = NULL;
}
}
SysFreeString(bsParentPath);
}
// If we have a IADsObject- we need to release it
if ( pIADsToDelete)
{
// Release the object to delete
pIADsToDelete->Release();
pIADsToDelete =NULL;
}
VariantClear(&vCNToDelete);
return hr;
}
The following code deletes a group on a member server or a computer running Windows NT Workstation/Windows 2000 Professional:
'Example: Deleting a local group on a member server or Windows NT Workstation/Windows 2000 Professional
'''''''''''''''''''''''''''''''''''''''
'Parse the arguments
'''''''''''''''''''''''''''''''''''''''
On Error Resume Next
Set oArgs = WScript.Arguments
If oArgs.Count < 2 Then
sComputer = InputBox("This script deletes a group from a member server or workstation." & vbCrLf & vbCrLf &"Specify
the computer name:")
sGroup = InputBox("Specify the group name:")
Else
sComputer = oArgs.item(0)
sGroup = oArgs.item(1)
End If
If sComputer = "" Then
WScript.Echo "No computer name was specified. You must specify a computer name."
WScript.Quit(1)
End If
If sGroup = "" Then
WScript.Echo "No group name was specified. You must specify a group name."
WScript.Quit(1)
End If
'''''''''''''''''''''''''''''''''''''''
'Bind to the computer
'''''''''''''''''''''''''''''''''''''''
Set cont= GetObject("WinNT://" & sComputer & ",computer")
If (Err.Number <> 0) Then
BailOnFailure Err.Number, "on GetObject method"
End If
'''''''''''''''''''''''''''''''''''''''
'Delete the group
'''''''''''''''''''''''''''''''''''''''
'You do not need to specify localGroup, just group is sufficient.
Set oGroup = cont.Delete("group", sGroup)
If (Err.Number <> 0) Then
BailOnFailure Err.Number, "on IADsContainer::Delete method"
End If
strText = "The group " & sGroup & " was deleted on computer " & sComputer & "."
Call show_groups(strText, sComputer)
'''''''''''''''''''''''''''''''''''''''
'Display subroutines
'''''''''''''''''''''''''''''''''''''''
Sub show_groups(strText, strName)
MsgBox strText, vbInformation, "Create group on " & strName
End Sub