mag-lion
Goto Top

PC-Namen per Batch für Inventarisierung verwenden

Hallo,

folgende Problemstellung:

Hab ein Script, welches nach bestimmten Zeitintervallen überprüft, ob neue PCs hinzugekommen sind
bzw. ob PCs hardwaremäßig verändert wurden.


for %%x in (PCA1 PCA2 PCA3 PCA4 PCA5) do if %%x == %COMPUTERNAME% \SERVERinventur.cmd \SERVERPCs
for %%x in (PCB1 PCB2 PCB3 PCB4 PCB5) do if %%x == %COMPUTERNAME% \SERVERinventur.cmd \SERVERPCs


Wegen der steigenden Anzahl dieser wird das Script unübersichtlich. Sowohl in der Länge als auch Breite.
Eintrag erfolgt hier manuell und dann auch noch im AD.
Also ab jetzt nur noch im AD und dann lass ich mit "adfind" eine Datei mit allen PC-Namen erstellen.
Aber ich bekomme es nicht auf die Reihe, die an Stelle von ... PCA1 PCA2 ... einzusetzen.

Bitte um einen Hinweis.
(Ich glaub Pfingsten war zu lang face-wink )

Gruß
mag

Content-ID: 60086

Url: https://administrator.de/contentid/60086

Ausgedruckt am: 25.11.2024 um 21:11 Uhr

Dani
Dani 29.05.2007 um 17:58:25 Uhr
Goto Top
Hallo mag-lion!
Könntest du noch posten, wie die Computernamen in der Datei gespeichert sind. Dann haben wir es beim Entwickeln einfacher.


Gruß
Dani
mag-lion
mag-lion 30.05.2007 um 06:48:28 Uhr
Goto Top
Guten Morgen

@Dani
kennst du "adfind"? Habe es so eingepackt:
"cname.cmd"
adfind -b dc=dom,dc=local -f "objectcategory=computer" name | find /i ">name:" > aname.txt
for /f "tokens=2 delims= " %%i in ('type "aname.txt"') do echo %%i >> cname.txt
sort cname.txt /o cname.txt
del aname.txt
Bekomme dann folgende Datei:
"cname.txt"
PCA1
PCA2
PCA3
:
Gibt sicherlich noch ne bessere, sprich kürzere Lösung. Wer sie kennt, bitte posten.

Danke.

Gruß
mag
Biber
Biber 31.05.2007 um 00:25:32 Uhr
Goto Top
Moin mag-lion,
Gibt sicherlich noch ne bessere, sprich kürzere Lösung.
Hmmm, oft ist "kürzer" auch "besser", aber nicht immer.
Befrage mal Frauen zu diesem Thema.

Was ich zumindest empfehlen würde ist, die Möglichkeiten des AdFind-Tools ein wenig mehr zu nutzen.
Allein schon wegen der Les- und Wartbarkeit Deines Dreizeilers.

Skizze (die Pfade zur Adfind.exe und Pfad zur Outputdatei hab ich uns geschenkt):
::---------ADQuercheck.bat
@Echo off
adfind -b dc=Dom dc=local -f "objectcategory=computer" -list -sort name name >cname.txt  
:: jetzt sollte die Liste so aussehen wie in Deinem bisherigen Skript
REM ...Die nächtes Codezeile hier versteh ich nicht... ? *Kopfkratz*
REM ...Falls der %COMPUTERNAME% in der Liste ist... ? 
REM ...dann rufe <u>immer</u> diese Serverinventur.cmd ?? Kann nich' sein...  
goto vergissdenQuatsch
REM ???? For /f %%x in (cname.txt) do if /i "%%x" == "%COMPUTERNAME%" \SERVERinventur.cmd \SERVERPCs  
:vergissDenQuatsch

Also nochmal.... wenn die oben gepostete Logik stimmen sollte, dann reicht:

::----MalWiederEinOneliner.bat
@adfind -b dc=Dom dc=local -f "objectcategory=computer" -list -sort name name |find /i "%COMPUTERNAME%" &&  \SERVERinventur.cmd \SERVERPCs  

