<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Daniels Blog &#187; Windows allgemein</title>
	<atom:link href="http://blog.danielhahn.eu/category/microsoft/windows-allgemein-microsoft/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.danielhahn.eu</link>
	<description>Themen rund um IT und das WWW</description>
	<lastBuildDate>Wed, 26 May 2010 11:06:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Servergespeicherte Profile und NVIDIA-Treiber</title>
		<link>http://blog.danielhahn.eu/2009/servergespeicherte-profile-und-nvidia-treiber/</link>
		<comments>http://blog.danielhahn.eu/2009/servergespeicherte-profile-und-nvidia-treiber/#comments</comments>
		<pubDate>Sun, 08 Mar 2009 16:10:38 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Windows allgemein]]></category>
		<category><![CDATA[Abmeldung]]></category>
		<category><![CDATA[NVIDIA]]></category>
		<category><![CDATA[Profil]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[servergespeichert]]></category>
		<category><![CDATA[speichern]]></category>
		<category><![CDATA[zurückschreiben]]></category>

		<guid isPermaLink="false">http://blog.danielhahn.eu/?p=164</guid>
		<description><![CDATA[In unserem Unternehmen wurde kürzlich eine alte Charge Computer durch neue, mit NVIDIA-Grafik ausgestattete Rechner, ersetzt. Seitdem trat das Problem auf, dass die servergespeicherten Profile der Nutzer, die sich an diesen Rechnern anmeldeten, bei der Abmeldung nicht mehr auf den Server zurückgeschrieben wurden. Da dies bei ca. 200 Usern, die auch öfter den PC wechseln, [...]]]></description>
			<content:encoded><![CDATA[<p>In unserem Unternehmen wurde kürzlich eine alte Charge Computer durch neue, mit NVIDIA-Grafik ausgestattete Rechner, ersetzt. Seitdem trat das Problem auf, dass die servergespeicherten Profile der Nutzer, die sich an diesen Rechnern anmeldeten, bei der Abmeldung nicht mehr auf den Server zurückgeschrieben wurden. Da dies bei ca. 200 Usern, die auch öfter den PC wechseln, natürlich völlig inakzeptabel ist, musste schnell eine Lösung für das Problem gefunden werden. Leider gestalltete sich die Suche nach der Ursache alles andere als leicht. Der erste Schritt war, die betroffenen Profile neu anzulegen, was aber keinen Erfolg brachte. Die Ereignisanzeige sowohl des Servers, als auch der Clients brachte auch keine brauchbaren Informationen. Deshalb legte ich meine ganzen Hoffnungen in das USERENV-Loging. Via Registry volles Loging aktiviert und nach mehreren An- und Abmeldungen die userenv.log ausgewertet &#8211; leider ebenso ohne Erfolg. So blieb mir nur noch das Internet. Der einzige Hinweis, den ich da noch finden konnte, war ein Problem mit älteren NVIDIA-Treibern, dass andere Administratoren hatten. Diese schienen beim Abmelden das Benutzerprofil nicht richtig freizugeben, weshalb es dann nicht auf den Server zurückgeschrieben werden konnte. Obwohl wir bei uns relativ aktuelle Treiber im Einsatz haben, war das mein letzter Anahltspunkt und so habe ich mit dem Sysinternals Tool Autoruns alle NVIDIA-Autostarteinträge (bis auf die eigentlichen Treiberdateien) deaktiviert. Und tatsächlich konnte dies das Problem beheben. Es scheint also nach wie vor oder wieder eine Fehlfunktion in NVIDIAs Treibern zu geben. Leider erscheint weder in der Ereignisanzeige, noch in irgendwelchen LOG-Dateien eine entsprechende Meldung. Bleibt also nur zu hoffen, das NVIDA das Problem in den Griff bekommt, um uns Administratoren mühsame Sisyphusarbeit zu ersparen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danielhahn.eu/2009/servergespeicherte-profile-und-nvidia-treiber/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Selektives Löschen mit der Windows Powershell 1.0</title>
		<link>http://blog.danielhahn.eu/2009/selektives-loeschen-mit-der-powershell-10/</link>
		<comments>http://blog.danielhahn.eu/2009/selektives-loeschen-mit-der-powershell-10/#comments</comments>
		<pubDate>Fri, 02 Jan 2009 19:23:05 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Windows allgemein]]></category>
		<category><![CDATA[leer]]></category>
		<category><![CDATA[löschen]]></category>
		<category><![CDATA[Ordner]]></category>
		<category><![CDATA[selektiv]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.danielhahn.eu/?p=60</guid>
		<description><![CDATA[Ich wünsche allen Leserinnen und Lesern meines Blogs ein gesundes und erfolgreiches Jahr 2009!! Ich möchte das Jahr mit einem Powershell (1.0) Skript einläuten, welches ich vor kurzem erstellt habe. Da es sich mit um eines meiner ersten &#8220;richtigen&#8221; Skripte für die Windows Powershell handelt und ich denke, dass die Problemstellung, die dem Ganzen zu [...]]]></description>
			<content:encoded><![CDATA[<p>Ich wünsche allen Leserinnen und Lesern meines Blogs ein gesundes und erfolgreiches Jahr 2009!! Ich möchte das Jahr mit einem Powershell (1.0) Skript einläuten, welches ich vor kurzem erstellt habe. Da es sich mit um eines meiner ersten &#8220;richtigen&#8221; Skripte für die Windows Powershell handelt und ich denke, dass die Problemstellung, die dem Ganzen zu Grunde liegt, sicher auch für andere Administratoren interessant sein könnte, möchte ich Euch meine geistigen Ergüsse nicht vorenthalten und freue mich natürlich auch über Anregungen, was man an der einen oder anderen Stelle noch optimieren könnte.</p>
<p>Ich stand kürzlich in unserem Unternehmen vor dem Problem, dass ich auf einem windowsbasierten Serversystem aus bestimmten Ordnern unter einem Wurzelverzeichnis alle Dateien mit einem gewissen Alter, sowie alle leeren Unterordner löschen wollte. Klingt an und für sich so erst einmal nicht schwierig. Das Einfachste wäre sicher gewesen, mit der Windows Suchfunktion alle meinem Kriterium entsprechenden Dateien herausfischen zu lassen, und diese dann über den Explorer zu löschen. Halbwegs Praktikabel, wenn man auf das Löschen leerer Ordner verzichten kann und es sich um eine einmalige Sache handelt. Damit wollte ich mich aber nicht zufrieden geben; die leeren Verzeichnisse sollten ebenfalls eliminiert und der Vorgang jede Nacht automatisch gestartet werden. Es musste also ein Skript her, welches via Taskplaner jede Nacht ausgeführt wird. Doch in welcher Form? VBS, eine einfache Batchdatei mit DOS-Befehlen oder die neue Powershell? Ich habe mich für die Powershell (1.0) entschieden, da ich von den scheinbar endlosen Möglichkeiten dieses Werkzeugs begeistert bin.<span id="more-60"></span></p>
<p>Und so sieht das Ganze dann codemäßig aus (den Download findet ihr am Ende des Artikels):</p>
<pre class="brush: vb;">
# DeleteShareFolderContent.ps1
# Daniel Hahn - Dezember 2008

# -----------------------------------------------------

Write-Host
Write-Host
Write-Host &quot;Skript zum selektiven Leeren von Tauschordnern&quot;
Write-Host &quot;==============================================&quot;
Write-Host
Write-Host

# Hier das Wurzelverzeichnis angeben
$strRootFolder = &quot;Drive:Folder&quot;

# Logfile anlegen und Kopfzeilen schreiben
$strTimestamp = Get-Date -Format &quot;dd.MM.yyyy - HH:mm&quot;
$strTimestampFile = Get-Date -Format &quot;yyyy-MM-dd-HHmm&quot;
$strLogfileName = &quot;Tausch leeren &quot; + $strTimestampFile + &quot;.log&quot;
$strLogfile = $Env:Temp + &quot;\&quot; + $strLogfileName
&quot;Vorgang gestartet: $strTimestamp&quot; &gt;&gt; $strLogfile
&quot;&quot; &gt;&gt; $strLogfile

# -----------------------------------------------------
function CheckFiles
{
param([object] $objRootFolder)
$strRootFolder = $objRootFolder.Path
$strRootFolderName = $objRootFolder.Name
$colFiles = $objRootFolder.Files
$DirContent = $null
$DirContent = Get-ChildItem $strRootFolder

foreach($objFile in $colFiles)
{
$strFile = $strRootFolder + &quot;\&quot; + $objFile.Name
$dtFile = $objFile.DateCreated
$dtSys = Get-Date -Format &quot;dd.MM.yyyy HH:mm:ss&quot;
$iDif = (New-TimeSpan -Start $dtFile -End $dtSys).TotalDays

if($iDif -gt 7)
{
$FSO.DeleteFile($strFile, $true)
Write-Host &quot;Datei &quot; -NoNewline
Write-Host $strFile -ForegroundColor &quot;magenta&quot; -NoNewline
Write-Host &quot; gelöscht&quot;
&quot;Nach Frist gelöscht: $strFile&quot; &gt;&gt; $strLogfile
$script:iDeletedCount++
}
$script:iFileCount++
}

if(($DirContent -eq $null) -and ($strRootFolderName -notlike &quot;*04*Tausch&quot;))
{
$FSO.DeleteFolder($strRootFolder)
Write-Host &quot;Leeres Verzeichnis &quot; -NoNewline
Write-Host $strRootFolder -ForegroundColor &quot;magenta&quot; -NoNewline
Write-Host &quot; gelöscht&quot;
&quot;Leeres Verzeichnis gelöscht: $strRootFolder&quot; &gt;&gt; $strLogfile
$script:iFolderDeletedCount++
}
}

# -----------------------------------------------------
function FindSubFolders
{
param([object] $objRootFolder)
$colRootSubFolders = $objRootFolder.SubFolders

foreach($objRootSubFolder in $colRootSubFolders)
{
FindSubFolders $objRootSubFolder
CheckFiles $objRootSubFolder
$script:iFolderCount++
}
}

# -----------------------------------------------------
function FindShareFolders
{
param([object] $objRootFolder)
$colRootSubFolders = $objRootFolder.SubFolders

foreach($objRootSubFolder in $colRootSubFolders)
{
$strRootSubFolder = $objRootSubFolder.Name

if($strRootSubFolder -like &quot;*Tausch&quot;)
{
CheckFiles $objRootSubFolder
FindSubFolders $objRootSubFolder

$script:iFolderCount++
}
}
}

# -----------------------------------------------------
function WaitKey
{
$strPrompt = &quot;Beliebige Taste zum Verlassen drücken ... &quot;
Write-Host
Write-Host $strPrompt -NoNewline
$key = [Console]::ReadKey($true)
Write-Host
}

# -----------------------------------------------------
# main

$iFolderDeletedCount = 0
$iDeletedCount = 0
$iFolderCount = 0
$iFileCount = 0

Write-Host &quot;Temporäres Logfile:&quot; $strLogfile
Write-Host
Write-Host &quot;Beginne mit Durchsuchen der Tauschordner in &quot;
Write-Host $strRootFolder -ForegroundColor &quot;Cyan&quot; -NoNewline
Write-Host

$FSO = New-Object -COM Scripting.FileSystemObject

if(-not $FSO.FolderExists($strRootFolder))
{
Write-Host &quot;Fehler: Wurzelverzeichnis existiert nicht!&quot; -ForegroundColor &quot;Red&quot;
Write-Host
Write-Host &quot;Ausführung wird abgebrochen&quot;
WaitKey
exit
}

$objRootFolder = $FSO.GetFolder($strRootFolder)
FindShareFolders $objRootFolder

Write-Host
Write-Host &quot;Insgesamt&quot; $iFileCount &quot;Datei(en) in&quot; $iFolderCount &quot;Ordnern gefunden.&quot; -ForegroundColor &quot;magenta&quot;
Write-Host $iDeletedCount &quot;Datei(en) gelöscht&quot; -ForegroundColor &quot;magenta&quot;
Write-Host $iFolderDeletedCount &quot;leere(r) Ordner gelöscht&quot; -ForegroundColor &quot;magenta&quot;

$strTimestamp = Get-Date -Format &quot;dd.MM.yyyy - HH:mm&quot;
&quot;&quot; &gt;&gt; $strLogfile
&quot;$iDeletedCount Datei(en) gelöscht&quot; &gt;&gt; $strLogfile
&quot;$iFolderDeletedCount Ordner gelöscht&quot; &gt;&gt; $strLogfile
&quot;&quot; &gt;&gt; $strLogfile
&quot;Skript beendet: $strTimestamp&quot; &gt;&gt; $strLogfile

WaitKey

# -----------------------------------------------------
</pre>
<p>Das Skript ist vielleicht an der einen oder anderen Stelle nicht perfekt, erfüllt aber seinen Zweck. (Ich habe versucht, möglichst selbsterklärende Variablen- und Funktionsnamen zu verwenden, sowie die Verständlichkeit durch Kommentare zu verbessern)</p>
<p>[download#1]</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danielhahn.eu/2009/selektives-loeschen-mit-der-powershell-10/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sicheres Löschen mit Windows Bordmitteln</title>
		<link>http://blog.danielhahn.eu/2008/sicheres-loeschen-mit-windows-bordmitteln/</link>
		<comments>http://blog.danielhahn.eu/2008/sicheres-loeschen-mit-windows-bordmitteln/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 15:11:53 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Windows allgemein]]></category>
		<category><![CDATA[cipher]]></category>
		<category><![CDATA[sicher löschen]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.danielhahn.eu/?p=28</guid>
		<description><![CDATA[Wer hätte gedacht, dass Microsoft schon seit Windows 2000 ein Tool in seine Betriebssysteme integriert, mit dem man Dateien durchaus sicher löschen kann!? Vielleicht ist der sehr geringe Bekanntheitsgrad dieser Funktion damit zu erklären, dass es sich dabei eigentlich nur um eine Nebenfunktion des seit Windows 2000 in alle Windows-Versionen (mit Ausnahme der Home Editions) [...]]]></description>
			<content:encoded><![CDATA[<p>Wer hätte gedacht, dass Microsoft schon seit Windows 2000 ein Tool in seine Betriebssysteme integriert, mit dem man Dateien durchaus sicher löschen kann!? Vielleicht ist der sehr geringe Bekanntheitsgrad dieser Funktion damit zu erklären, dass es sich dabei eigentlich nur um eine Nebenfunktion des seit Windows 2000 in alle Windows-Versionen (mit Ausnahme der Home Editions) integrierten EFS (Encrypted File System) handelt.</p>
<p>Dass Tool nennt sich <em>cipher.exe</em>, ein Dienstprogramm welches eigentlich die EFS-Verwaltung über Kommandozeile ermöglicht. Es enthält jedoch eine Option, die nichts mit Verschlüsselung zu tun hat: führt man es mit dem Parameter <em>/W:Laufwerksbuchstabe:\</em> (und natürlich den dementsprechenden Berechtigungen) aus, überschreibt es sämtlichen unzugeordneten Speicher auf dem Zielvolume zuerst mit binären Nullen, dann binären Einsen und schließlich nocheinmal mit einem Zufallswert. Es werden also nur Dateien überschrieben, die zuvor über den Explorer oder auf ähnlichem Wege gelöscht wurden (nicht nur in den Papierkorb verschoben!).<span id="more-28"></span> Und da jedes Mal der gesamte freie Speicher des Volumes überschrieben wird, kann sich der Prozess bei größeren Datenträgern schonmal in die Länge ziehen. Auch ist es wichtig, dass man vor dem Start von cipher alle unnötigen Programme und Dienste beendet, damit wirklich alle Dateien freigegeben werden.</p>
<p style="text-align: center;"><a href="http://blog.danielhahn.eu/wp-content/uploads/2008/06/cipher_screen.jpg"><img class="alignnone size-full wp-image-29 aligncenter" title="cipher_screen" src="http://blog.danielhahn.eu/wp-content/uploads/2008/06/cipher_screen.jpg" alt="" width="500" height="251" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danielhahn.eu/2008/sicheres-loeschen-mit-windows-bordmitteln/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
