brotox
Goto Top

Werte aus IP-Config als Variable setzen?

ipconfig -> ip filtern -> ip bzw. ganze zeile als variable speichern . . .

Moin Leute!

Ich hab auf der Arbeit das Problem das die Datenbank mit den IP's vorne und hinten nicht stimmt.

Ich habe nun eine Batch-routine geschrieben die ich in das Novell-Anmeldescript mit integriert habe.

Diese Speichert automatisch bei jeder anmeldung die ipconfig in einer .txt mit entsprechendem usernamen . . .

Aber was ist mit den leuten die mehrere Rechner haben? Sie haben mehrere IP's aber nur einen Usernamen . . .

Ich brauche nun die IP-Adresse als variable . . . wie setze ich diese?

Hier die Batch . . .

@echo off

if exist ip%NWUSERNAME%.txt goto jump
goto ip

:ip
ipconfig /all > \\*\.*.*.*\*\*\ip%NWUSERNAME%.txt

:jump

--> Hier brauch ich hilfe . . . wie setze ich die werte als Variable ??? <------
set var1=ipconfig /all | find /i "ip-adresse"
set var2=find /i \\*\.*.*.*\*\*\ip%NWUSERNAME%.txt "ip-adresse"


if %var1%==%var2%
goto jump2

if not ipconfig /all >> \\*\.*.*.*\*\*\ip%NWUSERNAME%.txt

:jump2


Ich würde mich sehr Freuen wenn mir jemand helfen könnte!

Danke im voraus!!!

mfg

BrotoX

Content-ID: 43970

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

Ausgedruckt am: 26.11.2024 um 01:11 Uhr

Biber
Biber 08.11.2006 um 11:43:18 Uhr
Goto Top
Tut mir Leid, BrotoX,

wenn Dein Problem mit Batch lösbar wäre, dann würde ja eine Forumssuche nach "ipconfig Batch" über 1200 Threads und über 6000 Kommentare liefern.

Aber anscheinend betrittst Du völliges Neuland mit Deiner Anforderung...

Vielleicht geht es später mal mit der Vista PowerShell 3.0?

Bedauernd
Biber
Dani
Dani 08.11.2006 um 11:47:19 Uhr
Goto Top
Hi,
willst du wirklich alles (was ipconfig /all) speichern?! Sprich brauchst du nur die IP oder den Rest auch?!


Gruß
Dani
BrotoX
BrotoX 08.11.2006 um 12:14:14 Uhr
Goto Top
Also, Ich speichere bereits alles was in der ipconfig /all steht in einer Textdatei die den namen ip%NWUSERNAME%.txt hat . . . und ich bekomme auch aus der ipconfig den wert den ich haben will . . . aber ich weiß nicht wie ich in zu einer variable setze . . . . .. und ja ich brauche den rest auch . . . aber ich brauche die ip als variable damit ich sie mit der ip die in der textdatei ist und der ip mit der der user reingeht vergleichen kann . .. damit ich die mitarbeiter erfassen kann die 2 oder mehr pcs haben . . .

Aber trotzdem DANKE für die schnellen antworten . . . weiter so face-smile
BrotoX
BrotoX 08.11.2006 um 12:14:15 Uhr
Goto Top
Dani
Dani 08.11.2006 um 12:34:49 Uhr
Goto Top
Hi,
und was ist wenn 2 ipconfig's in einer Textdatei ist. Dann läuft find nur einmal durch!

@echo off

if exist ip%NWUSERNAME%.txt (

	::--> Hier brauch ich hilfe . . . wie setze ich die werte als Variable ??? <------
	::set var1=ipconfig /all | find /i "ip-adresse"  
	FOR /f "tokens=2 delims=:" %%i IN ('ipconfig /all ^| FIND "IP-Adre"') DO (  

::		set var2=find /i \\*\.*.*.*\*\*\ip%NWUSERNAME%.txt "ip-adresse"  
		FOR /f "tokens=2 delims=:" %%k IN ('find /i \\*\.*.*.*\*\*\ip%NWUSERNAME%.txt "ip-adresse"') DO (  
	
			if %%i NEQ %%K (
			ipconfig /all >> \\*\.*.*.*\*\*\ip%NWUSERNAME%.txt
			break;
			)
		)
	)
)

