Sep
01
2016
--

Alle Unterordner und Dateien in vielen Unterordnern löschen

Wie schafft man es, in 40 Unterordnern mit speziellen Berechtigungen alle darin enthaltenen Unterordner und Dateien zu löschen. (1. Ebene soll also erhalten bleiben, alles darunter verschwinden).

Viele Tipps gehen von For-Schleifen aus, mit denen dann zuerst DEL, dann RD durchgeführt wird. Habe mit ROBOCOPY mehr Erfolg gehabt: ich erstelle einen Dummy-Ordner, der leer ist, und den ich dann mit ROBOCOPY mit jedem Unterordner in der 1. Ebene, die ich mit einer For-Schleife durchlaufe, spiegle.

md D:\Dummy
for /f "delims=" %%i in ('dir /b /ad D:\UserShare') do robocopy d:\Dummy "D:\UserShare\%%i" /PURGE
rd D:\Dummy
Written by markus.strobl in: Allgemeines |
Mrz
26
2014
--

Einstellung “Desktophintergrund auf der Startseite anzeigen” für Windows 8.1

hintergrundFür die neue Einstellung “Desktophintergrund auf der Startseite anzeigen” unter Windows 8.1 in den Eigenschaften der Taskleiste gibt es in den lokalen Gruppenrichtlinien oder per GPO-Verteilung in einer Domäne noch keine Vorlage. Durch diese Einstellung fällt die neue ModernUI-Oberfläche des Startmenüs fast nicht mehr auf, da das gewohnte Hintergrundbild auch hinter dem Startmenü liegt.

Man kann die Einstellung mit Hilfe eines Registry-Keys setzen bzw. über GPO-Preferences verteilen:

Schlüssel: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Accent
Wert-Name: MotionAccentId_v1.00
Wert-Typ: REG_DWORD
Wert: 000000db (Hexadezimal) bzw. 219 (Dezimal)

Written by markus.strobl in: Windows | Schlagwörter:, , , ,
Feb
24
2014
--

Der Panther macht Probleme

Szenario: Dutzende PCs werden mit dem gleichen Image aufgesetzt, alles funktioniert bestens, nur ein einziger PC wagt es, Widerstand zu leisten, und das obwohl er baugleich mit anderen ist… zum Verzweifeln.

Fehlermeldung: Windows could not parse or process unattend answer file [C:\windows\Panther\unattend.xml] for pass [specialize]. A component or setting specified in the answer file does not exist.

Bei mir war es aber nicht der Internet Explorer 10 wie in oftmals zitierten Szenarien im Internet, sondern ein zu langer Computername!

Habe vor dem Imagen mit wdsutil /add-device /device:hier_war_der_zu_lange_pc_name /id:mac-adresse einen zu langen PC-Namen vergeben (maximal 15 Zeichen!).

Lösung: Objekt im AD gelöscht, neuen Namen mit wdsutil registriert, und auch auf diesem einen Gerät funktionierte das Imagen wieder bestens.

Written by markus.strobl in: Allgemeines |
Feb
03
2014
--

PTC Mathcad Lizenzserver installieren–ganz anders, als gewohnt… besser?

Zum Installieren des Lizenzservers muss man zuerst den als lmadmin bezeichneten Download “FlexnetAdminInstaller” durchführen. Nach Entpacken und Start der setup.exe kommt ein Dialog, bei dem man erst durch einen Hover-Effekt erfährt, dass man dort den Pfad zur Lizenzdatei eintragen muss. Gefinkelt.

PTCFlexLM

Dann geht alles automatisch: nach Eingabe des Pfades installiert sich ohne weitere Tastendruck, Bestätigung oder Abfragen der Lizenzserver von selbst. Nicht ganz: die Einträge in der Firewall muss man dann noch selbst setzen. Also bei den eingehenden Verbindungen folgende 3 Regeln zulassen:

  • Port 7788 TCP
  • Programm %ProgramFiles%\PTC\FLEXnet Admin License Server\i486_nt\obj\ptc_d.exe zulassen
  • Programm %ProgramFiles%\PTC\FLEXnet Admin License Server\i486_nt\obj\lmgrd.exe zulassen

Kann man nichts sagen: PTC schaut, dass man als Administrator auch knifflige Aufgaben Lösen lernt

Dez
09
2013
--

Netzlaufwerk verbinden: gespeicherten User löschen

Habe mich auf einem Server mit meinem Nicht-Domänen-PC mit einer Freigabe verbunden, Domänen-User eingegeben und auf “Anmeldedaten speichern” geklickt und nun nie mehr unter einem anderen User einsteigen können. Unter “Gespeicherte Netzwerkkennwörter” usw. findet man dazu auch nichts, das einzige was half war der folgende Befehl:

