Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

PowerShell For Runaways - Part II

Mitglied: TuXHunt3R

TuXHunt3R (Level 3) - Jetzt verbinden

28.04.2008, aktualisiert 18.10.2012, 43215 Aufrufe, 16 Kommentare, 3 Danke

Diverse Checks mit der PowerShell durchführen und ein Logfile generieren.

Hallo ans Forum

Leider ist die PowerShell immer noch nicht so verbreitet, wie ich mir das wünschen würde.
Bill Gates, rsp. sein Nachfolger Ballmer haben es verschlampt, die PowerShell in das SP1 für Vista zu integrieren, was mich persönlich ziemlich angurkt.
Manchmal könnte man meinen, Sie glauben nicht an ihr eigenes Produkt....
Immerhin haben Sie es geschafft, die PowerShell in das neue Server-OS (Server 2008) zu integrieren, aber auch dort gibt es wieder eine künstliche Einschränkung.
Man kann die PowerShell nicht im ServerCore-Modus verwenden, da in diesem GUI-losen Betriebsmodus das .NET Framework nicht unterstützt wird.
Wie soll sich das Ding denn verbreiten, wenn es nirgendwo automatisch integriert ist und man das Ding immer nachinstallieren muss????? *Arghhh!*

Naja, genug Frust abgelassen...

