Trying to convert over the VBS Script from Microsoft and I ran this through Jooel's VBS2KIX script and it looks pretty good..

The basis of this code is from - http://support.microsoft.com/default.aspx?scid=KB;en-us;q222525
Code:

cls
break on
;***********************
;* Start Script
;***********************

Dim $sComputerName,$sUserOrGroup,$sPath,$computerContainer,$rootDSE,$lFlag
Dim $secDescriptor,$dACL,$ACE,$oComputer,$sPwd

;*********************************************************************
;* Declare constants used in defining the default location for the
;* machine account, flags to identify the object as a machine account,
;* and security flags
;*********************************************************************

$UF_WORKSTATION_TRUST_ACCOUNT=+H1000
$UF_ACCOUNTDISABLE=+H2
$UF_PASSWD_NOTREQD=+H20
$ADS_GUID_COMPUTRS_CONTAINER="aa312825768811d1aded00c04fd8d5cd"
$ADS_ACETYPE_ACCESS_ALLOWED=0
$ADS_ACEFLAG_INHERIT_ACE=2

;*********************************************************************
;* $the flags on this object to identify it as a machine account
;* and determine the name. The name is used statically here, but may
;* be determined by a command line parameter or by using an InputBox
;*********************************************************************

$lFlag = $UF_WORKSTATION_TRUST_ACCOUNT Or $UF_ACCOUNTDISABLE Or $UF_PASSWD_NOTREQD
$sComputerName = "TestAccount"

;*********************************************************************
;* Establish a path to the container in the Active Directory where
;* the machine account will be created. In this example, this will
;* automatically locate a domain controller for the domain, read the
;* domain name, and bind to the default "Computers" container
;*********************************************************************

$rootDSE = GetObject("LDAP://RootDSE")
$sPath="LDAP://<WKGUID="+$ADS_GUID_COMPUTRS_CONTAINER
$sPath=$sPath+","
$sPath=$sPath+$rootDSE.Get("defaultNamingContext")
$sPath=$sPath+">"
$computerContainer=GetObject($sPath)
$sPath = "LDAP://"+$computerContainer.Get("distinguishedName")
$computerContainer=GetObject($sPath)

;*********************************************************************
;* Here, the computer account is created. Certain attributes must
;* have a value before calling .SetInfo to commit (write) the object
;* to the Active Directory
;*********************************************************************

$oComputer=$computerContainer.Create("computer","CN="+$sComputerName)
$oComputer.Put("samAccountName",$sComputerName+"$$")
$oComputer.Put("userAccountControl",$lFlag)
$oComputer.SetInfo

;*********************************************************************
;* Establish a default password for the machine account
;*********************************************************************

$sPwd = $sComputerName + "$"
$sPwd = LCase($sPwd)
$oComputer.SetPassword $sPwd

;*********************************************************************
;* Specify which user or group may activate/join this computer to the
;* domain. In this example, "MYDOMAIN" is the domain name and
;* "JoeSmith" is the account being given the permission. Note that
;* this is the downlevel naming convention used in this example.
;*********************************************************************

$sUserOrGroup="YOURDOMAIN\user"

;*********************************************************************
;* Bind to the Discretionary ACL on the newly created computer account
;* and create an Access Control Entry (ACE) that gives the specified
;* user or group full control on the machine account
;*********************************************************************

$secDescriptor=$oComputer.Get("ntSecurityDescriptor")
$dACL=$secDescriptor.DiscretionaryAcl
$ACE=CreateObject("AccessControlEntry")

;*********************************************************************
;* An AccessMask of "-1" grants Full Control
;*********************************************************************

$ACE.AccessMask = -1
$ACE.AceType=$ADS_ACETYPE_ACCESS_ALLOWED
$ACE.AceFlags=$ADS_ACEFLAG_INHERIT_ACE

;*********************************************************************
;* Grant this control to the user or group specified earlier.
;*********************************************************************

$ACE.Trustee=$sUserOrGroup

;*********************************************************************
;* Now, add this ACE to the DACL on the machine account
;*********************************************************************

$dACL.AddAce($ACE)
$ACE=0
$secDescriptor.DiscretionaryAcl = $dACL

;*********************************************************************
;* Commit (write) the security changes to the machine account
;*********************************************************************

$oComputer.Put("ntSecurityDescriptor", Array($secDescriptor))
$oComputer.SetInfo

;*********************************************************************
;* Once all parameters and permissions have been set, enable the
;* account.
;*********************************************************************

$oComputer.AccountDisabled = not 1
$oComputer.SetInfo

;*********************************************************************
;* Create an Access Control Entry (ACE) that gives the specified user
;* or group full control on the machine account
;*********************************************************************

"The command completed successfully."

;*****************
;* End Script
;*****************



However, when I run it I get the following error-
Quote:


ERROR : IDispatch pointers not allowed in expressions!
Script: C:\!Kix\addcomputer.KIX
Line : 105





Line 105 is -
Code:

$ACE=0



Thanks!

Kent


Edited by kdyer (2004-08-21 01:10 AM)
_________________________
Utilize these resources:
UDFs (Full List)
KiXtart FAQ & How to's