if not exist ip%NWUSERNAME%.txt  ipconfig /all >> \\*\.*.*.*\*\*\ip%NWUSERNAME%.txt
Ich hab leider keine Zeit, den Spass zu testen!! Sorry...


Gruß
Dani
AxelHahn
AxelHahn 08.11.2006 um 12:59:51 Uhr
Goto Top
Hallo Brotox,


versuche es mal so:

For /F "tokens=2 Delims=:" %%i in ('ipconfig /all^|Findstr /i /c:"IP Address"') Do @set IP=%%i
echo IP=%IP%

Damit bekommst du die (bei mehreren Netzwerkadaptern: letzte) IP-Adresse zurück.
Du könntest das noch aussieben, wenn du in der FOR-Anweisung noch zusätzlich nach einem weitreren String suchst (einen Teil der bekannten IP-Adresse).

Weiterhin suche ich nach einem Text "IP Address" ... für die dt. Windows-Version musst du das ggf. anpassen.


Viele Grüsse
-= Axel =-

[Nachtrag]

du kannst auch eine Liste aller IP-Adressen in eine Variable packen - hier mal mit __ getrennt. Auf jeden Fall wird dein Dateiname rechnerspezifisch und damit eindeutig.
{
Set IP=
For /F "tokens=2 Delims=:" %%i in ('ipconfig /all^|Findstr /i /c:"IP Address"') Do call :addIP %%i
echo IP=%IP%
set logfile=%COMPUTERNAME%_%USERNAME%_%IP%.txt
echo logfile=%logfile%

pause && exit

:addIP
Set IP=%IP%%1___
}
[/Nachtrag]
BrotoX
BrotoX 08.11.2006 um 13:10:54 Uhr
Goto Top
DANKE für eure wirklich sehr schnellen und hilfreichen antworten . . . Ich habe Dani sein vorschlag ein wenig umgeschrieben (einige denkfehler in seiner hektik vermute ich) und werde sie jetzt mal im netz ausprobieren . . .

@AxelHahn:
Alle Rechner in unserer Firma sind in deutsch installiert . . . falls mal einer nicht deutsch sein sollte kann man die abfrage halt auf ip oder adress oder so umstellen face-smile Aber bisher bin ich zufrieden . . . ich werde morgen wohl anfangen können eine neue Datenbank für unsere ip-verteilung zu erstellen.

@axelhahn_2:
les dir den quelltext mal plz duch ^^ da steht was von ip%NWUSERNAME%.txt . . . sprich die datei wird schon rechnerspezifisch gespeichert . . . sonst wärs ja unfug bei 250 rechnern die abfrage durchlaufen zu lassen . . .
BrotoX
BrotoX 08.11.2006 um 14:20:52 Uhr
Goto Top
Hab mir mal deine HP angeguckt ;) sieht ganz interessant aus . . . hast wohl einiges drauf was Batch-Dateien angeht face-smile . . .

Hier ist die Datei an der ich gerade rumbastele . . . vielleicht findest du einen grund weßhalb es nicht richtig funktioniert

Hier nochmal meine Problembeschreibung . . .
Ich will Auf einem Server eine Textdatei mit dem inhalt ipconfig /all haben (funktioniert auch)
Nun will ich das bei jeder anmeldung eines Users überprüft wird ob die IP, mit der der Mitarbeiter ins Netz geht, auch mit der aus der Textdatei übereinstimmt. Wenn dies nicht so ist - soll er die ipconfig /all an die datei anfügen . . . Damit ich auch diejenigen erfasse die mehrere Rechner haben . . . .

Hier die Überarbeitete Bat von Deni . . .
@echo off

set varpfad="\\*\.*.*.*\*\*\"

if exist %varpfad%ip%NWUSERNAME%.txt (

::set var1=ipconfig /all ^| find /i "ip-adr"
FOR /f "tokens=2 delims=:" %%A IN ('ipconfig /all ^| FIND /i "ip-adr"') DO (

::set var2=find /i %varpfad%ip%NWUSERNAME%.txt "ip-adr"
FOR /f "tokens=2 delims=:" %%B IN ('find /i %varpfad%ip%NWUSERNAME%.txt "ip-adr"') DO (

if %%A NEQ %%B (
goto:eof)
if not %%A NEQ %%B (
ipconfig /all >> %varpfad%ip%NWUSERNAME%.txt
)
)
)
)