Auf jeden Fall melde ich mich nun mit einem PowerShell-Tutorial zurück.
Nach dem es in "PowerShell For Runaways - Part I" ( https://www.administrator.de/wissen/powershell-for-runaways-part-i-76114 ... ) vor allem um die Grundlagen ging, geht es hier um die praktische Anwendung der PowerShell anhand eines Beispielscripts.
Ich nenne es <ironie> wahnsinnig originell </ironie> Admincheck.ps1


Das unten gepostete Script macht folgendes:
  1. Eine Liste von Servern und Netzwerkkomponenten durchpingen
  2. Bei allen Harddisks aller Server, die in einer Liste angegeben sind, die Gesamtgrösse + den freien Speicherplatz auslesen und reklamieren, wenn auf einer Disk weniger als 1 GB frei ist.
  3. Das Eventlog aller in der Liste angegebenen Server überprüfen. Es werden von jedem Server alle heutigen Errors + Warnings vom System- und Applicationlog aufgelistet
  4. Ein Logfile mit den Ergebnissen der oberen Checks anlegen
  5. Das Logfile an eine Mailadresse schicken (bmail.exe vonnöten. Gibts bei Google.)

Zunächst brauchen wir 2 Textfiles. Das eine ist die Liste der Netzwerkkomponenten, das andere ist die Liste der zu überprüfenden Server.
Pro Zeile muss eine IP-Adresse oder ein Servername stehen, also z.B. so:
01.
server01
02.
server02
03.
server03
04.
server69
oder so:
01.
192.168.2.25
02.
10.10.12.11
03.
192.168.0.14
Also, hier kommt das Script (Ich hoffe, ich habe es ausreichend kommentiert. Falls nein, einfach nachfragen, ich beisse nicht ):
01.
#*********************************************************************************************** 
02.
# Admincheck.ps1
03.
# ==============
04.
# Führt folgende Checks auf den Servern und den Netzwerkkomponenten aus:
05.
# - Pingtest
06.
# - Freier Speicherplatz auf den Servern
07.
# - Eventloganalyse der Server
08.
# Ausserdem wird ein Logfile generiert und per Mail an die vorgegebene Adresse geschickt.
09.
# Autor: TuXHunT3R
10.
# Version 1.0
11.
#*********************************************************************************************** 
12.
 
13.
 
14.
# Variablen setzen
15.
$serverliste = get-content "serverliste.txt"
16.
$netzwerkkomponentenliste = get-content "netzkomponentenliste.txt"
17.
$datum = get-date -format d
18.
$zeit = get-date -format t
19.
$user = $env:Username
20.
$logfile = "AdmincheckLog_" + $datum + ".txt"
21.
$tmpfolder = "c:\temp"
22.
 
23.
# Temp-Ordner leeren, damit das Script nicht durch alte temporäre Dateien in Mitleidenschaft gezogen wird
24.
$tmpfolder2 = $tmpfolder + "\*.*"
25.
remove-item -path $tmpfolder2 -force
26.
 
27.
 
28.
# Logfile vorbereiten
29.
"###############################################################################" | out-file -filepath $logfile -encoding default -append
30.
"##***************************************************************************##" | out-file -filepath $logfile -encoding default -append
31.
"##******************************ADMINCHECK-LOG*******************************##" | out-file -filepath $logfile -encoding default -append
32.
"##***************************************************************************##" | out-file -filepath $logfile -encoding default -append
33.
"###############################################################################" | out-file -filepath $logfile -encoding default -append
34.
" " | out-file -filepath $logfile -encoding default -append
35.
"Started:" | out-file -filepath $logfile -encoding default -append
36.
$datum | out-file -filepath $logfile -encoding default -append
37.
$zeit | out-file -filepath $logfile -encoding default -append
38.
" " | out-file -filepath $logfile -encoding default -append
39.
"User:" | out-file -filepath $logfile -encoding default -append
40.
$user | out-file -filepath $logfile -encoding default -append
41.
"_________________________________________________________" | out-file -filepath $logfile -encoding default -append
42.
" " | out-file -filepath $logfile -encoding default -append
43.
" " | out-file -filepath $logfile -encoding default -append
44.
 
45.
 
46.
 
47.
"Pinging the important network-components:" | out-file -filepath $logfile -encoding default -append
48.
"=========================================" | out-file -FilePath $logfile -Encoding default -Append
49.
" " | out-file -filepath $logfile -encoding default -append
50.
# Server pingen
51.
foreach ($server in $serverliste){
52.
	ping $server -n 2 | out-null
53.
	$PingErgebnisServer = "$lastexitcode"
54.
	if ($PingErgebnisServer -eq "0") {
55.
		$tmp = "Pinging " + $server + " sucessfully"
56.
		$tmp | out-file -filepath $logfile -encoding default -append
57.
	} else {
58.
		$tmp = "Pinging " + $server + " failed!"
59.
		$tmp | out-file -filepath $logfile -encoding default -append
60.
	}
61.
}
62.
# Netzwerkkomponenten pingen
63.
foreach ($netzwerkkomponente in $netzwerkkomponentenliste) {
64.
	ping $netzwerkkomponente -n 2 | out-null
65.
	$PingErgebnisNWKomponente = "$lastexitcode"
66.
	if ($PingErgebnisNWKomponente -eq "0") {
67.
		$tmp = "Pinging " + $netzwerkkomponente + " sucessfully"
68.
		$tmp | out-file -filepath $logfile -encoding default -append
69.
	} else {
70.
		$tmp = "Pinging " + $netzwerkkomponente + " failed!"
71.
		$tmp | out-file -filepath $logfile -encoding default -append
72.
	}
73.
}
74.
 
75.
 
76.
" " | out-file -filepath $logfile -encoding default -append
77.
" " | out-file -filepath $logfile -encoding default -append
78.
"Checking the free diskspace on all servers:" | out-file -filepath $logfile -encoding default -append
79.
"===========================================" | out-file -FilePath $logfile -Encoding default -Append
80.
# Freier Speicherplatz der Serverdisken auslesen
81.
# Für jedes Typ3-Laufwerk (Festplatten oder Partitionen) auf dem Zielserver wird überprüft, ob mehr als 1 GB frei ist
82.
# Zunächst mal die Vergleichsgrösse in Variable speichern...
83.
[int]$GB = 1
84.
# Dann bei allen Servern (erste Foreach-Schleife) alle Harddisks (zweite foreach-Schleife) durchchecken...
85.
foreach ($server in $serverliste) {
86.
	" " | out-file -filepath $logfile -encoding default -append
87.
	$server | out-file -filepath $logfile -encoding default -append
88.
	foreach ($disk in get-wmiobject -class win32_Logicaldisk -filter "DriveType=3" -computername $server) {
89.
		# Freier Speicherplatz auslesen + in GB umrechnen
90.
		$freespaceB = $disk.freespace
91.
		$freespaceKB = $freespaceB / 1024
92.
		$freespaceMB = $freespaceKB / 1024
93.
		$freespaceGB = $freespaceMB / 1024
94.
		# Gesamtgrösse der Disk auslesen + in GB umrechnen
95.
		$DisksizeB = $disk.size
96.
		$DisksizeKB = $disksizeB / 1024
97.
		$DisksizeMB = $disksizeKB / 1024
98.
		$DisksizeGB = $disksizeMB / 1024
99.
		# Diskletter auslesen
100.
		$diskletter = $disk.deviceid
101.
		
102.
		# ...und vergleichen
103.
		if ($freespaceGB -gt $gb) {
104.
			$StringForTextfile = "Disk " + $diskletter + " " + $freespaceGB + " / " + $disksizeGB + " GB free ==> Enough free Diskspace!"
105.
			$StringForTextfile | out-file -filepath $logfile -encoding default -append
106.
		} else {
107.
			$StringForTextfile = "Disk " + $diskletter + " " + $freespaceGB + " / " + $disksizeGB + " GB free ==> Disk full, move data!"
108.
			$StringForTextfile | out-file -filepath $logfile -encoding default -append
109.
		}
110.
	}
111.
}
112.
 
113.
 
114.
# Eventlog-Analyse
115.
# Zuerst mal das Datum in das richtige Format bringen:
116.
$Datum = Get-Date -Format yyyyMMdd
117.
# Für jeden Server in der Serverliste das Eventlog mit folgenden Bedingungen abfragen:
118.
# Im System- und Applikationlog alle Errors und Warnings des heutigen Tages ausgeben.
119.
" " | out-file -filepath $logfile -encoding default -append
120.
" " | out-file -filepath $logfile -encoding default -append
121.
"Analysing the Eventlog of all Servers (Events from today):" | out-file -filepath $logfile -encoding default -Append
122.
"==========================================================" | out-file -filepath $logfile -encoding default -Append
123.
" " | out-file -filepath $logfile -encoding default -append
124.
foreach ($server in $serverliste) {
125.
	$server | out-file -filepath $logfile -encoding default -append
126.
	"--------" | out-file -filepath $logfile -encoding default -append
127.
	"Systemlog:" | out-file -filepath $logfile -encoding default -append
128.
	
129.
	#Warnungen
130.
	$tmplog= $tmpfolder + "\eventlogquery_admincheck_system_warnings_" + $server + ".txt"
131.
	get-wmiobject win32_ntlogevent -Filter "Logfile='System' and type='Warning'" -computer $server | select-object type, timewritten, eventcode, sourcename, message | format-table -auto | out-file -filepath $tmplog -encoding default
132.
	get-content $tmplog | foreach-object { if ($_.Contains($Datum)) { $_ | out-file -filepath $logfile -encoding default -append}}
133.
	#Errors
134.
	$tmplog= $tmpfolder + "\eventlogquery_admincheck_system_errors_" + $server + ".txt"
135.
	get-wmiobject win32_ntlogevent -Filter "Logfile='System' and type='Error'" -computer $server | select-object type, timewritten, eventcode, sourcename, message | format-table -auto | out-file -filepath $tmplog -encoding default
136.
	get-content $tmplog | foreach-object { if ($_.Contains($Datum)) { $_ | out-file -filepath $logfile -encoding default -append}}
137.
	" " | out-file -filepath $logfile -encoding default -append
138.
	
139.
	"Applicationlog:" | out-file -filepath $logfile -encoding default -append
140.
	
141.
	#Warnungen
142.
	$tmplog= $tmpfolder + "\eventlogquery_admincheck_application_warnings_" + $server + ".txt"
143.
	get-wmiobject win32_ntlogevent -Filter "Logfile='Application' and type='Warning'" -computer $server | select-object type, timewritten, eventcode, sourcename, message | format-table -auto | out-file -filepath $tmplog -encoding default
144.
	get-content $tmplog | foreach-object { if ($_.Contains($Datum)) { $_ | out-file -filepath $logfile -encoding default -append}}
145.
	#Errors
146.
	$tmplog= $tmpfolder + "\eventlogquery_admincheck_application_errors_" + $server + ".txt"
147.
	get-wmiobject win32_ntlogevent -Filter "Logfile='Application' and type='Error'" -computer $server | select-object type, timewritten, eventcode, sourcename, message | format-table -auto | out-file -filepath $tmplog -encoding default
148.
	get-content $tmplog | foreach-object { if ($_.Contains($Datum)) { $_ | out-file -filepath $logfile -encoding default -append}}
149.
	" " | out-file -filepath $logfile -encoding default -append
150.
	" " | out-file -filepath $logfile -encoding default -append
151.
}
152.
 
153.
 
154.
# Logfile per Mail schicken
155.
bmail.exe -s <SMTP-Server> -t <Ziel-Adresse> -f <Quelladresse, beliebig wählbar> -a "ADMINCHECK.PS1 Logfile" -m "$logfile"
156.
 

Für alle, die nicht so viel Ahnung von Scripting haben und das Script einfach nur verwenden wollen, ohne die Sprache zu lernen:

Die folgenden Zeilen müsst ihr anpassen:

01.
$serverliste = get-content "serverliste.txt"
In dieser Variable wird der Zielpfad zu der Liste mit den Server gespeichert. Wenn ihr die Zeile so lasst, müsst ihr die Serverliste einfach in den gleichen Ordner wie das Script speichern und die Liste "serverliste.txt" nennen.

01.
$netzwerkkomponentenliste = get-content "netzkomponentenliste.txt"
In dieser Variable wird der Zielpfad zu der Liste mit den Netzkomponenten gespeichert. Wenn ihr die Zeile so lasst, müsst ihr die Netzkomponentenliste einfach in den gleichen Ordner wie das Script speichern und die Liste "netzkomponentenliste.txt" nennen.

01.
$logfile = "AdmincheckLog_" + $datum + ".txt"
In dieser Variable wird der Zielpfad zum Logfile gespeichert. Wenn ihr die Zeile so lasst, werden die Logfiles einfach in den gleichen Ordner wie das Script gespeichert.

01.
$tmpfolder = "c:\temp"
In diese Variable wird der Ordner geschrieben, in dem die temporären Textdateien geparkt werden, welche vom Script generiert werden. Mein Wissen reicht leider noch nicht so weit, als das ich dieses Script ohne temporäre Textdateien zum Laufen bringen würde. Achtet also darauf, dass ihr auf dem hier angegebenen Ordner zumindest Schreibrechte habt. Ich werde später mal noch eine Variante ohne temporäre Dateien liefern, die dann auch schneller laufen wird.

01.
[int]$GB = 1
Hier wird angegeben, wie gross die kritische Grenze sein soll, bei der das Script motzt, dass es auf einer Festplatte zu wenig Speicherplatz hat. Da ich das Script hauptsächlich in meiner Privat-Domäne benutze und dort nicht gross wachsende Datenmengen habe, habe ich den Grenzwert hier auf 1 GB gesetzt. Bei grossen Netzen lohnt es sich eventuell, diesen Wert zu erhöhen.

01.
bmail.exe -s <SMTP-Server> -t <Ziel-Adresse> -f <Quelladresse, beliebig wählbar> -a "ADMINCHECK.PS1 Logfile" -m "$logfile"
Hier wird mit dem Tool bmail.exe das Logfile per Mail verschickt. Wenn ihr das Script so lasst, muss sich die bmail.exe im gleichen Pfad wie das Script oder in einem der Pfade der Environment-Variable %path% befinden.
Ansonsten müsst ihr folgendes anpassen:
  1. "<SMTP-Server>" durch euren Postausgangsserver ersetzen (seht zu, dass die Rules so definiert sind, dass diese Mails durchgehen)
  2. "<Ziel-Adresse>" durch eine existierende Mailadresse ersetzen
  3. "<Quelladresse, beliebig wählbar>" durch eine beliebige, nicht unbedingt existierende Mailadresse ersetzen.


So, das wäre es bereits gewesen. Fragt nach, wenn etwas unklar ist.

Grüsse aus der Schweiz

TuXHunT3R

PS: Wenn das Script läuft, liefert es keinerlei Bildschirmausgaben. Es ist eigentlich dazu gedacht, dass es einmal pro Nacht ausgeführt wird und der Admin am Morgen das Mail mit dem Logfile kontrollieren kann.

Edit:

PPS: Ja ich weiss, man kann Mails per Script auch ohne Bmail.exe verschicken. Ich habe noch keine Zeit gehabt, eine Lösung ohne bmail.exe zu realisieren. Ich werde das früher oder später mal noch ergänzen.
Mitglied: TuXHunt3R
21.05.2008 um 23:18 Uhr
So........

Ich hab ein wenig Zeit gefunden, das Script etwas zu verbessern. Dies ist also die Version 1.1 des Scripts. Folgende Sachen wurden verbessert:
- Die temporären Dateien werden nun auch am Ende des Scripts gelöscht.
- Die bmail.exe wird nicht mehr benötigt, das Mail mit dem Logfile als Inhalt wird nun mit PowerShell-Bordmitteln verschickt.
Die einzelnen Angaben wie SMTP-Server, Zieladresse, Quelladresse, etc müssen aber weiterhin von jedem Scriptnutzer individuell angepasst werden.

01.
#*********************************************************************************************** 
02.
# Admincheck.ps1
03.
# ==============
04.
# Führt folgende Checks auf den Servern und den Netzwerkkomponenten aus:
05.
# - Pingtest
06.
# - Freier Speicherplatz auf den Servern
07.
# - Eventloganalyse der Server
08.
# Ausserdem wird ein Logfile generiert und per Mail an die vorgegebene Adresse geschickt.
09.
# Autor: TuXHunT3R
10.
# Version: 1.1
11.
#*********************************************************************************************** 
12.
 
13.
 
14.
# Variablen setzen
15.
$serverliste = get-content "serverliste.txt"
16.
$netzwerkkomponentenliste = get-content "netzkomponentenliste.txt"
17.
$datum = get-date -format d
18.
$zeit = get-date -format t
19.
$user = $env:Username
20.
$logfile = "AdmincheckLog_" + $datum + ".txt"
21.
$tmpfolder = "c:\temp"
22.
 
23.
 
24.
 
25.
# Logfile vorbereiten
26.
"###############################################################################" | out-file -filepath $logfile -encoding default -append
27.
"##***************************************************************************##" | out-file -filepath $logfile -encoding default -append
28.
"##******************************ADMINCHECK-LOG*******************************##" | out-file -filepath $logfile -encoding default -append
29.
"##***************************************************************************##" | out-file -filepath $logfile -encoding default -append
30.
"###############################################################################" | out-file -filepath $logfile -encoding default -append
31.
" " | out-file -filepath $logfile -encoding default -append
32.
"Started:" | out-file -filepath $logfile -encoding default -append
33.
$datum | out-file -filepath $logfile -encoding default -append
34.
$zeit | out-file -filepath $logfile -encoding default -append
35.
" " | out-file -filepath $logfile -encoding default -append
36.
"User:" | out-file -filepath $logfile -encoding default -append
37.
$user | out-file -filepath $logfile -encoding default -append
38.
"_________________________________________________________" | out-file -filepath $logfile -encoding default -append
39.
" " | out-file -filepath $logfile -encoding default -append
40.
" " | out-file -filepath $logfile -encoding default -append
41.
 
42.
 
43.
 
44.
"Pinging the important network-components:" | out-file -filepath $logfile -encoding default -append
45.
"=========================================" | out-file -FilePath $logfile -Encoding default -Append
46.
" " | out-file -filepath $logfile -encoding default -append
47.
# Server pingen
48.
foreach ($server in $serverliste){
49.
	ping $server -n 2 | out-null
50.
	$PingErgebnisServer = "$lastexitcode"
51.
	if ($PingErgebnisServer -eq "0") {
52.
		$tmp = "Pinging " + $server + " sucessfully"
53.
		$tmp | out-file -filepath $logfile -encoding default -append
54.
	} else {
55.
		$tmp = "Pinging " + $server + " failed!"
56.
		$tmp | out-file -filepath $logfile -encoding default -append
57.
	}
58.
}
59.
# Netzwerkkomponenten pingen
60.
foreach ($netzwerkkomponente in $netzwerkkomponentenliste) {
61.
	ping $netzwerkkomponente -n 2 | out-null
62.
	$PingErgebnisNWKomponente = "$lastexitcode"
63.
	if ($PingErgebnisNWKomponente -eq "0") {
64.
		$tmp = "Pinging " + $netzwerkkomponente + " sucessfully"
65.
		$tmp | out-file -filepath $logfile -encoding default -append
66.
	} else {
67.
		$tmp = "Pinging " + $netzwerkkomponente + " failed!"
68.
		$tmp | out-file -filepath $logfile -encoding default -append
69.
	}
70.
}
71.
 
72.
 
73.
" " | out-file -filepath $logfile -encoding default -append
74.
" " | out-file -filepath $logfile -encoding default -append
75.
"Checking the free diskspace on all servers:" | out-file -filepath $logfile -encoding default -append
76.
"===========================================" | out-file -FilePath $logfile -Encoding default -Append
77.
# Freier Speicherplatz der Serverdisken auslesen
78.
# Für jedes Typ3-Laufwerk (Festplatten oder Partitionen) auf dem Zielserver wird überprüft, ob mehr als 1 GB frei ist
79.
# Zunächst mal die Vergleichsgrösse in Variable speichern...
80.
[int]$GB = 1
81.
# Dann bei allen Servern (erste Foreach-Schleife) alle Harddisks (zweite foreach-Schleife) durchchecken...
82.
foreach ($server in $serverliste) {
83.
	" " | out-file -filepath $logfile -encoding default -append
84.
	$server | out-file -filepath $logfile -encoding default -append
85.
	foreach ($disk in get-wmiobject -class win32_Logicaldisk -filter "DriveType=3" -computername $server) {
86.
		# Freier Speicherplatz auslesen + in GB umrechnen
87.
		$freespaceB = $disk.freespace
88.
		$freespaceKB = $freespaceB / 1024
89.
		$freespaceMB = $freespaceKB / 1024
90.
		$freespaceGB = $freespaceMB / 1024
91.
		# Gesamtgrösse der Disk auslesen + in GB umrechnen
92.
		$DisksizeB = $disk.size
93.
		$DisksizeKB = $disksizeB / 1024
94.
		$DisksizeMB = $disksizeKB / 1024
95.
		$DisksizeGB = $disksizeMB / 1024
96.
		# Diskletter auslesen
97.
		$diskletter = $disk.deviceid
98.
		
99.
		# ...und vergleichen
100.
		if ($freespaceGB -gt $gb) {
101.
			$StringForTextfile = "Disk " + $diskletter + " " + $freespaceGB + " / " + $disksizeGB + " GB free ==> Enough free Diskspace!"
102.
			$StringForTextfile | out-file -filepath $logfile -encoding default -append
103.
		} else {
104.
			$StringForTextfile = "Disk " + $diskletter + " " + $freespaceGB + " / " + $disksizeGB + " GB free ==> Disk full, move data!"
105.
			$StringForTextfile | out-file -filepath $logfile -encoding default -append
106.
		}
107.
	}
108.
}
109.
 
110.
 
111.
# Eventlog-Analyse
112.
# Zuerst mal das Datum in das richtige Format bringen:
113.
$Datum = Get-Date -Format yyyyMMdd
114.
# Für jeden Server in der Serverliste das Eventlog mit folgenden Bedingungen abfragen:
115.
# Im System- und Applikationlog alle Errors und Warnings des heutigen Tages ausgeben.
116.
" " | out-file -filepath $logfile -encoding default -append
117.
" " | out-file -filepath $logfile -encoding default -append
118.
"Analysing the Eventlog of all Servers (Events from today):" | out-file -filepath $logfile -encoding default -Append
119.
"==========================================================" | out-file -filepath $logfile -encoding default -Append
120.
" " | out-file -filepath $logfile -encoding default -append
121.
foreach ($server in $serverliste) {
122.
	$server | out-file -filepath $logfile -encoding default -append
123.
	"--------" | out-file -filepath $logfile -encoding default -append
124.
	"Systemlog:" | out-file -filepath $logfile -encoding default -append
125.
	
126.
	#Warnungen
127.
	$tmplog= $tmpfolder + "\eventlogquery_admincheck_system_warnings_" + $server + ".txt"
128.
	get-wmiobject win32_ntlogevent -Filter "Logfile='System' and type='Warning'" -computer $server | select-object type, timewritten, eventcode, sourcename, message | format-table -auto | out-file -filepath $tmplog -encoding default
129.
	get-content $tmplog | foreach-object { if ($_.Contains($Datum)) { $_ | out-file -filepath $logfile -encoding default -append}}
130.
	#Errors
131.
	$tmplog= $tmpfolder + "\eventlogquery_admincheck_system_errors_" + $server + ".txt"
132.
	get-wmiobject win32_ntlogevent -Filter "Logfile='System' and type='Error'" -computer $server | select-object type, timewritten, eventcode, sourcename, message | format-table -auto | out-file -filepath $tmplog -encoding default
133.
	get-content $tmplog | foreach-object { if ($_.Contains($Datum)) { $_ | out-file -filepath $logfile -encoding default -append}}
134.
	" " | out-file -filepath $logfile -encoding default -append
135.
	
136.
	"Applicationlog:" | out-file -filepath $logfile -encoding default -append
137.
	
138.
	#Warnungen
139.
	$tmplog= $tmpfolder + "\eventlogquery_admincheck_application_warnings_" + $server + ".txt"
140.
	get-wmiobject win32_ntlogevent -Filter "Logfile='Application' and type='Warning'" -computer $server | select-object type, timewritten, eventcode, sourcename, message | format-table -auto | out-file -filepath $tmplog -encoding default
141.
	get-content $tmplog | foreach-object { if ($_.Contains($Datum)) { $_ | out-file -filepath $logfile -encoding default -append}}
142.
	#Errors
143.
	$tmplog= $tmpfolder + "\eventlogquery_admincheck_application_errors_" + $server + ".txt"
144.
	get-wmiobject win32_ntlogevent -Filter "Logfile='Application' and type='Error'" -computer $server | select-object type, timewritten, eventcode, sourcename, message | format-table -auto | out-file -filepath $tmplog -encoding default
145.
	get-content $tmplog | foreach-object { if ($_.Contains($Datum)) { $_ | out-file -filepath $logfile -encoding default -append}}
146.
	" " | out-file -filepath $logfile -encoding default -append
147.
	" " | out-file -filepath $logfile -encoding default -append
148.
}
149.
 
150.
 
151.
# Temporäre Dateien aufräumen
152.
$tmpfolder2 = $tmpfolder + "\*.*"
153.
remove-item -path $tmpfolder2 -force
154.
 
155.
 
156.
# Logfile per Mail schicken
157.
$SmtpServer = "<SMTP-Server>"
158.
$SmtpClient = new-object system.net.mail.smtpClient
159.
$SmtpClient.host = $SmtpServer
160.
 
161.
$Nachricht = new-object system.net.mail.MailMessage
162.
$Nachricht.From = ("<Quelladresse, beliebig wählbar>")
163.
$Nachricht.To.Add("<Ziel-Adresse>")
164.
$Nachricht.Subject = ("ADMINCHECK.PS1 Logfile")
165.
$Nachricht.Body = get-content $logfile | out-string
166.
 
167.
$SmtpClient.Send($Nachricht)
168.
 
Viel Spass damit.

Grüsse aus der schönen Schweiz
TuXHunT3R
Bitte warten ..
Mitglied: Biber
21.05.2008 um 23:52 Uhr
Moin TuXhunter,

danke für Deine Ergänzungen.
Auch wenn ich noch weit davon entfernt bin, Tipps zum Thema PowerShell zu geben - eins kommt mir nicht stimmig vor.

Du räumst hinterher die tmp-Trümmer weg. Gut und löblich.

Aber sollte es dann nicht an den zwei Stellen
(BTW. an zwei Stellen den gleichen CleanUp-Schnipsel aufzurufen könnte man/frau auch über den Aufruf eines codeblocks machen, oder?)
... ähh... sorry, also an den zwei Stellen:
01.
....
02.
$tmpfolder2 = $tmpfolder + "\*.*"
03.
remove-item -path $tmpfolder2 -force
.... nicht eher so heißen:
01.
$tmpfolder2 = $tmpfolder + "\eventlogquery_admincheck_application*.*"
02.
remove-item -path $tmpfolder2 -force
....denn nur das sind doch die Dateien, die Du erzeugt hast?

Oder übersehe ich etwas?

Grüße
Biber
Bitte warten ..
Mitglied: TuXHunt3R
22.05.2008 um 08:56 Uhr
Du hast recht, habe ich übersehen.

Hab es in der zweiten Fassung entfernt.
Bitte warten ..
Mitglied: AndreasA
24.09.2008 um 12:23 Uhr
Moin TuXHunT3R

Erst einmal vielen herzlichen Dank für deine ausführliche Anleitung. Für mich als Newbie
in Sachen Powershell eine hilfreiche Lektüre

So hab ich mich denn auch gleich rangesetzt um ein bischen zu probieren.....
Dabei bin ich auch schon auf Unstimmigkeiten bzw Probleme gestoßen.

Dein Skript läßt sich nur auf anderen Computern in der $serverliste ausführen, wenn
der ausführende Skript-Benutzer(Admin)
$user = $env:Username
auch auf den Remotecomputer die entsprechenden Admin-Rechte besitzt (Stichwort gleiche Domäne bzw Vertrauensstellungen)

Ich habe das mal ein bischen modifiziert, um es auch in einer anderen Domäne zu testen...
Im Deklarationsteil frage ich eine Objektvariable $remoteuser ab mit Hilfe des Cmdlets get-credential
$remoteuser = get-credential
und in den Abfragen weiter unten (z.B. Zeile 85) wird mit Parameter -credential $remoteuser erweitert.
foreach ($disk in get-wmiobject -class win32_Logicaldisk -filter "DriveType=3" -computername $server -credential $remoteuser) {
Das funktioniert sogar recht gut. D.h. der ausführende Skript-User ist ein anderer als der "Remote-Abfrage-User" Nur ein Haken hat diese Sache nun: Es funktioniert nur mit manuellem Starten des Skriptes !!!
Also das leidige Problem wie schon in Batch oder VB bei Remotejobs irgendwo die Usercredentials im Klartext hinterlegen zu müssen bzw auf Tools wie z.B. runasspc ausweichen zu müssen. Ich hatte gehofft mit der WPS kann man das elegant umgehen .
Falls du eine Möglichkeit kennst, diese Abfrage
$remoteuser = get-credential
irgendwie automatisierbar zu machen per Skript mit Einlesen aus Objektdatei oder ähnlichem, wäre ich sehr erfreut.
Denn get-credential erfordert IMMER zwingend eine manuelle Kennworteingabe !!

Das führt mich dann gleich zur nächsten Frage: Bei netzübergreifenden Abfragen sind in der Regel Firewalls ein ziemlicher Hinderungsgrund zum Ausführen der "Remotejobs". Gibt es irgendwo eine Doku, welche Ports die WPS benötigt, um je nach Provider diese Befehle auch ausführen zu können ??

Soviel ersteinmal zum Hauptproblem für mich.


Nun noch einige Anmerkung zu deiner Eventlog-Auswertung....
Du schreibst
# Eventlog-Analyse
  1. Zuerst mal das Datum in das richtige Format bringen:
$Datum = Get-Date -Format yyyyMMdd
... hmm?? Erklär mir mal bitte warum so? Bei mir waren leider nicht alle erwarteten Einträge im Logfile aufgelistet.
Ein
$Datum = Get-Date -uFormat x
brachte bei mir wesentlich mehr Einträge zum Vorschein (oops was is nun richtig?)

Bei der Auswahl der Ereignistypen muss man auch sehr aufpassen, um welche OS-Language es sich handelt!
Bei deutschem Server 2003 musst du z.B. in Zeile 128 bzw 140 type='Warning' durch type='Warnung' ersetzen.
Sonst ist dein Logfile jungfräulich leer und du freust dich vergeblich über weniger "Arbeit"
Gleiches gilt für Eventtyp Error (durch Fehler ersetzen)
Meine Zeile 128 sieht also eher so aus
get-wmiobject win32_ntlogevent -Filter "Logfile='System' and type='Warnung'" -computer $server -credential $remoteuser | select-object type, timewritten, eventcode, sourcename, message | format-table -auto | out-file -filepath $tmplog -encoding default

So mehr kann ich zum Thema WindowsPowerShell noch nicht beitragen, is noch zu neu für mich.


Viel Spass damit.

Grüsse aus der schönen Schweiz
TuXHunT3R

Den hatte ich schon, wenn auch nich immer im "positiven" Sinne
So long AndreasA
Bitte warten ..
Mitglied: mrindia
24.09.2008 um 14:22 Uhr
Hallo Jungs,

wie kann ich den mit powershell die EventLogs löschen?

z.B. will ich die Event system und Applikation von einem oder mehreren Servern auf einem schlag löschen....

wäre sehr Dankbar !!!
Bitte warten ..
Mitglied: TuXHunt3R
25.09.2008 um 15:11 Uhr
Hallo Andreas

Werde es anschauen. Allerdings erst in einer Woche oder so, vorher komme ich nicht dazu.
Bitte warten ..
Mitglied: SirMax
01.10.2008 um 13:05 Uhr
Hallo TuXHunT3R,

erstmals vielen Dank für das Script. Gerade so mit den ersten Versuchen in der PS ist das wirklich sehr hilfreich.

Wenn es Deine Zeit erlaubt, dann hätte ich folgende Frage:

in Zeile 132 (des überarbeiteten Scripts) wird ja das Logfile des Remoteservers eingelesen:

get-wmiobject win32_ntlogevent -Filter "Logfile='System' and type='Error'" -computer $server | select-object type, timewritten, eventcode, sourcename, message | format-table -auto | out-file -filepath $tmplog -encoding default

Dabei wird ja das ganze Log ausgelesen und erst später auf die Dauer eines Tages gekürzt.
Nachdem meine Anforderung die Abfrage unserer DCs betrifft (in denen die LOGS relativ groß sind), ist mein Ziel
möglichst den Remoteserver das Log filtern zu lassen und nur die gewünschten Ergebnisse zurück zu geben.

Über die Filterfunktion kann ich nach Eventcodes abfragen. Allerdings gelingt es mir nicht die Suchanfrage so einzuschränken,
dass nur beispielsweise die Fehlermeldungen des letzten Tages zurück gegeben werden. Das wäre im Vergleich zur bisherigen Abfrage
eine starke Entlastung der Standleitungen. Gibt es hierfür evtl. einen einfachen Kniff wie das Ganze umgebaut werden kann?

Der Eintrag müsste ja im Bereich '-Filter "Logfile='System' and type='Error' and 'ZeigeNurDieErsten10ErgbnisseAn'" erfolgen, oder?

Viele Grüße aus dem südbayrischen Raum.

Maximilian
Bitte warten ..
Mitglied: bluecon
07.04.2009 um 08:52 Uhr
Wirds hierzu noch etwas geben?

Gruß,
Adrian
Bitte warten ..
Mitglied: TuXHunt3R
07.04.2009 um 23:25 Uhr
Hallo Andreas

Danke schon mal für deinen Beitrag.


Also das leidige Problem wie schon in Batch oder VB bei Remotejobs irgendwo die Usercredentials im Klartext hinterlegen zu müssen bzw auf Tools wie z.B. runasspc ausweichen zu müssen

Da habe ich dir auch keine bessere Lösung als RunasSpc. Eventuell könnte ich man mit VB ein Exe basteln, welches in das in einer Datenbank hinterlegte Passwort für ein bestimmtes Script herausliest und dieses dann mittels runas.exe und dem entsprechenden Passwort ankickt. RunAsSPC ist hier allerdings bestimmt die bessere Lösung.
Ich habe bis jetzt allerdings nur in Umgebungen gearbeitet, welche mit einer Domäne auskommen (und ich arbeite bei einem Grosskonzern).

Bei mir waren leider nicht alle erwarteten Einträge im Logfile aufgelistet.

Hier muss ich nochmals über die Bücher. Ich werde es testen....

Bei der Auswahl der Ereignistypen muss man auch sehr aufpassen, um welche OS-Language es sich handelt!
Bei deutschem Server 2003 musst du z.B. in Zeile 128 bzw 140 type='Warning' durch type='Warnung' ersetzen.
Sonst ist dein Logfile jungfräulich leer und du freust dich vergeblich über weniger "Arbeit"
Gleiches gilt für Eventtyp Error (durch Fehler ersetzen)

Danke für die Warnung. So eine Situation hatte ich ebenfalls noch nie. Hab gedacht, dass Firmen ihre Server sowieso grundsätzlich englisch aufsetzen. Bei uns ist es zumindest so, genauso wie in meiner Domäne zu Hause...
Bitte warten ..
Mitglied: aGeers
01.10.2009 um 13:01 Uhr
Hallo,

Wie kann ich das Script umschreiben, das er bei weniger als 20% freien Speicherplatz, statt bei einer festen GB Größe eine Fehlermeldung ausgibt?

Ich bin leider was Powershell angeblangt ein Blutiger Anfänger....

Ageers
Bitte warten ..
Mitglied: TuXHunt3R
01.10.2009 um 22:09 Uhr
Hallo aGeers

Ich schaus mir morgen oder am Samstag mal an.
Der Ansatz wäre, dass man anhand der Gesamtgrösse und dem freien Speicherplatz die Prozentzahl ausrechnet und dann überprüft, ob diese Prozentzahl < 20 ist.

Aber wie gesagt, ich schaus mir morgen mal an.
Bitte warten ..
Mitglied: TuXHunt3R
04.10.2009 um 19:57 Uhr
So, ich habe den Bereich für die Ausrechnung der Festplattenauslastung überarbeitet. Dieser sieht nun so aus:
01.
"Checking the free diskspace on the servers:" | out-file -filepath $logfile -encoding default -append
02.
"===========================================" | out-file -FilePath $logfile -Encoding default -Append
03.
# Freier Speicherplatz der Serverdisken auslesen
04.
# Für jedes Typ3-Laufwerk (Festplatten oder Partitionen) auf dem Zielserver wird überprüft, ob mehr als 20 % frei ist
05.
 
06.
# Dann bei allen Servern (erste Foreach-Schleife) alle Harddisks (zweite foreach-Schleife) durchchecken...
07.
foreach ($server in $serverliste) {
08.
	" " | out-file -filepath $logfile -encoding default -append
09.
	$server | out-file -filepath $logfile -encoding default -append
10.
	foreach ($disk in get-wmiobject -class win32_Logicaldisk -filter "DriveType=3" -computername $server) {
11.
		# Freier Speicherplatz auslesen + in GB umrechnen
12.
		$freespaceB = $disk.freespace
13.
		$freespaceKB = $freespaceB / 1024
14.
		$freespaceMB = $freespaceKB / 1024
15.
		$freespaceGB = [math]::round($freespaceMB / 1024, 2)
16.
		# Gesamtgrösse der Disk auslesen + in GB umrechnen
17.
		$DisksizeB = $disk.size
18.
		$DisksizeKB = $disksizeB / 1024
19.
		$DisksizeMB = $disksizeKB / 1024
20.
		$DisksizeGB = [math]::round($disksizeMB / 1024, 2)
21.
		# Diskletter auslesen
22.
		$diskletter = $disk.deviceid
23.
		
24.
        # % des freien Speicherplatzes ausrechnen 
25.
        $PercentFree = [math]::round(((100/$DisksizeGB) * $freespaceGB), 2)
26.
                
27.
		# ...und vergleichen
28.
		if ($PercentFree -gt 20) {
29.
			$StringForTextfile = "Disk " + $diskletter + " " + $freespaceGB + " / " + $disksizeGB + " GB (" + $PercentFree + " %) free ==> Enough free Diskspace!"
30.
			$StringForTextfile | out-file -filepath $logfile -encoding default -append
31.
		} else {
32.
			$StringForTextfile = "Disk " + $diskletter + " " + $freespaceGB + " / " + $disksizeGB + " GB (" + $PercentFree + " %) free ==> Disk full, move data!"
33.
			$StringForTextfile | out-file -filepath $logfile -encoding default -append
34.
		}
35.
	}
36.
}
37.
 
Zusätzlich zu der Sache mit den 20% werden nun die Werte zwecks besserer Lesbarkeit auf 2 Stellen gerundet. Ist das i.O. für dich?
Bitte warten ..
Mitglied: aGeers
05.10.2009 um 12:51 Uhr
Hallo Tux,

TOP !!

Danke!

Weiß jemand wie das Log für den Datei Replikations dienst heißt. File replication Service, NTFRS usw. funktioniert nicht
Bitte warten ..
Mitglied: aGeers
06.10.2009 um 13:58 Uhr
Hallo,

habe noch ein wenig daran rumgespielt:

Das logging des ping bereichs habe ich in zwei bereiche getrennt: (und eingedeutscht)

01.
 
02.
"Anpingen der Server:" | out-file -filepath $logfile -encoding default -append
03.
"====================" | Out-File -FilePath $logfile -Encoding default -Append
04.
" " | out-file -filepath $logfile -encoding default -append
05.
# Server pingen
06.
foreach ($server in $serverliste){
07.
	ping $server -n 2 | Out-Null
08.
	$PingErgebnisServer = "$lastexitcode"
09.
	if ($PingErgebnisServer -eq "0") {
10.
		$tmp = "Pinging " + $server + " 	erfolgreich"
11.
		$tmp | out-file -filepath $logfile -encoding default -append
12.
	} else {
13.
		$tmp = "Pinging " + $server + " 	nicht erfolgreich, ueberprüfen!"
14.
		$tmp | out-file -filepath $logfile -encoding default -append
15.
	}
16.
}
17.
 
18.
 
19.
" " | out-file -filepath $logfile -encoding default -append
20.
" " | out-file -filepath $logfile -encoding default -append
21.
"Anpingen der Lan-Komponenten:" | out-file -filepath $logfile -encoding default -append
22.
"=============================" | Out-File -FilePath $logfile -Encoding default -Append
23.
" " | out-file -filepath $logfile -encoding default -append
24.
# Netzwerkkomponenten pingen
25.
foreach ($netzwerkkomponente in $netzwerkkomponentenliste) {
26.
	ping $netzwerkkomponente -n 2 | Out-Null
27.
	$PingErgebnisNWKomponente = "$lastexitcode"
28.
	if ($PingErgebnisNWKomponente -eq "0") {
29.
		$tmp = "Pinging " + $netzwerkkomponente + " 	erfolgreich"
30.
		$tmp | out-file -filepath $logfile -encoding default -append
31.
	} else {
32.
		$tmp = "Pinging " + $netzwerkkomponente + " 	nicht erfolgreich, ueberprüfen!"
33.
		$tmp | out-file -filepath $logfile -encoding default -append
34.
	}
35.
}
Zusätzlich habe ich noch DCDIAG /e eingefügt:
Ist noch ausbaufähig indem man den dcdiag Test in die einzelnen Tests zwecks Übersichtlichkeit aufsplittet.

01.
 
02.
" " | out-file -filepath $logfile -encoding default -append
03.
" " | Out-File -filepath $logfile -encoding default -append
04.
"DCDIAG TESTS (fuer alle standorte)" | Out-File -filepath $logfile -encoding default -Append
05.
"==================================" | Out-File -filepath $logfile -encoding default -Append
06.
" " | out-file -filepath $logfile -encoding default -append
07.
" " | Out-File -filepath $logfile -encoding default -append
08.
 
09.
 
10.
	$tmplog= $tmpfolder + "\DCDIAG1.txt"
11.
	cmd.exe /c dcdiag.exe /e /F:$tmplog
12.
	Get-Content $tmplog | Out-File -filepath $logfile -encoding default -append
Bitte warten ..
Mitglied: aGeers
13.10.2009 um 16:30 Uhr
Hallo,

habe das Script geändert, so dass die Logdatei nicht mehr als Text in der Email verschickt wird, sondern als Anhang.
Hatte das Problem das der Mail Server (Lotus Notes 8) ab ~42289 Bytes die Email nicht mehr öffnen konnte.
Jetzt scheint es zu funktionieren:

AM Anfang des Scripts sollten folgende Variablen gesetzt werden:
$SmtpServer = "Name oder IP-Adresse des Mail Servers"
$Empfaenger = "Empaenger Adresse"
$Absender = "Absender Adresse"

01.
function sendmail($body)
02.
{
03.
$SmtpClient = new-object system.net.mail.smtpClient
04.
$MailMessage = New-Object system.net.mail.mailmessage
05.
$att = new-object Net.Mail.Attachment($logfile)
06.
$SmtpClient.Host = "$SmtpServer"
07.
$mailmessage.from = "$Absender"
08.
$mailmessage.To.add("$Empfaenger")
09.
$mailmessage.Subject = “$datum automatischer Servertest Logfile”
10.
$MailMessage.IsBodyHtml = $true
11.
$mailmessage.Body = $body
12.
$mailmessage.Attachments.Add($att)
13.
$smtpclient.Send($mailmessage)
14.
}
15.
 
16.
sendmail $body
Bitte warten ..
Ähnliche Inhalte
Humor (lol)

(Part num your Hacked phone. +XX XXXXXX5200)

Erfahrungsbericht von HenereHumor (lol)22 Kommentare

Mein Handy hat aber ne ganz andere Endnummer. Muss ich mir jetzt Sorgen machen ? :-) Vielleicht betrifft es ...

Windows Netzwerk

Securing Privileged Access for the AD Admin - Part 1

Information von 133883Windows Netzwerk1 Kommentar

Sollte jeder AD Admin in seinem Repertoire haben. Separate Admin-Accounts für exakt definierte Aufgaben und Administrations-Bereiche. Folgende Artikelserie nimmt ...

Batch & Shell

Powershell elevated

Tipp von AnkhMorporkBatch & Shell2 Kommentare

Ein kleiner Tipp am Rande für alle PS-Novizen (ich wars einfach leid): Um eine Konsole mit elevated rights schnell ...

Batch & Shell

Powershell: Googlemail (GMail) nativ mit Powershell verwalten

Anleitung von colinardoBatch & Shell2 Kommentare

1. Vorwort Google bietet über die GMail-API die Voraussetzungen um sein Google-Mail-Konto über diverse Programmierschnittstellen (PHP/Javascript/etc. pp) zu verwalten. ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Trend Micro Worry Free Business Security 10.0 - erneutes Patch (1494) erschienen!

Tipp von VGem-e vor 1 StundeErkennung und -Abwehr

Moin, unter ist ein neuer Patch verfügbar, der offenbar auch Windows 10.1809 unterstützt. Tja, wie letztes Mal auch, erst ...

Humor (lol)
Administrator.de Perlen
Tipp von DerWindowsFreak2 vor 4 TagenHumor (lol)6 Kommentare

Hallo, Heute beim stöbern auf dieser Seite bin auf folgenden Thread aus dem Jahre 2006 gestossen: Was meint ihr? ...

Erkennung und -Abwehr
OpenSSH-Backdoor Malware erkennen
Tipp von Frank vor 5 TagenErkennung und -Abwehr

Sicherheitsforscher von Eset haben 21 Malware-Familien untersucht. Die Malware soll Hintertüren via OpenSSH bereitstellen, so dass Angreifer Fernzugriff auf ...

iOS
WatchChat für Whatsapp
Tipp von Criemo vor 8 TageniOS5 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

Heiß diskutierte Inhalte
Samba
Windows 10 Client in Samba-Domäne hinzufügen scheitert
Frage von diwaffmSamba32 Kommentare

Hi Leute, ich habe einen Samba Server in der Version 4.9.3 auf einer OpenSuse Maschine laufen. Damit sind momentan ...

Windows Systemdateien
Verknüpfungen nach Pfadwechsel
Frage von Hendrik2586Windows Systemdateien17 Kommentare

Guten Morgen meine lieben Kollegen und Kolleginnen, ich hab da mal eine Frage die Ihr sicher schon kennt. Es ...

Netzwerkmanagement
Sehr langsame Netzverbindung in einem bestimmten Subnet
gelöst Frage von gabeBUNetzwerkmanagement16 Kommentare

Hallo Zusammen Ich habe das folgende Problem: Unser Netzwerk, dass aus verschiedenen Subnetzwerken aufgebaut ist, ist nicht in jedem ...

Exchange Server
Exchange Server 2016 - Autodiscover mehrere Domänen
gelöst Frage von K-ist-KExchange Server15 Kommentare

Hallo, folgende Dinge sind wichtig notwendig, damit Autodiscover funktioniert: - Namensauflösung (zB autodiscover.google.at) - gültiges Zertifikat - .XML Datei ...