rundll32.exe keymgr.dll, KRShowKeyMgr

Dort habe ich die gewünschten neuen Anmeldedaten für den Server eingegeben und fortan hat es funktioniert.

Sollte auch funktionieren, wenn man auf “Start” drückt und nach “Netzwerkkennwörter verwalten” sucht und die entsprechende Systemsteuerungs-Seite dann aufruft (direkt unter Win8.1: Systemsteuerung\Benutzerkonten und Family Safety\Anmeldeinformationsverwaltung). Dort legt man den Server gleich wie oben händisch unter “Windows-Anmeldeinformationen” händisch an, meldet sich als User am System ab und wieder an und es sollte funktionieren.

Nov
11
2013
--

Wake-on-Mouse deaktivieren

Wer lässt sich schon gerne von seiner Computermaus aufwecken und nerven. Ich nicht.

Beim neuen Notebook habe ich meine Logitech Funkmaus angeschlossen. Jedes Mal, wenn ich den PC über den Ruhezustand ausgeschaltet habe, aber vergaß, vorher die Funkmaus auszuschalten, reaktivierte sich der PC. Was ja aufgrund der Gefahr einer Überhitzung beim Transport in einer engen Tasche sogar gefährlich werden könnte.

In den System-Einstellungen, welche Tóshiba als Tool mitliefert, fand ich keine brauchbare Option. “Reaktivierung durch Tastatur (Wake-on-Keyboard)” hatte ich ja bereits ausgeschaltet. Und von der Maus war nichts zu sehen. Wie ich in UEFI booten kann wusste ich auf die Schnelle nicht (F10 oder F12 oder was ganz anderes?)…. und dann die rettende Idee:

Im Geräte-Manager kann man bei der Maus Energieoptionen einstellen bzw. ausschalten, dass der PC durch die Maus reaktiviert wird.

wake-on-mouse

Sep
06
2013
--

Log-Dateien chronologisch in einem BatchProzess anlegen

Für eine geplante Aufgabe, bei der ein VBS-Skript abgearbeitet werden soll, wollte ich die Bildschirm-Ausgabe als LOG-Datei der Aktivität abspeichern. Dazu wird die Aufgabe nun über eine CMD-Datei gestartet und mit >> die Ausgabe in eine LOG-Datei umgeleitet. Damit jedes Mal eine neue Datei erstellt wird inkl. Datum und Zeit im Dateinamen im YYYYMMTT HHMMSS-Format musste die %DATE% und %TIME% Variable  stückweise eingebaut werden

Die CMD-Datei

rem @echo off
cd \dhcpscript
cscript \\server\scripts$\\dhcp\dhcp_reservedips_abgleichen.vbs > "LOG %date:~6,4%%date:~3,2%%date:~0,2% %time:~0,2%%time:~3,2%%time:~6,2%.txt"
Written by markus.strobl in: Programmierung | Schlagwörter:, , , ,
Sep
06
2013
--

DHCP-Server mit CSV-Datenbank abgleichen über VBS

Ziel des Projektes war es, dass jeder unserer 1.400 User über ein Web-Formular eine MAC-Adresse selbst registrieren kann. Diese wird dann am DHCP-Server als Reservierung hinterlegt. Damit kann ein User nur ein Arbeits-Gerät im WLAN registrieren und nicht zusätzlich die Smartphones, Tablets, MP3-Player, Smartwatches,…

Am DHCP Server wird nun alle 15 Minuten folgendes VBS-Skript abgearbeitet. Dabei werden zuerst alle Reservierungen aus dem DHCP in eine Textdatei ausgelesen, diese dann sortiert und anschließend mit einer CSV-Datei abgegleichen. Die CSV-Datei stammt vom Webserver, der diese alle 15 Minuten über einen CRON-Job aus den gespeicherten registrierten MAC- und dadurch auch eindeutig zugewiesenen IP-Adressen erstellt.

Format der beiden Textdateien:

IPWert;IP-Adresse;MAC-Adresse

Der IPWert erreichnet sich aus 3.. Teil der Ip-Adresse * 256 + 4. Teil, die MAC-Adresse muss ohne Bindestriche oder Doppelpunkte angegeben werden.

Das VBS-Skript:

'=======================================================================================
'dhcp_reserverdips_ablgeichen.vbs
'=======================================================================================
'
' Version: 1
' Datum: 03.09.2013
'
' (1) Liest am DHCP Server in einem definierten Scope/Bereich IPs und MAC aus und
'     speichert diese sortiert in der Datei "DHCP_reservedIPs.txt"
' (2) Vergleicht die Werte in den Dateien "DHCP_reservedIPs.txt" und
'     "mySQL_reserverdIPs.txt" und löscht dabei nicht mehr gewünschte Reservierungen,
'     ändert oder ergänzt Reservierungen
'
'=======================================================================================

