[VBS} Resolve hostname met een vervolg actie

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Dwazer
  • Registratie: April 2000
  • Laatst online: 20-05 11:24
Voor een client migratie (Windows XP SP2/3 naar Windows 7 SP1) heb ik een WDS (Windows Deployment Services) omgeving opgezet met MDT2010. Image gemaakt en drivers geimporteerd. Kan met succes een client voorzien van een nieuwe Windows 7 installatie.

Voor het toevoegen van een client aan het domein, gebruik ik een script wat aan het einde van de sequence draait:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
On Error Resume Next
' This script joins the current computer to a domain, using specified user and placing it in specified OU
' Created by Sole Viktor - sole@sole.dk

' Set these variables
strDomain = "DOMEIN" ' Domain to logon
strPassword = "WACHTWOORD" ' Service account logon password
strUser = "GEBRUIKERSNAAM" ' Service account
strOU = "COMPUTEROU" ' OU to place computer in

' Constants to choose from when joining
Const JOIN_DOMAIN = 1
Const ACCT_CREATE = 2
Const ACCT_DELETE = 4
Const WIN9X_UPGRADE = 16
Const DOMAIN_JOIN_IF_JOINED = 32
Const JOIN_UNSECURE = 64
Const MACHINE_PASSWORD_PASSED = 128
Const DEFERRED_SPN_SET = 256
Const INSTALL_INVOCATION = 262144

Set objNetwork = CreateObject("WScript.Network")
strComputer = objNetwork.ComputerName

' Join Domain
Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & _
strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & _
strComputer & "'")
ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain, _
strPassword, strDomain & "\" & strUser, strOU, _
JOIN_DOMAIN + ACCT_CREATE + DOMAIN_JOIN_IF_JOINED)

Select Case ReturnValue

Case 0 Status = "Success"

Case 2 Status = "Missing OU"

Case 5 Status = "Access denied"

Case 53 Status = "Network path not found"

Case 87 Status = "Parameter incorrect"

Case 1326 Status = "Logon failure, user or pass"

Case 1355 Status = "Domain can not be contacted"

Case 1909 Status = "User account locked out"

Case 2224 Status = "Computer Account allready exists"

Case 2691 Status = "Allready joined"

Case Else Status = "UNKNOWN ERROR " & ReturnValue

' Show Status
WScript.Echo "Join domain status: " & Status

End Select


Nu is dit een script wat zijn werk doet :)

Nu zou ik willen toevoegen dat het script op basis van de hostname bepaald in welke OU de client terecht komt met een soort van "IF + DO + OR" functie (Gaat om 4 verschillende OU's: 2 bedrijven met een Desktop en een Notebook OU).

Bijvoorbeeld:
IF Hostname: 1234AA***** DO OU: 1234AA
IF Hostname: 1234AB***** DO OU: 1234AB
enz.
(De ***** is een reeks getallen van de client zelf, die is uniek voor elke client. Alleen de eerste 6 characters zijn een vast gegeven)

Voor het resolven van de hostname, heb ik dit script gevonden:
code:
1
2
3
4
Set wshShell = CreateObject( "WScript.Shell" )
strRegValue = "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Hostname"
strHostName = wshShell.RegRead( strRegValue )
WScript.Echo "Host Name: " & strHostName


Is er een idee hoe dit het mooiste opgelost kan worden? :)

Acties:
  • 0 Henk 'm!

  • Semt-x
  • Registratie: September 2002
  • Laatst online: 10:37
Zelf leren scripten! een voorzet;

met de functie Left(strHostName, 6) selecteer je de eerst 6 karakters van die hostname

strHostnameType = Left(strHostName, 6)
Select Case strHostnameType
Case "server" strOU = "dn=serverOU,DC=domain,DC=nl"
Case "werkst" strOU = "dn=werkstation,OU,DC=domain,DC=nl"
End Select

h2h,
Sem

Acties:
  • 0 Henk 'm!

  • alt-92
  • Registratie: Maart 2000
  • Niet online

alt-92

ye olde farte

Jup :)
En begin dus ook maar gelijk met die Global
Visual Basic:
1
On error resume next
weg te halen en een
Visual Basic:
1
Option Explicit
neer te zetten :Y

ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device


Acties:
  • 0 Henk 'm!

  • Krypt
  • Registratie: April 2000
  • Laatst online: 27-05 20:36
Ik vind het overigens wel vatsig om de hostname uit de registry te halen. Heb je gewoon een call voor.
code:
1
2
Set objWSHNetwork = CreateObject("WScript.Network")
strComputerName = objWSHNetwork.Computername


Leuke is, dat ie al in je script staat. Waarom gebruik je die variabele niet? of begrijp ik het nu verkeerd?

[ Voor 21% gewijzigd door Krypt op 02-11-2012 16:40 ]

Pvouput live


Acties:
  • 0 Henk 'm!

  • Dwazer
  • Registratie: April 2000
  • Laatst online: 20-05 11:24
Heb inmiddels het al voor elkaar: Wilde in eerste instantie dat het script beide opdrachten ineens zou doen of zelf het toevoegen van het domein al direct naar de juiste OU ging.

Heb nu binnen WDS een nieuwe taak toegevoegd aan de sequence en dit script aan vast gehangen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Option Explicit

Dim objOUs, objDefaultCntr, objNewOU, objComputer
Dim strPrefix, strOU

' Setup dictionary object.
Set objOUs = CreateObject("Scripting.Dictionary")
objOUs.CompareMode = vbTextCompare

' Specify which OU corresponds to which computer prefix.
objOUs("001") = "ou=Computers,ou=BuildingA,dc=domain,dc=com"
objOUs("002") = "ou=Computers,ou=BuildingB,dc=domain,dc=com"
objOUs("003") = "ou=Computers,ou=BuildingC,dc=domain,dc=com"

' Bind to default computers container.
Set objDefaultCntr = GetObject("LDAP://cn=Computers,dc=domain,dc=com")

' Filter on computer objects.
objDefaultCntr.Filter = Array("computer")

' Enumerate computer objects in default container.
For Each objComputer In objDefaultCntr
' Determine computer name prefix
strPrefix = Left(objComputer.sAMAccountName, 3)
' Determine OU.
If objOUs.Exists(strPrefix) Then
strOU = objOUs(strPrefix)
' Bind to the destination OU.
Set objNewOU = GetObject("LDAP://" & strOU)
' Move the computer object into this OU.
objNewOU.MoveHere objComputer.AdsPath, vbNullString
Else
' No OU found in dictionary object.
End If
Next

Bron

Bedankt voor de input, het werkt voor nu :)