if not exist %varpfad%ip%NWUSERNAME%.txt ipconfig /all > %varpfad%ip%NWUSERNAME%.txt
)
8644
8644 08.11.2006 um 14:27:04 Uhr
Goto Top
Hi,

hat zwar nichts mit batch zu tun, aber Look@LAN könnte dein Problem auch lösen.

Psycho
BrotoX
BrotoX 08.11.2006 um 14:34:37 Uhr
Goto Top
oO und wie? Glaub nich . . . unser netz hier ist ziemlich abgeschottet . . . das muss jeweils lokal mit ipconfig gemacht werden . . . ich brauch ja nich nur die ip und den Namen des rechners . . .

Ich hab ja nur n problem mit dem setzen der variable und dem anschließendem vergleich 2er variablem . . . face-sad alles andere funktioniert ja . . . ich hab ja die daten von 90% unserer Rechner . . . halt nur von den Mitarbeitern nich die mehr wie einen Rechner haben.
8644
8644 08.11.2006 um 14:40:31 Uhr
Goto Top
ich wollte damit nur sagen, dass dieses Tool dein Netzwerk scannt, die IP, den Rechnernamen und den angemeldeten User auflistet.

Psycho
BrotoX
BrotoX 08.11.2006 um 14:44:58 Uhr
Goto Top
. . . Zeigt der auch den UserNamen von Novell an? ansonsten bringt mir das nichts . . . da jede Arbeitsstation den selben usernamen hat ^^
8644
8644 08.11.2006 um 14:48:55 Uhr
Goto Top
...das käme auf einen Versuch an! Ich hab hier kein Novell (mehr).

Psycho
AxelHahn
AxelHahn 08.11.2006 um 14:49:30 Uhr
Goto Top
Jetzt habe ich noch ein Verständnisproblem:
Die Liste der Netzwerkkarten ist rein Rechnerspezifisch - egal welcher Benutzer sich an dieser Kiste anmeldet - es werden dieselben Netzwerkkarten drin sein.

Wenn du zu jedem Benutzernamen alle seine IPs wissen willst, kannst du die Datei mit Benutzernamen aber ohne Rechner/ IP anlegen.

set logfile=\\server\share\%NWUSERNAME%.txt
echo START
For /F "tokens=2 Delims=:" %%i in ('ipconfig /all^|Findstr /i /c:"IP Address"') Do call :addIP %%i  
echo FERTIG
goto EOF

:addIP
echo teste %1
:: ipconfig wird nur dann hinjzugefügt, wenn die IP nicht im Text ist:
findstr "%1" "%logfile%" >nul ||  ipconfig /all >>"%logfile%"  
goto EOF

oder meinst du nochwas anderes??


Viele Grüsse
-= Axel =-
Biber
Biber 08.11.2006 um 14:58:39 Uhr
Goto Top
Sorry, wenn ich mich noch mal einmenge.

Unabhängig von den handwerklichen Problem in der obigen Skizze ist die Strategie IMHO Bullshit suboptimal.

- In der "IPConfig /all"-Ausgabe stehen ein oder mehrere Zeilen der Form:
"IP-Adresse..............: xxx.yyy.zzz.nnn"
Okay.
Aber auch jede Menge andere Zeilen mit xxx.yyy.zzz.nnn-Nummern.
- In der angesammelten %username%...IpconfigSammelsurium.txt stehen aneinandergereihte "IPConfig /all"-Ausgaben aus 12 Jahrhunderten.
- Gesucht wird in der "%username&...IpconfigSammelsurium.txt" aber nur nach "xxx.yyy.zzz.nnn", nicht nach der kompletten Zeile mit "IP-Adresse.....:xxx.yyy.zzz.nnn"

Kann nicht verlässlich sein.

Wenn schon, musst Du mit zwei Dateien arbeiten.
Eine, die nur jeweils die "IP-Adresse.......xxx.yyy.zzz.nnn"-Zeilen enthält.
Und (wenn Du die sinnvoll brauchen kannst) dieses IPConfig-All-Sammelbecken.

