#125432 - 2004-08-21 01:06 AM
Bulk Insert of Computers
|
Kdyer
KiX Supporter
   
Registered: 2001-01-03
Posts: 6241
Loc: Tigard, OR
|
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)
|
|
Top
|
|
|
|
#125436 - 2004-08-21 01:29 AM
Re: Bulk Insert of Computers
|
Kdyer
KiX Supporter
   
Registered: 2001-01-03
Posts: 6241
Loc: Tigard, OR
|
Shawn,
Still no good..
Remember, we have played with DACLs, etc. in the following post - Kent: Review a WSH script - Part Deux
And yes a couple of flavors of that.
Kent
|
|
Top
|
|
|
|
#125439 - 2004-08-21 01:50 AM
Re: Bulk Insert of Computers
|
Kdyer
KiX Supporter
   
Registered: 2001-01-03
Posts: 6241
Loc: Tigard, OR
|
OK.. Done.. Still error on 105.
Kent
|
|
Top
|
|
|
|
#125442 - 2004-08-21 02:38 AM
Re: Bulk Insert of Computers
|
Chris S.
MM club member
   
Registered: 2002-03-18
Posts: 2368
Loc: Earth
|
The error is probably in...
Code:
$secDescriptor.DiscretionaryAcl = $dACL
...and may not work with KiX. This line looks suspicious too...
Code:
$oComputer.Put("ntSecurityDescriptor", Array($secDescriptor))
|
|
Top
|
|
|
|
#125443 - 2004-08-22 04:59 PM
Re: Bulk Insert of Computers
|
Kdyer
KiX Supporter
   
Registered: 2001-01-03
Posts: 6241
Loc: Tigard, OR
|
Chris,
You are probably right. I will try a couple of things when I get back in to the office.
Kent
|
|
Top
|
|
|
|
#125444 - 2004-08-23 12:11 AM
Re: Bulk Insert of Computers
|
Howard Bullock
KiX Supporter
   
Registered: 2000-09-15
Posts: 5809
Loc: Harrisburg, PA USA
|
If it is worth anthing, I created a Perl EXE sometime ago to do just this. It takes a TAB delimited input file of DOMAIN, ComputerName, DNofOU. I can post it on my site if anyone is interested in trying it out.
|
|
Top
|
|
|
|
#125445 - 2004-08-23 03:50 AM
Re: Bulk Insert of Computers
|
Kdyer
KiX Supporter
   
Registered: 2001-01-03
Posts: 6241
Loc: Tigard, OR
|
Definitely! I am in the process of building 200 compuers to replace those coming off of lease.
Thanks Howard!
Kent
|
|
Top
|
|
|
|
#125446 - 2004-08-24 05:01 AM
Re: Bulk Insert of Computers
|
Howard Bullock
KiX Supporter
   
Registered: 2000-09-15
Posts: 5809
Loc: Harrisburg, PA USA
|
Progam uploaded to my website.
|
|
Top
|
|
|
|
#125449 - 2004-08-24 02:32 PM
Re: Bulk Insert of Computers
|
Kdyer
KiX Supporter
   
Registered: 2001-01-03
Posts: 6241
Loc: Tigard, OR
|
Yes.. That is the one from M$.
Kent
|
|
Top
|
|
|
|
#125451 - 2004-08-24 04:18 PM
Re: Bulk Insert of Computers
|
Kdyer
KiX Supporter
   
Registered: 2001-01-03
Posts: 6241
Loc: Tigard, OR
|
Right.. I used that for this process of conversion.
Kent
|
|
Top
|
|
|
|
Moderator: Glenn Barnas, NTDOC, Arend_, Jochen, Radimus, Allen, ShaneEP, Ruud van Velsen, Mart
|
1 registered
(Allen)
and 1172 anonymous users online.
|
|
|