' TODO
'Usernamen auslesen aus Tabelle

'Variablendefinition
dim anz
dim Zeilen()
dim ZeilenSortiert
dim debug
dim scope
dim mysqlfile_pfad
dim mysql_neu_einlesen

'Vorbelegte Werte
debug=false
scope="10.192.0.0"
mysqlfile_pfad="c:\dhcpscript\"

function bubblesort(arrSortieren)
	'Argument: Array von Textzeilen der Form IP-ZahlenWert;IP;Mac
	'sortiert das Arry nach der Spalte "IP-ZahlenWert"
	if debug=true then wscript.echo "Anzahl der zu sortierenden Zeilen: "&ubound(arrSortieren)

	for i = 0 to ubound(arrSortieren)
		for j = i + 1 to ubound(arrSortieren)
			var_i=split(arrSortieren(i),";")
			var_j=split(arrSortieren(j),";")
			if cint(var_i(0)) > cint(var_j(0)) then
				arrTemp = arrSortieren(i)
				arrSortieren(i) = arrSortieren(j)
				arrSortieren(j) = arrTemp
			end if
		next
	next
	bubblesort = arrSortieren
end function

sub ReservierungLoeschen (IP,Mac)
	'Argument: IP und MAC-Adresse des zu löschenden Eintrags

	wscript.echo " "
	wscript.echo "Reservierung löschen: " & IP & ", " & Mac
	wscript.echo "----------------------------------------------------------"
	set obj = oshell.exec("netsh dhcp server scope " &scope & " delete reservedip " & IP & " " & Mac )
	ausgabe = obj.stdout.readall()
	wscript.echo ausgabe
end sub

sub ReservierungAendern(IP,Macalt,MacNeu,User)
	'Argument: IP-Adresse, alte MAC-Adresse und neue MAC-Adresse und Username

	wscript.echo " "
	wscript.echo "Reservierung ändern: " & IP & ", " & Macalt & ", " & Macneu
	wscript.echo "---------------------------------------------------------------------------"
	set obj = oshell.exec("netsh dhcp server scope " &scope & " delete reservedip " & IP & " " & Macalt )
	ausgabe = obj.stdout.readall()
	wscript.echo ausgabe
	set obj = oshell.exec("netsh dhcp server scope " &scope & " add reservedip " & IP & " " & MacNeu & " " & User  & " " & User)
	ausgabe = obj.stdout.readall()
	wscript.echo ausgabe

	end sub

sub ReservierungHinzufuegen (IP,MAC,User)
	'Argument: IP-Adresse, MAC und Usernamen für neuen Eintrag

	wscript.echo " "
	wscript.echo "Reservierung hinzufügen: " & IP & ", " & Mac & ", " & User
	wscript.echo "------------------------------------------------------------------------------"
	set obj = oshell.exec("netsh dhcp server scope " &scope & " add reservedip " & IP & " " & Mac & " " & User  & " " & User)
	ausgabe = obj.stdout.readall()
	wscript.echo ausgabe
end sub

' ========= MAIN =========

' TEIL (1): Datei mit den Reservierungen erstellen

' netsh-Ausgabe in Datei tempfile zwischenspeichern
wscript.echo "Start dhcp_reserverdips_ablgeichen.vbs"
wscript.echo "--------------------------------------"
wscript.echo "Startzeit " & date & " " & time

Set oShell = CreateObject("WScript.Shell")
Set oScriptExec = oShell.Exec("netsh dhcp server scope " & scope & " show reservedip")
outpsource = oScriptExec.stdout.readall()

'Ausgabe der Anzeige aller ReservedIPs in Datei tempfile.txt schreiben
set fso = createobject("Scripting.FileSystemObject")
Set tempfile = fso.CreateTextFile("tempfile.txt")
tempfile.writeline(outpsource)
tempfile.close

'Anzahl Reservierungen auslesen
Set tempfile = fso.openTextFile("tempfile.txt")
do While not tempfile.AtEndOfStream
	line = tempfile.ReadLine
	if(instr(line,"Anzahl der")=1) then
		str = split(line)
		t=str(7)         'taking no. of reservations into t
		if debug=true then wscript.echo "Anzahl an gefundenen reservierten IPs: "&t
		exit do
	end if
loop
tempfile.close

' IP und MAC zeilenweise auslesen und in das Array Zeilen() ausgeben
if t=0 then
	Set finalfile = fso.CreateTextFile("DHCP_reservedIPs.txt")
	finalfile.close

	wscript.echo "Keine reservierten IPs im DHCP Server gefunden."