Wobei ich immer noch nicht verstehe, wozu denn alle jemals zugewiesenen IPs gesammelt werden sollen.

Gruß
Biber
BrotoX
BrotoX 08.11.2006 um 15:02:54 Uhr
Goto Top
Jetzt versteh ich dich nicht ganz . . .

Wir haben ein Novell Netz in dem sich jeder user an jedem PC anmelden kann . . .
Und wir haben mitarbeiter die mehrere PC's haben . . .
Sprich ich muss einfach nur wissen welcher user mit welcher ip reingeht.

Die Variable %NWUSERNAME% gibt den Usernamen von Novell an.
Also soll jedes mal wenn ein mitarbeiter ins netz geht diese textdatei aktualisiert werden.
Und wenn ein user mit verschiedenen IP's ins netz geht soll halt protokolliert werden.
BrotoX
BrotoX 08.11.2006 um 15:06:22 Uhr
Goto Top
NEIN!

Da die ip%NWUSERNAME%.txt Novell abhängig ist wird von jedem user EINE datei mit dem namen ipxyz.txt erstellt . . . also gibt es für jeden user EINE datei die EINDEUTIG ist und nicht alle user in einer datei aneinandergeriht . . .
BrotoX
BrotoX 08.11.2006 um 15:10:32 Uhr
Goto Top
BrotoX
BrotoX 08.11.2006 um 15:10:53 Uhr
Goto Top
Biber
Biber 08.11.2006 um 15:13:50 Uhr
Goto Top
EINE datei die EINDEUTIG ist und nicht alle user in einer datei aneinandergeriht

Nein, das habe ich auch nicht angenommen oder geschrieben.
Aber EINE User-spezifische Datei, die ein, zwei, drei oder 487 "IPConfig /All"-Ausgaben enthalten kann.
Falls dieser User im Laufe seines Arbeitsverhältnisses in einer Firma mal verschiedene IPs zugewiesen bekommt.

Und das versteh ich nicht...wozu willst Du die sammeln?

Gruß
Biber
BrotoX
BrotoX 09.11.2006 um 11:05:35 Uhr
Goto Top
Ich möchte diese "%username&...IpconfigSammelsurium.txt" haben um nachvollziehen zu können mit welchen ips die mitarbeiter die mit mehreren Rechnern arbeiten ins netz gehen. Bei allen andern mitarbeitern verwenden wir die batch die ich bereits im einsatz habe weiter . . . sprich die .txt wird einfach überschrieben. Ich kann ja mit Novell jedem Mitarbeiter ein anderes Anmeldeskript zuweisen . . . und da wir wissen welche mitarbeiter mit mehreren rechnern ins netz gehen wird nur bei denen DIE BATCH aus diesem BEITRAG genutzt. Und die komplette ipconfig /all möchte ich haben damit ich weiß mit welchen einstellungen der Mitarbeiter ins netz geht (von abteilung zu abteilung verschieden).

nebenbei habe ich mir bereits eine batch geschrieben die alle ips mit dem usernamen in eine datei schreibt . . . diese kann ich dann wunderbar in eine access datenbank importieren . . . dann schreibe ich eine abfrage die von mir aus einmal am tag durchläuft . .. und wir sind immer auf dem aktuellstem stand . . .

mfg

BrotoX
BrotoX
BrotoX 09.11.2006 um 11:05:59 Uhr
Goto Top
Biber
Biber 09.11.2006 um 18:31:26 Uhr
Goto Top
Hmm, BrotoX,

wenn ich Deinen letzten Kommentar richtig verstehe, sind dann Dein Problem und auch dieser Thread "Gelöst"?

Oder fehlt noch was bzw. wie sieht denn jetzt die Musterlösung aus?

Grüße
Biber
BrotoX
BrotoX 10.11.2006 um 11:02:56 Uhr
Goto Top
mein problem ist nach wie vor nicht gelöst face-sad

Ich kann immer noch nicht die Mitarbeiter erfassen die mehrere IPs sprich mehrere Rechner verwenden.

Ich bekomms zwar hin das er die variablen richtig setzt . . . aber ich schaff es nicht mit einem einfachen if satz meine probleme zu lösen.
Beispiel

nehmen wir an
var1= 192.168.0.1
var2= 192.168.0.2

