lupolo
Goto Top

Datum in .txt aus einer .bat

Guten Morgen,

wir nutzen folgendes Script um bei einem Logon eines Clients in der Domäne festzustellen, wer an welchem Rechner angemeldet war und ziehen uns hierbei noch ein paar Hardwareinfos:

@echo off

set file=\\PATH\%COMPUTERNAME%.txt

wmic bios get serialnumber > %file% 
rem wmic nicconfig get DNSHostName >> %file%
wmic os get Name >> %file%
wmic nicconfig get IpAddress >> %file%
wmic nicconfig get MACAddress >> %file%

echo Datum=%date% >> %file%
echo Zeit=%time% >> %file%

klappt auch soweit, ich wollte nun noch das Datum und die Uhrzeit in die Datei rein schreiben. Aber irgendwie erhalte ich nur chinesische Zeichen...
2021-05-04 09_40_56-window

Hat jemand eine Idee? Wenn ich in einer CMD z.B. echo Datum=%date% >> %file% eingebe, erhalte ich in der Datei das gewünschte Ergebnis.

Grüße und danke vorab

Content-ID: 666374

Url: https://administrator.de/forum/datum-in-txt-aus-einer-bat-666374.html

Ausgedruckt am: 22.12.2024 um 19:12 Uhr

lupolo
lupolo 04.05.2021 um 09:51:31 Uhr
Goto Top
EDIT: Wenn ich die Datums Funktion nach oben setzte, ist alles was danach kommt auch in Hieroglyphen geschrieben.
2021-05-04 09_50_47-window
Looser27
Looser27 04.05.2021 um 10:02:05 Uhr
Goto Top
Das sieht aus, als würden bei Datum und Zeit andere Zeichensätze verwendet, als bei den restlichen Abfragen.
Da kein Zeichensatz gesetzt wird, bestimmt der erste Eintrag den zu verwendenden Zeichensatz.

Gruß

Looser
Doskias
Doskias 04.05.2021 um 10:02:30 Uhr
Goto Top
Moin,

wozu das ganze und wieso so umständlich?

In Zeile 3 hast du den Computernamen, ok. Aber wieso brauchst du dann in Zeile 7 noch das OS? Das hast du doch im AD stehen. Und die Datei wird jedes mal in Zeile 5 überschrieben also kannst du auch keine Historie aufbauen. Und wieso Batch und nicht Powershell? 2 Zeilen für Datum und Uhrzeit was mit get-Date() in Powershell schon fertig wäre.

Gruß
Doskias
lupolo
lupolo 04.05.2021 um 10:14:30 Uhr
Goto Top
Danke für eure Hinweise.

Wenn man die NUL's wie im zeiten Screenshot gezeigt weg bekommen würde, würde dies mir helfen.


@Doskias.
Hatte mir tatsächlich auch schon überlegt das in PowerShell umzubauen. Ich weiß aber nicht, ob ein PS Script vielleicht mehr Ressourcen beansprcht, da das Script via GPO ausgeführt wird.

Das war so von den Vorgängern gewollt, dass immer nur bei dem Client, der letzte User angezeigt wird.
Looser27
Looser27 04.05.2021 um 10:49:10 Uhr
Goto Top
Versuche mal ein
CHCP 1252 >NUL
vor der fehlerhaften Ausgabe.
148121
148121 04.05.2021 aktualisiert um 11:56:22 Uhr
Goto Top
Das kommt weil WMIC das Encoding der Shell nicht beachtet und standardmäßig in Unicode über STDOUT schreibt ...
@echo off
chcp 1252 >nul
set "file=\\PATH\%COMPUTERNAME%.txt"  
>"%file%" (  
    for /f "tokens=2 delims==" %%a in ('wmic bios get serialnumber /value') do echo Serial=%%a  
    for /f "tokens=2 delims==" %%a in ('wmic os get Name /value') do echo OS=%%a  
    for /f "tokens=2 delims==" %%a in ('wmic nicconfig where IPEnabled^=True get IpAddress /value') do echo IP=%%a  
    for /f "tokens=2 delims==" %%a in ('wmic nicconfig where IPEnabled^=True get MACAddress /value') do echo MAC=%%a  
    echo Datum=%date%
    echo Zeit=%time%
) 
Gruß w.
Doskias
Doskias 04.05.2021 um 12:42:48 Uhr
Goto Top
Zitat von @lupolo:
@Doskias.
Hatte mir tatsächlich auch schon überlegt das in PowerShell umzubauen. Ich weiß aber nicht, ob ein PS Script vielleicht mehr Ressourcen beansprcht, da das Script via GPO ausgeführt wird.
Keine Ahnung aber bei den paar Zeilen wird es, selbst wenn, nicht ins Gewicht fallen. Wir reden hier ja nicht von Minuten, sondern von (wenn überhaupt) Zehntel-Sekunden.

Das war so von den Vorgängern gewollt, dass immer nur bei dem Client, der letzte User angezeigt wird.
Das heißt ja aber nicht, dass du das so übernehmen musst. Wenn du dir wg. der Umstellung von Batch auf PowerShell schon Gedanken bezüglich der Performance machst, dann lasse ich die Aussage (das war vorher schon so) nicht gelten face-smile. Wenn du nicht weißt wofür du das brauchst, dann hast du hier schon einen unnötigen Eingriff in die Performance. Auch das was du abfragst, ist und bleibt teilweise unsinnig:

1. wmic bios get serialnumber: Bringt dir was? Die ändert sich nicht, wieso muss die bei jedem Start abgefragt werden?
2. rem wmic nicconfig get DNSHostName: Wozu das?
3. wmic os get Name: Ändert sich ebenfalls nicht. Weder die Windows Version noch die Partition auf der es installiert ist. Gleiche Frage wie oben: Wieso bei jedem Start abfragen?
4. wmic nicconfig get IpAddress: Ändert sich auch nicht permanent, hängt ja vom DHCP ab
5. wmic nicconfig get MACAddress: Ändert sich ebenfalls nie.

Sinnvoll wäre meiner Meinung nach:
1. Pro Rechner eine TXT-Datei
2. Oben Seriennummer, Name, Mac-Adresse
3. DHCP Lease auf 90 Tage (dann hast du so gut wie nie sich ändernde Adressen und brauchst die IP nicht mit loggen. Zuordnung MAC-> IP hast du ja im DHCP.
4. Zuordnung Rechnername und OS hast du im AD
5. Bei jeder Anmeldung die Textdatei um das aktuelle Datum erweitern. Dann hast du eine Historie.

Das würde in meinen Augen mehr Sinn machen als einfach immer nur zu Protokollieren wann sich irgendwer (Benutzername wird ja nicht mit protokolliert) am Rechner angemeldet hat. Wobei mir sich der tiefere Sinn noch nicht erschließt, was mit den gesammelten Daten dann gemacht werden soll.

Gruß
Doskias
mayho33
mayho33 04.05.2021 um 14:41:33 Uhr
Goto Top
Zitat von @lupolo:

Hatte mir tatsächlich auch schon überlegt das in PowerShell umzubauen. Ich weiß aber nicht, ob ein PS Script vielleicht mehr Ressourcen beansprcht, da das Script via GPO ausgeführt wird.

Kein Problem. Wir nutzen überall PS und keine Ressourcen-Probleme odgl.