Script zur Verknüpfung von GPOs zu OUs (erweitern)
eigentliche Funktion vorhanden, aber keine "Stapelverarbeitung"
Hallo,
ich habe hier ein nettes Script (von MS) welches ein vorhandenes GPO-Objekt zu einer OU verlinkt.
Soweit so gut.
Ich brauch es so,dass dieses Scripteine TXT-Datei schaut in der meinetwegen 20 OU's drin stehen die dann nach und nach vom Script abgearbeitet werden
wie dies Quell-OU Textdatei formatiert ist nicht vorgegeben - da bin ich alo frei
So hier sieht das Script aus, welches ich aber schon etwas erweitert habe:
müsste ich halt "irgendwie" so haben, dass dieser Wert aus der Textdatei ausgelesen und verarbeitet wird Bis die Datei keine weiteren Einträge mehr aufweisst. Die Übergabe des Dateinamens habe ich schon, nur wie auslesen und abarbeiten ?
Und da das für Euch Profis natürlich Zuuu einfach wäre ... hier noch was
Ich frage ja nach der EIngabe des GPO-namens der verlinkt werden soll - wer hier eine Idee hat zur Abfrage ob diese GPO überhaupt existiert (wegen falscheingaben)....
(editiert weil ich mit den abfragen schon etwas weiter gekommen bin)
Vielen Dank für Eure Mithilfe
Jan
Hallo,
ich habe hier ein nettes Script (von MS) welches ein vorhandenes GPO-Objekt zu einer OU verlinkt.
Soweit so gut.
Ich brauch es so,dass dieses Scripteine TXT-Datei schaut in der meinetwegen 20 OU's drin stehen die dann nach und nach vom Script abgearbeitet werden
wie dies Quell-OU Textdatei formatiert ist nicht vorgegeben - da bin ich alo frei
So hier sieht das Script aus, welches ich aber schon etwas erweitert habe:
Dim OUType
Dim OUFile
Dim GPOStatus
OUType = inputbox("Waehlen Sie die gewünschte OU zum verlinken aus" & vbnewline & vbnewline & "1 = Alle Benutzer OUs" & vbnewline & "2 = Alle Desktop OUs" & vbnewline & "3 = Alle Desktop -Windows2000 OUs" & vbnewline & "4 = Alle Desktop -WindowsXP OUs" & vbnewline & "5 = Alle Desktop -WindowsVista OUs" & vbnewline & "6 = Alle Notebook OUs" & vbnewline & "7 = Alle Notebook -Windows2000 OUs" & vbnewline & "8 = Alle Notebook -WindowsXP OUs" & vbnewline & "9 = Alle Notebook -WindowsVista OUs" ,"GPO zu OUs Verlinken")
if OUType ="" then
msgbox "Ohne Eingabe wird das Script beendet",16,"Hinweis"
WScript.Quit
end if
if isnumeric(OUType) = false then
msgbox "Bitte nur einzelne Zahlen eingeben",16,"Hinweis"
WScript.Quit
else
end if
if OUType > 9 or OUtype = 0 then
msgbox "Bitte nur zwischen 1 und 9 wählen",16,"Hinweis"
WScript.Quit
else
end if
if OUType = 1 then
OUFile="C:\01-Alle-BenutzerOUs.txt"
end if
if OUType = 2 then
OUFile="C:\02-Alle-DesktopOUs.txt"
end if
if OUType = 3 then
OUFile="C:\03-Alle-DesktopW2kOUs.txt"
end if
if OUType = 4 then
OUFile="C:\04-Alle-DesktopXPOUs.txt"
end if
if OUType = 5 then
OUFile="C:\05-Alle-DesktopVistaOUs.txt"
end if
if OUType = 6 then
OUFile="C:\06-Alle-NotebookOUs.txt"
end if
if OUType = 7 then
OUFile="C:\07-Alle-NotebookW2kOUs.txt"
end if
if OUType = 8 then
OUFile="C:\08-Alle-NotebookXPOUs.txt"
end if
if OUType = 9 then
OUFile="C:\09-Alle-NotebookVistaOUs.txt"
end if
wscript.echo "OUs aus der Datei " & OUfile & " werden benutzt."
GPOStatus = inputbox("Bitte geben Sie den Status der verlinkten GPO an" & vbnewline & vbnewline & "1 = deaktiviert" & vbnewline & "2 = aktiviert","Eingabe der Richtlinie")
if GPOStatus ="" then
msgbox "Ohne Eingabe wird das Script beendet",16,"Hinweis"
WScript.Quit
end if
if isnumeric(GPOStatus) = false then
msgbox "Bitte nur einzelne Zahlen eingeben",16,"Hinweis"
WScript.Quit
else
end if
if GPOStatus > 2 or GPOStatus = 0 then
msgbox "Bitte nur 1 oder 2 wählen",16,"Hinweis"
WScript.Quit
else
end if
if GPOStatus = 1 then
strGPOLinkOptions = 1
end if
if GPOStatus = 2 then
strGPOLinkOptions = 2
end if
GPOName = inputbox("Bitte geben Sie den Namen der zu verlinkenden Richtlinie ein" ,"Eingabe der Richtlinie")
On Error Resume Next
Set objContainer = GetObject _
("LDAP://ou=99-ClientMigTest,DC=ADS,DC=meinedomain,DC=NET")
strExistingGPLink = objContainer.Get("gPLink")
strGPODisplayName = GPOName
strNewGPLink = "[" & GetGPOADsPath & ";" & strGPOLinkOptions & "]"
objContainer.Put "gPLink", strExistingGPLink & strNewGPLink
objContainer.Put "gPOptions", "0"
objContainer.SetInfo
Function GetGPOADsPath
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = _
"<LDAP://cn=Policies,cn=System,DC=ADS,DC=meinedomain,DC=NET>;;" & _
"distinguishedName,displayName;onelevel"
Set objRecordSet = objCommand.Execute
Do Until objRecordSet.EOF
If objRecordSet.Fields("displayName") = strGPODisplayName Then
GetGPOADsPath = "LDAP://" & objRecordSet.Fields("distinguishedName")
objConnection.Close
Exit Function
End If
objRecordSet.MoveNext
Loop
objConnection.Close
End Function
müsste ich halt "irgendwie" so haben, dass dieser Wert aus der Textdatei ausgelesen und verarbeitet wird Bis die Datei keine weiteren Einträge mehr aufweisst. Die Übergabe des Dateinamens habe ich schon, nur wie auslesen und abarbeiten ?
Und da das für Euch Profis natürlich Zuuu einfach wäre ... hier noch was
Ich frage ja nach der EIngabe des GPO-namens der verlinkt werden soll - wer hier eine Idee hat zur Abfrage ob diese GPO überhaupt existiert (wegen falscheingaben)....
(editiert weil ich mit den abfragen schon etwas weiter gekommen bin)
Vielen Dank für Eure Mithilfe
Jan
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 71267
Url: https://administrator.de/contentid/71267
Ausgedruckt am: 25.11.2024 um 18:11 Uhr
1 Kommentar
Hallo jschneider!
Da ich das "nette Script (von MS)" einerseits nicht in Frage stellen und andererseits auch nicht testen mochte , habe ich nur einen Vorschlag für das "Drumherum":
Grüße
bastla
Da ich das "nette Script (von MS)" einerseits nicht in Frage stellen und andererseits auch nicht testen mochte , habe ich nur einen Vorschlag für das "Drumherum":
Do
OUType = InputBox("Waehlen Sie die gewünschte OU zum Verlinken aus" & vbnewline & vbnewline & _
"1 = Alle Benutzer OUs" & vbnewline & _
"2 = Alle Desktop OUs" & vbnewline & _
"3 = Alle Desktop -Windows2000 OUs" & vbnewline & _
"4 = Alle Desktop -WindowsXP OUs" & vbnewline & _
"5 = Alle Desktop -WindowsVista OUs" & vbnewline & _
"6 = Alle Notebook OUs" & vbnewline & _
"7 = Alle Notebook -Windows2000 OUs" & vbnewline & _
"8 = Alle Notebook -WindowsXP OUs" & vbnewline & _
"9 = Alle Notebook -WindowsVista OUs" & vbnewline & vbnewline & _
"0 = Abbruch", _
"GPO zu OUs Verlinken")
blnOK = True
If OUType = "" Then OUType = "0"
If Not IsNumeric(OUType) Then
blnOK = False
MsgBox "Nur eine Zahl zwischen 0 und 9 eingeben!", vbCritical, "Hinweis"
Else
OUType = Abs(CInt(OUType))
Select Case OUType
Case 0: WScript.Quit
Case 1: OUFile="C:\01-Alle-BenutzerOUs.txt"
Case 2: OUFile="C:\02-Alle-DesktopOUs.txt"
Case 3: OUFile="C:\03-Alle-DesktopW2kOUs.txt"
Case 4: OUFile="C:\04-Alle-DesktopXPOUs.txt"
Case 5: OUFile="C:\05-Alle-DesktopVistaOUs.txt"
Case 6: OUFile="C:\06-Alle-NotebookOUs.txt"
Case 7: OUFile="C:\07-Alle-NotebookW2kOUs.txt"
Case 8: OUFile="C:\08-Alle-NotebookXPOUs.txt"
Case 9: OUFile="C:\09-Alle-NotebookVistaOUs.txt"
Case Else
blnOK = False
MsgBox "Nur eine Zahl zwischen 0 und 9 eingeben!", vbCritical, "Hinweis"
End Select
End If
Loop Until blnOK
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(OUFile) Then
MsgBox "Datei " & OUFile & " wurde nicht gefunden - " & vbCrLF & _
"bitte benachrichtigen Sie ...", _
vbCritical, "Hinweis"
WScript.Quit
End If
WScript.Echo "OUs aus der Datei " & OUfile & " werden benutzt."
Do
GPOStatus = InputBox("Bitte geben Sie den Status der verlinkten GPO an" & vbnewline & vbnewline & _
"1 = deaktiviert" & vbnewline & _
"2 = aktiviert" & vbnewline & vbnewline & _
"0 = Abbruch", _
"Eingabe der Richtlinie")
blnOK = True
If GPOStatus = "" Then GPOStatus = "0"
If Not IsNumeric(GPOStatus) Then
blnOK = False
MsgBox "Nur eine Zahl zwischen 0 und 2 eingeben!", vbCritical, "Hinweis"
Else
GPOStatus = Abs(CInt(GPOStatus))
Select Case GPOStatus
Case 0: WScript.Quit
Case 1, 2: strGPOLinkOptions = CStr(GPOStatus)
Case Else
blnOK = False
MsgBox "Nur eine Zahl zwischen 0 und 2 eingeben!", vbCritical, "Hinweis"
End Select
End If
Loop Until blnOK
Do
GPOName = InputBox("Bitte geben Sie den Namen der zu verlinkenden Richtlinie ein" & vbCrLF & vbCrLF & _
"oder wählen Sie 'Abbrechen'!", _
"Eingabe der Richtlinie")
If GPOName = "" Then WScript.Quit
blnOK = True
strGPODisplayName = GPOName
strGPOADsPath = GetGPOADsPath
If strGPOADsPath = "" Then
blnOK = False
MsgBox GPOName & " wurde nicht gefunden!", vbCritical, "Hinweis"
End If
Loop Until blnOK = True
strNewGPLink = "[" & strGPOADsPath & ";" & strGPOLinkOptions & "]"
On Error Resume Next
aOU = Split(fso.OpenTextFile(OUFile, 1).ReadAll, vbCrLF)
For Each strOU In aOU
Set objContainer = GetObject _
("LDAP://ou=" & strOU & ",DC=ADS,DC=meinedomain,DC=NET")
strExistingGPLink = objContainer.Get("gPLink")
objContainer.Put "gPLink", strExistingGPLink & strNewGPLink
objContainer.Put "gPOptions", "0"
objContainer.SetInfo
Next
MsgBox "Verlinkungen vorgenommen.", vbInformation
'########## Ende Hauptprogramm ##########
Function GetGPOADsPath
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = _
"<LDAP://cn=Policies,cn=System,DC=ADS,DC=meinedomain,DC=NET>;;" & _
"distinguishedName,displayName;onelevel"
Set objRecordSet = objCommand.Execute
Do Until objRecordSet.EOF
If objRecordSet.Fields("displayName") = strGPODisplayName Then
GetGPOADsPath = "LDAP://" & objRecordSet.Fields("distinguishedName")
objConnection.Close
Exit Function
End If
objRecordSet.MoveNext
Loop
objConnection.Close
End Function
... eine Idee (hat) zur Abfrage ob diese GPO überhaupt existiert (wegen falscheingaben)....
Meine Idee dazu war eigentlich nur:strGPOADsPath = GetGPOADsPath
If strGPOADsPath = "" Then ... 'nicht gefunden
Grüße
bastla