...wobei ich bei dieser Logik doch Zweifel habe, ob ich alles so nachvollziehen kann...
Bitte um Erläuterung.

Grüße
Biber
[Edit] Nachtrag.
Wenn die erzeugte Liste ohnehin per "find" gefiltert wird und gar nicht gespeichert wird, dann brauche ich auch die Parameter "...-sort name.." nicht. Weil: Is' sich Bullshit.

Somit etwas kürzer:
::----MalWiederEinOneliner.bat
@adfind -b dc=Dom dc=local -f "objectcategory=computer" -list name |find /i "COMPUTERNAME%" &&  \\SERVERinventur.cmd \\SERVERPCs  
[/Edit 1.6.2007]
mag-lion
mag-lion 31.05.2007 um 15:10:04 Uhr
Goto Top
Moin mag-lion,
Moin Moin Biber,

Befrage mal Frauen zu diesem Thema.
face-smile später und allein face-wink

Was ich zumindest empfehlen würde ist,
die Möglichkeiten des AdFind-Tools ein
wenig mehr zu nutzen.
Ja, wer lesen kann...
Danke

REM ...Die nächtes Codezeile hier
versteh ich nicht... ? *Kopfkratz*
REM ...Falls der %COMPUTERNAME% in der Liste
ist... ?
REM ...dann rufe immer
diese Serverinventur.cmd ?? Kann nich'
sein...
goto vergissdenQuatsch
REM ???? For /f %%x in (cname.txt) do if /i
"%%x" == "%COMPUTERNAME%"
\SERVERinventur.cmd \SERVERPCs
:vergissDenQuatsch


Also nochmal.... wenn die oben gepostete
Logik stimmen sollte, dann reicht:

::----MalWiederEinOneliner.bat
> @adfind -b dc=Dom dc=local -f
> "objectcategory=computer" -list  
> -sort name name |find /i
> "%COMPUTERNAME%" &&   
> \SERVERinventur.cmd \SERVERPCs
> 

...wobei ich bei dieser Logik doch Zweifel
habe, ob ich alles so nachvollziehen kann...
Bitte um Erläuterung.

Grüße
Biber

Doch doch, stimmt. Nicht Quatsch.
Hab nur nen kleinen bzw. zwei \\ vergessen
und zwar hier \\SERVER\inventur.cmd \\SERVER\PCs.
(Ich hoffe jetzt sind sie zu sehen?)

Erklärung:
Beim login jedes PCs wird ein Script ausgeführt. Dabei wird
anhand Datumsvergleich überprüft, ob 10 Tage um sind.
Wenn ja, dann soll, falls der %COMPUTERNAME% in der Liste
ist (und diese Einträge hab ich manuell ergänzt, je nach Eintrag
im AD) das Script "inventur.cmd" ausgeführt werden und das
Ergebnis nach \PCs schreiben.

Und...
Na klar face-smile face-smile face-smile
Habs gerade probiert.
Dein "::----MalWiederEinOneliner.bat" funktioniert.
*tralala* klappt wunderbar
d.h. manuelle Einträge entfallen ab sofort

Vielen vielen Dank

Gruß
mag


PS: Kann es sein, dass administrator.de heute überlaufen war???
Biber
Biber 31.05.2007 um 15:28:12 Uhr
Goto Top
Moin mag,

freut mich, wenn es klappt.
Dann setze ich diesen Beitrag mal auf "Gelöst" und "Geschlossen".

PS: Kann es sein, dass administrator.de heute überlaufen war???
Hmmm, wenn ich @Frank (=unser aller Webmaster) richtig verstanden habe,
hat sich heute morgen die Datenbank aufgehängt.
Seiner Meinung nach wegen eines defekten Speicherchips.
(Mein Verdacht: Kann auch eine Verzweiflungstat wegen der gestrigen @Volcom-Beiträge gewesen sein.) *g

Na ja, niemand ist Volcom.....

Grüße
Biber