Administrator Startseite

Apple

iOS, iTunes, Mac OS X

Entwicklung

Assembler, BASIC, Batch & Shell, Bibliotheken & Toolkits, CSS, C und C++, Datenbanken, HTML, IDE & Editoren, Installation, Java, JavaScript, KiXtart, Lizenzierung, Pascal & Delphi, Perl, PHP, Python, VB for Applications, Visual Studio, Webentwicklung, XML

Hardware

Benchmarks, Cluster, CPU, RAM, Mainboards, Drucker und Scanner, Festplatten, Raid, Grafikkarten & Monitore, LAN, WAN, Wireless, Multimedia & Zubehör, Notebook & Zubehör, Router & Routing, SAN, NAS, DAS, Server-Hardware, Sonstige Peripheriegeräte, Speicherkarten, Switche und Hubs

Internet

Blogs, CMS, Domain Registrierung, E-Books, E-Business, E-Mail, Flatrates, Hosting & Housing, Informationsdienste, Instant Messaging, Onlinedienste, SEO, Server, Soziale Netzwerke, Utilities, Webbrowser

Linux

Apache Server, Debian, Desktop, Netzwerk, OpenOffice, LibreOffice, RedHat, CentOS, Fedora, Samba, Suse, Tools & Utilities, Ubuntu, Userverwaltung

Microsoft

Exchange Server, Hyper-V, Installationsprobleme, Netzwerk, Office, Outlook & Mail, Systemdateien, Tools & Utilities, Userverwaltung, Visual Studio, Windows 7, Windows 8, Windows 10, Windows Phone, Windows Server, Windows Vista, Windows XP

Multimedia

Audio, Digitiales Fernsehen, Grafik, Icons, Schriftarten, Video

Netzwerke

Cluster, DNS, DSL, VDSL, Groupware, Grundlagen, ISDN & Analoganschlüsse, LAN, WAN, Wireless, Monitoring, Netzwerkmanagement, Netzwerkprotokolle, Router & Routing, TK-Netze & Geräte, UMTS, EDGE & GPRS, Voice over IP

Off Topic

Administrator.de Feedback, Humor (lol), Papierkorb

Sicherheit

Backup, Erkennung und -Abwehr, Firewall, Grundlagen, Informationsdienste, Rechtliche Fragen, Sicherheits-Tools, Tipps & Tricks, Verschlüsselung & Zertifikate, Viren und Trojaner

Sonstige Systeme

Google Android, MikroTik RouterOS, Novell Netware, Sun Solaris

Virtualisierung

Hyper-V, KVM, Vmware, Xenserver

Weiterbildung

Aus- und Weiterbildung, Ausland, Schulung & Training, Studentenjobs & Praktikum

Zusammenarbeit

Suche Projektpartner
Weniger Werbung?
Cover IT-Administrator
Zum Jahresende dreht sich im IT-Administrator Magazin alles rund um das Thema Client- und Applikations-Virtualisierung. So lesen Sie in der Dezember-Ausgabe, welche Neuerungen in VMware Horizon 6 warten und was XenClient Enterprise 5.1.3 zu bieten hat. Außerdem zeigt Ihnen die Redaktion, wie Sie QEMU 2 als vielseitige Virtualisierungsplattform nutzen und das Profilmanagement unter App-V 5 funktioniert. In den Produkttests nehmen die Tester drei Software-basierte Thin ... mehr
Mitglied: TuXHunt3R
28.04.2008, aktualisiert 18.10.2012, 36536 Aufrufe, 16 Kommentare, 3

PowerShell For Runaways - Part II

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" ( http://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 face-smile ):
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 face-wink

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 face-sad.
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" face-wink
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 face-wink
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 ..
Neuester Wissensbeitrag
Grundlagen
Tipp: (Number of active VLANs x Number of trunks) + Number of access ports Beispiel: (40 Vlans * (31 Trunkports + 10 PortChannel)) + 200 Ports Da kommt ... von win-dozer, in Grundlagen
Diese Inhalte könnten dich auch interessieren
Batch & Shell
Frage: Das ist das Script param(string$in) function eineFunktion(string$input) { Hier wird nichts ausgegeben Write-Host $input } eineFunktion($in) Hier gibt er den Eingabe-Parameter "Hallo" aus Write-Host $in .\script.ps1 "Hallo" ... von calebAdm, in Batch & Shell
Batch & Shell
Frage: Guten Tag an alle, ich bin ein Anfänger in Powershell und hoffe mal hier im Forum eine Lösung zu finden. Ich habe Zwei Skripte geschrieben: - Ein der ... von Arsene, in Batch & Shell
Batch & Shell
Frage: Hallo und guten Morgen zusammen, kann man, oder wie kann man den Fenstertitel eines offenen Prozesses mit Powershell ermitteln? Es geht darum, dass ich gerne eine bestimmte Aufgabe ... von internet2107, in Batch & Shell
Batch & Shell
Frage: - Warum steht Neuer Wert an zweiter und nicht an dritter Stelle? Ich wollte mir auch die Inhalte wie ein Array ausgeben lassen: $ht0 und $ht00 probiert, ... von Marabunta, in Batch & Shell
Tools & Utilities
Frage: Hallo Zusammen, ich habe ein Powershell Skript geschrieben, dass mir Archive entpackt und die darin enthaltenen PDF-Dateien druckt. Das klappt ganz gut, jedoch soll das Skript die Dateien ... von Fr4nki, in Tools & Utilities
Heiß diskutierte Inhalte
Windows Server
Frage: Hallo zusammen, wenn ich einen Win7 Pro x64 Client im Netz als "Fileserver" nutzen möchte, habe ich ja das Limit von 20 gleichzeitigen Verbindungen zum Share. ich habe ... von qwert79, in Windows Server
Installationsprobleme
Frage: Hallo Admins, ich habe die neueste Version von Adobe Reader repaketiert und habe diese nun auch via SCCM verteilt. Die .msi befindet sich auf den Zielrechnern, allerdings bekomme ... von Sudden, in Installationsprobleme
DSL, VDSL
Frage: Für kleine Steuerungsaufgaben habe ich für mein Wochendhaus ein PLC mit Ein- und Ausgängen gekauft, welches ich bei einem Bekannten mit DSL-Leitung eingerichtet habe. Software auf meinen Handy ... von Tiegerkrebs, in DSL, VDSL
Netzwerkmanagement
Frage: Hallo. Ich habe ein Problem mit meinem Netzwerkaufbau. Der Aufbau sieht folgendermaßen aus: Am Router (FritzBox 6360 Cable Unitymedia) hängen zwei Switches (TP-LINK TL-SG108E) jeweils an einem LAN ... von deckard2019, in Netzwerkmanagement
Viren und Trojaner
Frage: Hallo, ich hab mal einen Frage Seit einigen Tagen bemerke ich in meiner Taskleiste immer im Bruchteil einer Sekunde einen offensichtlichen Task, der sich kurz einblendet und dann ... von umpalumpa, in Viren und Trojaner