Auslesen der AD OU meines Rechners per Batch
Hallo,
ich versuche per Batch anhand der Standort-OU eines Rechners im ActiveDirectory die Installation eines SW-Pakets mit unterschiedlichen Parametern zu starten.
Ich erkenne derzeit die OU eigentlich nur dadurch, dass die DNS-Settings entsprechend gesetzt sind und bekomme sie mit "ping -n 1 localhost" heraus. Das Resultat ist der Rechnername und der entsprechende Standort. Dies funktioniert allerdings nicht bei neuen Rechnern, die anscheinend etwas Zeit brauchen...
Die Alternative mit "gpresult /c" bringt mir zwar die richtige OU-Strucktur (und diverse andere Info's), allerdings dauert es ewig, daher kann ich es nicht verwenden.
Ich suche nun eine Möglichkeit den String CN=Rechnername,OU=Rechnertyp,OU=Standort,DC=de,DC=corp auch auf andere, schnellere Art und Weise herauszubekommen. Allerdings habe ich bislang weder in den ResourceKits (SupportTools, AdminTools) etwas gefunden, was mir helfen könnte.
Auszug aus dem bisherigen teilweise funktionierendem Code:
mfg
Axel
ich versuche per Batch anhand der Standort-OU eines Rechners im ActiveDirectory die Installation eines SW-Pakets mit unterschiedlichen Parametern zu starten.
Ich erkenne derzeit die OU eigentlich nur dadurch, dass die DNS-Settings entsprechend gesetzt sind und bekomme sie mit "ping -n 1 localhost" heraus. Das Resultat ist der Rechnername und der entsprechende Standort. Dies funktioniert allerdings nicht bei neuen Rechnern, die anscheinend etwas Zeit brauchen...
Die Alternative mit "gpresult /c" bringt mir zwar die richtige OU-Strucktur (und diverse andere Info's), allerdings dauert es ewig, daher kann ich es nicht verwenden.
Ich suche nun eine Möglichkeit den String CN=Rechnername,OU=Rechnertyp,OU=Standort,DC=de,DC=corp auch auf andere, schnellere Art und Weise herauszubekommen. Allerdings habe ich bislang weder in den ResourceKits (SupportTools, AdminTools) etwas gefunden, was mir helfen könnte.
Auszug aus dem bisherigen teilweise funktionierendem Code:
set srvalias=meinserver
set site1=one two three four
set site2=ten eleven
set site3=twenty thirty
for /F "tokens=2* delims=." %%j in ('ping -n 1 localhost ^|findstr /R ".corp"') do (
rem start subroutine below
call :CHECKSITE %%j
)
set instshare=\\%srvalias%\%site%
copy "%instshare%\MeineEXE.exe" "%temp%\MeineEXE.exe"
"%temp%\MeineEXE.exe"
goto END
REM ************************************************************************************
REM Subroutine to check the site of the client and set the site to a special site
REM ************************************************************************************
:CHECKSITE
set sitename=%1
for %%i in (%site1%) do (
if /i %%i==%sitename% set site=one
)
for %%i in (%site2%) do (
if /i %%i==%sitename% set site=ten
)
for %%i in (%site3%) do (
if /i %%i==%sitename% set site=twenty
)
goto :EOF
:END
exit
mfg
Axel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 37799
Url: https://administrator.de/forum/auslesen-der-ad-ou-meines-rechners-per-batch-37799.html
Ausgedruckt am: 26.12.2024 um 21:12 Uhr
7 Kommentare
Neuester Kommentar
Moin Axel,
ob diese Reg-Query-Variante allgemeingültig ist, kann ich nicht sagen - bei mir tut es jedenfalls auch.
Dann kannst Du es etwas abkürzen:
Den Leidensdruck mit gpresult verstehe ich... ist wirklich etwas zäh damit....
Gruß
Biber
ob diese Reg-Query-Variante allgemeingültig ist, kann ich nicht sagen - bei mir tut es jedenfalls auch.
Dann kannst Du es etwas abkürzen:
@echo off & setlocal
set srvalias=meinserver
set site1=one two three four
set site2=ten eleven
set site3=twenty thirty
set RegKey="HKLM\Software\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine"
for /F "tokens=6 delims=,=" %%j in ('reg query %regkey% /v Distinguished-Name') do call :CHECKSITE %%j
endlocal & set site=%site%
goto :eof
~~~~~~~~~ende Hauptbatch
:CHECKSITE
for %%i in (%site1%) do if /i %%i==%1 (set "site=one" && goto :eof)
for %%i in (%site2%) do if /i %%i==%1 (set "site=ten" && goto :eof)
for %%i in (%site3%) do if /i %%i==%1 (set "site=twenty" && goto :eof)
Den Leidensdruck mit gpresult verstehe ich... ist wirklich etwas zäh damit....
Gruß
Biber
Moin Axel,
thx für die Rückmeldung und kein Problem, wenn es mal etwas länger dauert..
...ich antworte ja auch nicht immer innerhalb von Stunden.
Eigentlich würde ich den Beitrag auch gerne schließen, andererseits
- eventuell hat tatsächlich noch jemand ein Tool/ein Skript/einen Tipp als andere gpResult-Alternative.
Oder, was auch eine wesentliche Information wäre, jemand postet: "Diesen Reg-Key gibt es bei mir gar nicht."
Deshalb lasse ich diesen Beitrag - bis zu einem möglichen Einspruch oder neuen Impulsen - erstmal als gelösten, aber offenen Beitrag stehen.
Grüße und schönen Sonntag
Biber
thx für die Rückmeldung und kein Problem, wenn es mal etwas länger dauert..
...ich antworte ja auch nicht immer innerhalb von Stunden.
Eigentlich würde ich den Beitrag auch gerne schließen, andererseits
- eventuell hat tatsächlich noch jemand ein Tool/ein Skript/einen Tipp als andere gpResult-Alternative.
Oder, was auch eine wesentliche Information wäre, jemand postet: "Diesen Reg-Key gibt es bei mir gar nicht."
Deshalb lasse ich diesen Beitrag - bis zu einem möglichen Einspruch oder neuen Impulsen - erstmal als gelösten, aber offenen Beitrag stehen.
Grüße und schönen Sonntag
Biber
Moin ahe,
falls das eine Frage sein sollte, nämlich wie Du an die letzten drei Tokens kommst, dann z.B. so:
[Demo am CMD-Prompt (zwei EINzeilige Befehle jeweils in der ">"-Zeile)]
Das heißt, die Anzahl der Tokens ("tokens=1-11") kannst Du auch noch höher setzen im Rahmen des M$-Limits von 1 bis 31.
Oder niedriger, wenn es bei Dir auch maximal 7 sein sollten wir in Deiner Beispielzeile.
Wichtig sind Dir ja nur die letzten drei Token , also die Variablen %x %y %z im obigen Beispiel.
Hoffe, das Prinzip is klargeworden....
Grüße
Biber
P.S. Deine Wortspielerei mit "Zuviel Ouzos für OUs.." finde ich schön...
falls das eine Frage sein sollte, nämlich wie Du an die letzten drei Tokens kommst, dann z.B. so:
[Demo am CMD-Prompt (zwei EINzeilige Befehle jeweils in der ">"-Zeile)]
(=19:05:36 D:\temp=)
>set line=CN=Rechnername,OU=Rechnertyp,OU=irgendeineUnter-ou,OU=noch_eineUnter-ou,OU=Standort,DC=de,DC=corp
(=19:05:46 D:\temp=)
>for /f "delims=, tokens=1-11" %a in ("%line%") do @for /f "tokens=1-3" %x in ("%k %j %i %h %g %f %e %d %c %b %a") do @Echo %x %y %z
DC=corp DC=de OU=Standort
Das heißt, die Anzahl der Tokens ("tokens=1-11") kannst Du auch noch höher setzen im Rahmen des M$-Limits von 1 bis 31.
Oder niedriger, wenn es bei Dir auch maximal 7 sein sollten wir in Deiner Beispielzeile.
Wichtig sind Dir ja nur die letzten drei Token , also die Variablen %x %y %z im obigen Beispiel.
Hoffe, das Prinzip is klargeworden....
Grüße
Biber
P.S. Deine Wortspielerei mit "Zuviel Ouzos für OUs.." finde ich schön...