dann möchte ich das,

if "%var1%"=="%var2%" goto end
if not "%var1%"=="%var2%" ipconfig /all >>ip%NWUSERNAME%.txt

Das müsste doch zu lösen sein . . . ich schätz mal da ist nur ein kleiner fehler drinn den ich nicht finde . . .

Ich wäre um weiter Vorschläge sehr Dankbar!


mfg

BrotoX
Dani
Dani 10.11.2006 um 11:20:10 Uhr
Goto Top
Hi,
das 2. IF brauchst du gar nicht!

var1= 192.168.0.1
var2= 192.168.0.2



if "%var1%"=="%var2%" goto end  
ipconfig /all >>ip%NWUSERNAME%.txt

Gruß
Dani
BrotoX
BrotoX 10.11.2006 um 11:41:26 Uhr
Goto Top
okay hast recht . . . aber ändert nichts daran das diese gleichung irgendwie nicht funktioniert
Dani
Dani 10.11.2006 um 13:40:27 Uhr
Goto Top
Hi,
also die obige Gleichung stimmt auch nicht!!!
Kannst du mal posten, welchen Code du im Moment hast??


Gruß
Dani
BrotoX
BrotoX 14.11.2006 um 12:26:44 Uhr
Goto Top
Sorry das ich erst jetzt antworte . . .

Also zur zeit steht es so drinn
ipreal="192.168.0.1"
iplisted="192.168.0.2"

if "%ipreal%"=="%iplisted%" goto end
if not "%ipreal%"=="%iplisted%" ipconfig /all > ip%NWUSERNAME%.txt

Ich wär für verbesserungsvorschläge sehr dankbar . . .
AxelHahn
AxelHahn 14.11.2006 um 13:19:43 Uhr
Goto Top
Hi Brotox,


wozu der Vergleich? Nimm den Konstrukt:
findstr "%ipreal%" "ip%NWUSERNAME%.txt" >nul ||  ipconfig /all >>"ip%NWUSERNAME%.txt"   

.s Posting 08.11.2006 um 14:49:30 Uhr


Viele Grüsse
-= Axel =-
Biber
Biber 14.11.2006 um 13:21:15 Uhr
Goto Top
Moin Brotox,

vielleicht ist das führende Leerzeichen bei der "IPConfig /All"-Auswertung das Problem bei Dir... das lässt sich aber ohne den echten Code nicht erkennen.

Probier es bitte mal mit folgenden Anpassungen (ausgehend von AxelHahn's Variante vom 8.11.):

@echo off & setlocal
Set "iplisted=192.168.0.1"  
REM Die IP, mit der verglichen werden soll: OHNE führendes Leerzeichen; OHNE Anführungszeichen
For /F "tokens=2 Delims=:" %%i in ('ipconfig /all^|Findstr /i /c:"IP-Adresse"') Do For %%j in (%%i) do Set "ipReal=%%j"  
REM Die IP aus IPConfig /All: OHNE führendes Leerzeichen; OHNE Anführungszeichen
REM Kontrolle  :
Echo IPlisted: [%iplisted%] ...IPReal: [%ipReal%]
REM Kontrolle
Echo DEBUG...Nächster Befehl: if "%ipreal%"=="%iplisted%" goto end  
if "%ipreal%"=="%iplisted%" goto end  
Echo DEBUG...Nächster Befehl: if not "%ipreal%"=="%iplisted%" ipconfig /all ^> ip%NWUSERNAME%.txt  
if not "%ipreal%"=="%iplisted%" ipconfig /all > ip%NWUSERNAME%.txt  
REM     usw......

:end

Gruß
Biber
BrotoX
BrotoX 20.11.2006 um 08:31:40 Uhr
Goto Top
Axel . . . Du bist Genial! face-smile

Es Funktioniert jetzt alles Wunderbar!

Ich danke euch für die schnellen Hilfen . . .


Bis zum nächsten problem ^^


mfg

BrotoX
BrotoX
BrotoX 20.11.2006 um 08:33:58 Uhr
Goto Top
Auch dir . . . Danke für die mühe!

Hab jetzt dank AxelHahn eine Lösung gefunden.
Habe deinen Lösungsvorschlag daher nicht ausprobiert.


mfg

BrotoX