Schlagwort-Archive: cmd

Windows: Uptime anzeigen

Will man sich nur die Startzeit des Systems anzeigen lassen, tippt man in der Commandline einfach ’starttime‘ ein.
Kein Schnick, kein Schnack, kein Taskmanager usw.

Ich habe mir jetzt folgendes Batch erstellt und in C:\Windows\System32\EigeneBatches gespeichert:

@echo off
:: Autor:            Peter Maier
:: Datum:            17.06.2016
:: Dateiname:        starttime.bat
:: Beschreibung:    Zeigt die Startzeit eines PCs an. 
:: Verwendung:        cmd --> starttime
:: Abhängigkeiten:    Bordmittel
:: Quelle:             http://www.psteiner.com/2013/05/windows-uptime.html
::#######################################################
:: Variablen
:: Funktionen
:: Eigentliches Script
:: englisches Windows
:: for /f "tokens=1,2,*" %%i in ('net statistics workstation ^| find "since"') do @echo %COMPUTERNAME% up since %%k
::deutsches Windows
for /f "tokens=1,2,*" %%i in ('net statistics workstation ^| find "seit"') do @echo %%k

Ich habe den ursprünglichen Teil für ein englisches Windows mal drin gelassen. Sollte es nicht funktionieren, muss man ggfs. einfach mal ’net statistics workstation‘ auf der Kommandozeile ausführen.
Dann hat man schon mal die Info, welche Informationen es hier gibt.
Im deutschen Text steht in der Zeile z.B.

Statistik seit 22/06/2016 13:56:21

Wenn man es sich in der System32 ablegt oder eine PATH Variable auf das passende Verzeichnis setzt, kann man nun einfach ’starttime‘ eingeben und bekomt die gewünschte Info.

Logrotate für Windows

Das Problem:
Auf einem Windows Server erzeugt eine Software diverse Logfiles. Ab einer Größe über 10 MB bekommt der Systembetreuer eine Mail, dass die Datei zu groß wird. Dieses Logfile hat aber nur informativen Charakter und muss nicht aufgehoben werden.
Daher kann man es im Prinzip auf einfach löschen und neu erstellen.

Die Lösung wäre unter Linux einfach : Logrotate

Nach etwas Sucherei bin ich zunächst auf logwot8 gestoßen.
Was mich an diesem Tool allerdings stört ist, dass man da im Hintergrund ein Cygwin laufen hat. Ist mir für ein paar Logfiles zu viel Overkill 🙂

Umgesetzt habe ich das Ganze dann mit LogRotateWin.

Beschreibung:
„Eine Windows Implementierung des logrotate Tools, welches es auf Linux Platformen gibt. Das Ziel ist es die gleichen Kommandozeilenparameter wie die Linux Version zu verwenden.“

Für die Parameter schaut man am besten ins Wiki

Ich habe das bei uns jetzt so umgesetzt:

1. Download Logrotate
https://sourceforge.net/projects/logrotatewin/
https://sourceforge.net/p/logrotatewin/wiki/LogRotate/
2. Installation auf einen anderen PC – wir brauchen auf dem Server nur den Programmordner Logrotate, der unter C:\Program Files (x86) erstellt wird.
Deswegen führe ich die Installation auf einem anderen Rechner durch und kopiere das Verzeichnis.
Beim Test gab es Probleme mit den Berechtigungen, wenn das Programm unter C:\Program Files (x86)\LogRotate ausgeführt wird.
Ggfs. kann man das auch mit einem Tool extrahieren.

3. Auf dem Server das Feature .NET Framework 3.5 installieren, falls das nicht schon drauf ist.

4. Den gesamten Ordner „Logrotate“ nach „D:“ kopieren (bei diesem Server habe ich das mal auf D: gemacht).

5. Ein leeres Textfile mit dem Namen logrotate.status (ohne .txt !) anlegen. Und zwar direkt im Stammverzeichnis. Bei mir also D:\logrotate.status

6. Im Verzeichnis Logrotate\Content ein conf-File (z.B. schedule.conf) für das Logfile anlegen.
Inhalt der schedule.conf:
##########################
D:\Anwendungsname\logs\schedule.log {
rotate 5
size 10M
}
#########################

Erklärung:
Bei einer Größe von 10MB wird das Logfile gepackt und umbenannt nach „schedule.log.1.gz“
Das Ganze wird dann für 5 Versionen vorgehalten und dann wieder überschrieben.

7. In der Aufgabenplanung (Task Scheduler) einen neuen Job anlegen
Name: logrotate-schedule
Triggers: Daily 06:00
Actions: Start a program D:\LogRotate\logrotate.exe D:\LogRotate\Content\schedule.conf
Conditions:
Settings:

Besonderheiten für den Task:
„Run whether user is logged on or not“ und „Run with highest privileges“

Jetzt kümmert sich das System selbst um die Logs 🙂

Bevor man das Ganze in der Aufgabenplanung laufen lässt, sollte man das mal in der CMD (als Administrator) ausprobieren und schauen, ob man Fehlermeldungen sieht.

 

 

 

 

 

KMS (Key Management Server) im LAN finden

Wenn man einen KMS Server im Unternehmen sucht und die Dokumentation dazu nichts hergibt, kann man das schnell herausfinden.

Die CMD öffnen und folgenden Befehl eingeben:

C:\>nslookup -type=all _vlmcs._tcp

Die Ausgabe sieht dann so aus:
Server: dc.domain.de
Address: 192.168.x.x

_vlmcs._tcp.domain.de SRV service location:
priority = 0
weight = 0
port = 1688
svr hostname = license.domain.de
license.domain.de internet address = 192.168.x.x

SID zu User – User zu SID übersetzen.

Bei manchen Gelegenheiten benötigt man die Zuordnung von Benutzer zu SID.
Da Namen ja nur „Schall und Rauch“ sind, bezieht sich in Windows NT Systemen alles auf diese SID.

Also eine Variante:

Per whoami bekommt man ohne Parameter schlicht den Benutzernamen angezeigt:
C:\>whoami
domain\willi

Fügt man jetzt jetzt den Parameter „/USER“ hinzu, wird das Ganze schon informativer:
C:\>whoami /USER
USER INFORMATION
—————-
User Name     SID
============= ==============================================
domain\willi S-1-5-21-2071111111-172232323-1675865436-4567

Eine weitere Lösung ist es eine Abfrage über WMIC zu starten (WMIC – Take Command-line Control over WMI)

C:\>wmic useraccount where name=’willi‘ get sid
SID
S-1-5-21-2071111111-172232323-1675865436-4567

das Ganze geht auch anders herum:
C:\>wmic useraccount where sid=’S-1-5-21-2071111111-172232323-1675865436-4567′ get name
Name
willi

Damit hat man eine schöne Möglichkeit User nach SID und umgekehrt aufzulösen.

Und als letztes noch ein wenig Powershell:

User zu SID:
$objUser = New-Object System.Security.Principal.NTAccount(„DOMÄNENNAME“, „USERNAME“)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value

SID zu User:
$objSID = New-Object System.Security.Principal.SecurityIdentifier `
(„SID-HIER-EINTRAGEN“)
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
$objUser.Value