else
	Set tempfile = fso.openTextFile("tempfile.txt")
	'Leerzeilen überspringen
	for i=1 to 7
		tempfile.skipline
	next

	' Zeilen mit ReservedIPs auslesen, IP und MAC herausholen und Dezimalzahl für IP berechnen
	' alle 3 Werte zusammen durch ; getrennt in einem Array zeilen() abspeichern
	for i=1 to t
		string1=split(trim(tempfile.readline))
		ip = split(string1(0),".")
		ipZahl = cint(ip(2)) * 256 + cint(ip(3))
		if debug=true then  wscript.echo string1(0) & "---" & replace(string1(ubound(string1)),"-","")
		REDIM preserve zeilen(i-1)
		zeilen(i-1) = ipZahl & ";" & string1(0) & ";" & replace(string1(ubound(string1)),"-","")
	next
	tempfile.close

	' Array Zeilen() sortieren
	ZeilenSortiert=bubblesort(Zeilen)

	' Array Zeilen() in Datei ausgeben
	Set finalfile = fso.CreateTextFile("DHCP_reservedIPs.txt")
	For i = 0 To UBound(ZeilenSortiert)
		Finalfile.Writeline ZeilenSortiert(i)
	Next
	finalfile.close

end if

' TEIL (2): Dateien vergleichen und Aktionen setzen

' Datei dhcpfile gesamt durchlaufen
Set dhcpfile = fso.openTextFile("DHCP_reservedIPs.txt")
Set mysqlfile = fso.openTextFile(mysqlfile_pfad & "mySQL_reservedIPs.txt")

mysql_neu_einlesen=true
do While not dhcpfile.AtEndOfStream
	z_dhcp = split(dhcpfile.ReadLine,";")
	wertip_dhcp=cint(z_dhcp(0))
	ip_dhcp=z_dhcp(1)
	mac_dhcp=z_dhcp(2)

	do
		if mysqlfile.AtEndOfStream=false then 'in 2. Datei (mySql) nur dann neu einlesen, wenn nicht die Reservierung gelöscht wurde
			if mysql_neu_einlesen=true then z_mysql = split(mysqlfile.ReadLine,";")
			wertip_mysql=cint(z_mysql(0))
			ip_mysql=z_mysql(1)
			mac_mysql=z_mysql(2)
		else
			wertip_mysql=99999 'DHCP hat noch Einträge, mySQL aber nicht
		end if

		mysql_neu_einlesen=true

		if debug=true then wscript.echo wertip_dhcp & " - " & ip_dhcp & " - " & mac_dhcp & " ------ " & wertip_mysql & " - " & ip_mysql & " - " & mac_mysql

		if wertip_dhcp<wertip_mysql then
			call ReservierungLoeschen (ip_dhcp,mac_dhcp)
			mysql_neu_einlesen=false
			exit do
		end if

		if wertip_dhcp=wertip_mysql and mac_dhcp<>mac_mysql then
			call ReservierungAendern(ip_dhcp,mac_dhcp,mac_mysql,"Usernamen")
			exit do
		end if

		if wertip_dhcp>wertip_mysql then
			call ReservierungHinzufuegen (ip_mysql,mac_mysql,"Usernamen")
		end if

	loop while wertip_dhcp>wertip_mysql 'es gibt neue Einträge am mySql

loop

do While not mysqlfile.AtEndOfStream  'mySQL hat noch Einträge, DHCP aber nicht
	z_mysql = split(mysqlfile.ReadLine,";")
	wertip_mysql=cint(z_mysql(0))
	ip_mysql=z_mysql(1)
	mac_mysql=z_mysql(2)

	call ReservierungHinzufuegen (ip_mysql,mac_mysql,"Usernamen")
loop

dhcpfile.close
mysqlfile.close

wscript.echo ""
WScript.Echo "fertig um " & date & " " & time
Written by markus.strobl in: Programmierung | Schlagwörter:, ,
Jan
03
2012
--

Ich suche immer noch, wo ich will

Vor zwei Jahren wusste ich noch, wie ich mir einen eigene Suchanbieter für den IExx einrichten kann – nur leider hat nun Microsoft den damals angegebenen Link deaktiviert.

Neuer Link zum Angeben eines eigenen Suchanbieters wie Google.AT o.ä.m.: http://www.enhanceie.com/ie/SearchBuilder.asp

Nov
02
2011
--

Calibri, Cambria, Candara, Consolas, Constantia, Corbel

Seit Windows Vista gibt es neue Standard-Schriftarten in Windows, welche teils sehr schön ihre Wirkung in den verschiedenen Stilen entfalten. Mehr dazu: WebFont: Next Generation bzw. siehe Fontmatrix

schriften

Written by markus.strobl in: Windows | Schlagwörter:,

Powered by WordPress | Theme: Aeros 2.0 by TheBuckmaker.com