PowerShell Script um Quest-Migration-Manager Datenbank aufzuräumen
Das folgende Script löscht Einträge aus der Ressource Processing Datenbank des Quest Migration Manager, die älter als 3 Monate sind:
# Bitte unter dem Namen cleanQuestDB.ps1 abspeichern, damit das u.a. Beispiel passt
param(
[String]$Server=“localhost“,
[int]$Port=50000,
[int]$Month=3,
[String]$LogPath=“~\Desktop\DeletedQuestDBEntries.log“
)
Import-Module ActiveDirectory
$ErrorActionPreference=“SilentlyContinue“
Get-ADObject -filter * -server „$($Server):$($Port)“ -searchbase *
$Root=($Error[0] | select -expandprop Exception | select -expandprop message).split(„:“)[1].split(„,“)[-1].substring(1).trimend(„‚.“)
$ErrorActionPreference=“Continue“
$Project=(Get-ADObject -filter * -server „$($Server):$($Port)“ -searchbase $Root -searchscope Onelevel | ? {$_.ObjectClass -eq „aelita-Amm-Workspace“}).Distinguishedname
$ComputerLogCollection=Get-ADObject -filter * -server „$($Server):$($Port)“ -searchbase „cn=Computers,cn=ResourceProcessing,$Project“ -searchscope onelevel -properties aelita-Amm-LastOperationTime,aelita-Amm-Name
$TimeSpan=(get-date)-(new-timespan -days ($Month*30))
$ToDelete=@()
$TotalCounter=$ComputerLogCollection.count
$DeleteCounter=0
„Searching Database. Please be patient!“
foreach ($Item in $ComputerLogCollection) {
$Timestamp=$Item | select -expandprop aelita-Amm-LastOperationTime
if ($Timestamp -and $Timestamp -lt $TimeSpan) {
$ToDelete+=$Item
$DeleteCounter++
}
}
if ((read-host -prompt „$DeleteCounter from $TotalCounter to delete, proceed (Yes/No)“) -notlike „Y*“) {„Aborted!“;exit}
„Deleted Entries of Questdatabase“ > $LogPath
„Run from: $(get-date)“ >> $LogPath
foreach ($Item in $ToDelete) {
$Name=$Item | select -expandprop aelita-Amm-Name
$Timestamp=$Item | select -expandprop aelita-Amm-LastOperationTime
„Deleting $Name from $Timestamp“ | tee $LogPath -Append
$Item | Remove-ADObject -Recursive -confirm:$false
}
Im einfachsten Fall starten Sie einfach das Script. Zunächst wird geschaut wieviele Einträge insgesamt vorhanden sind und wieviele davon gelöscht werden würden. Dann fragt es, ob Sie den Vorgang durchführen möchten und listet Ihnen die entsprechenden Objekte auf. Nebenbei werden diese Angaben in eine LogDatei auf Ihrem Desktop protokolliert. Sie können das Skript natürlich auch mit anderen Parametern aus dem Parameter Block aufrufen, wie z.B.:
./cleanQuestDB.ps1 -Server QuestServer -Port 40000 -Month 2 -LogPath C:\Quest.log
Voraussetzungen:
PowerShell 2.0 oder höher
AD-Modul verfügbar
Der Benutzer unter dem das Script läuft benötigt Vollzugriff auf die Quest-Datenbank
Muss mit erhöhten Rechten (UAC – Benutzerkontensteuerung) ausgeführt werden
XML-Abfrage Ereignisanzeige
Die Filter für die Windows Ereignisanzeige (Eventlog) sind sehr mächtig geworden. Mit den standard Optionen in der grafischen Oberfläche kann man schon viel machen, aber leider nicht im Nachrichtentext filtern. Das geht auch mit XML Abfragen. Klicken Sie dazu zunächst einmal auf ein ähnliches Ereignis und klicken Sie dort die Detailansicht an. Dort wählen Sie XML View:
Dann erstellen Sie einen benutzerdefinierten Filter und wählen dort den Reiter XML. Setzen Sie das Häkchen bei Abfrage manuell bearbeiten. Wenn Sie bereits bei Filter Reiter Einstellungen gemacht haben, sind diese auch schon im XML hier vordefiniert. Haben Sie z.B. das Anwendungslog ausgewählt steht dort:
<QueryList>
<Query Id=“0″ Path=“Application“>
<Select Path=“Application“>*</Select>
</Query>
</QueryList>
Oben habe ich Sie den XML-View auswählen lassen. Warum? Dort sehen Sie, wie die jeweiligen Felder nach denen Sie suchen können benannt sind. Um nun also z.B. nach dem Benutzernamen zu suchen ergänzen Sie die XML Zeilen wie folgt:
<QueryList>
Id=“0″ Path=“Security“>
<Select Path=“Security“>*</Select>
*[EventData[Data[@Name=‘TargetUserName‚] and (Data=‘s‚)]]
</Select>
</Query>
</QueryList>
Selbstverständlich dürfen Sie das gerne weiter verkomplizieren:
*[EventData[Data[@Name=’SubjectUserName‘] and (Data=’abc‘ or Data=’123’)]]
Dies würde alle mit der Angabe abc oder 123 finden bei UserName finden.
Möchten Sie in mehreren Logs suchen:
<Select Path=“Security“>*[System[(EventID=’1234′)]]</Select>
<Select Path=“Application“>*[System[(EventID=’4321′)]]</Select>
Würde alle Ereignisse aus dem Eventlog Security mit der ID 1234 und alle Ereignisse aus dem Applicationlog mit der ID 4321 anzeigen.
Um die Filter in der PowerShell zu nutzen können Sie die XML-Abfrage genauso in einen String schreiben und mit Get-WinEvent abfragen:
$Query=@“
<QueryList>
Id=“0″ Path=“Security“>
<Select Path=“Security“>
*[EventData[Data[@Name=’TargetUserName‘] and (Data=’s‘)]]
</Select>
</Query>
</QueryList>
„@
$Evts=Get-WinEvent -log Security -FilterXPath $Query -maxevents 1000
Windows PowerShell 3.0 update-help funktioniert nicht
Auch in der finalen Version von PowerShell 3.0 funktioniert das CMDlet update-help nicht. Das ist nur zum Teil richtig, denn in der Englischen Version klappt es. Das liegt daran, dass die Deutschen Fassungen aktuell noch nicht veröffentlicht sind. Peter Kriegel postete kürzlich in Xing einen Workaround zu diesem Problem welches wenigstens die Hilfe in Englisch anzeigt:
Function Get-HelpUICulture { param ( [String]$HelpSearchString, [String]$UICulture )
# UICulture merken, damit man Sie zurücksetzen kann $OldCulture = [System.Threading.Thread]::CurrentThread.CurrentUICulture trap { [System.Threading.Thread]::CurrentThread.CurrentUICulture = $OldCulture }
# neue UICulture setzen [System.Threading.Thread]::CurrentThread.CurrentUICulture = $UICulture
# Hilfe in einer anderen Sprache abrufen # Get Help in another language Get-Help $HelpSearchString -Full
# alte UICulture zurücksetzen [System.Threading.Thread]::CurrentThread.CurrentUICulture = $OldCulture }
# Hilfe in Englisch abrufen: Get-HelpUICulture -HelpSearchString Get-Command -UICulture ‘en-US’
In seinem Blog findet man weitere Informationen und Links zu den neuen Hilfemechanismen.
Windows OpenVPN Client als Dienst laufen lassen
Voraussetzung ist, dass OpenVPN bereits mit normaler Benutzer-Authentifizierung funktioniert. Dieses Tutorial richtet sich also an Fortgeschrittene und nicht an OpenVPN Einsteiger! Die allgemeine OpenVPN Konfiguration und Installation können Sie unter http://openvpn.net/index.php/open-source/documentation/howto.html nachlesen.
Nachdem Sie den OpenVPN Client und danach OpenVPN GUI for Windows installiert haben finden Sie bei den Windows-Diensten einen Service namens OpenVPN Service. Legen Sie die Startart auf Automatisch fest und setzen Sie den Registry-Key-Eintrag HKLM\SOFTWARE\OpenVPN-GUI\allow_service auf den Wert 1 (vorher 0). Des Weiteren verändern Sie in der Datei mit der Endung ovpn im C:\Programme\OpenVPN\config Verzeichnis die Zeile auth-user-pass indem Sie in dieser Zeile einen Dateinamen hinten dran schreiben, also z.B. so: auth-user-pass access.txt.
Erstellen Sie mit Notepad ebenfalls im config Verzeichnis die Datei access.txt mit dem Inhalt des gewünschten VPN-Benutzers für den Verbindungsaufbau, dessen Zertifikate Sie bereits hier im config Verzeichnis hinterlegt haben:
Benutzername
Kennwort
Damit da nicht gleich jeder dran kommt, sollten Sie auf die Datei nur dem Administrator und dem SYSTEM Zugriff geben und allen anderen die Berechtigungen entziehen. Für die ganz Paranodien ist dann noch eine Bitlockerverschlüsselung zu empfehlen (EFS geht an dieser Stelle nicht).
Systeminformationen von Windows auslesen
Mit der Freeware CW-Systeminfo können Sie viele Informationen Ihres Windows-Systems in Erfahrung bringen. Dazu zählen, CPU, Speicher, BIOS, aber auch z.B. den Windows Produkt-Key im Klartext u.v.a.m.
Regedit mehrmals starten
Um Regedit mehrfach zu starten kann man regedit -m aufrufen. Dadurch können mehrere Instanzen gestartet werden.
Microsoft etwas mitteilen
Sie können über http://answers.microsoft.com mit Microsoft kostenlos in Kontakt treten. Mit etwas Glück bekommen Sie hier schon einen wertvollen Tipp. Wenn Sie unbedingt ein Problem gelöst haben möchten bleibt Ihnen darüber hinaus nur die kostenpflichtige Lösung über die Hotline 01805/672255 (14Ct./Min.). Die Lösung Ihres Problems kostet aber dann min. weitere 72,- €.
Befehle von Powershell Modulen eines anderen Rechners benutzen
Bei Windows XP und Server 2003 können Sie z. B. die Befehle aus dem Active-Directory Modul in der Powershell nicht benutzen. Es gibt jedoch eine Lösung, wie Sie die AD cmdlets (Befehle) ohne direkten Remotezugriff trotzdem in die Powershell Konsole von XP einbinden können:
$cred=get-credential $session=new-pssession -computer 192.168.0.50 -cred $cred invoke-command {import-module activedirectory} -session $session import-pssession -session $session -module activedirectory
Im Script sind 2 Stellen fett markiert. Die erste Stelle enthält die IP-Adresse eines W2k8R2 DCs von dem die Modulbefehle importiert werden. Alternativ können Sie hier natürlich auch gerne den Namen einsetzen. Die zweite fett geschriebene Stelle am Schluß legt das zu importierende Modul fest. In diesem Beispiel ist es das AD Modul. Es kann natürlich auch ein X-beliebiges anderes Modul sein, dass auf der Remotemaschine allerdings instaloliert sein muss.
mRemote – Plattformunabhängiger Open Source Client für Remotezugriff
mRemote ist eine OpenSource Client für Plattform unabhängigen Remotezugriff. Er unterstützt folgende Protokolle und hat viele Konfigurationsmöglichkeiten:
- RDP (Remote Desktop)
- VNC (Virtual Network Computing)
- ICA (Independent Computing Architecture)
- SSH (Secure Shell)
- Telnet (TELecommunication NETwork)
- HTTP/S (Hypertext Transfer Protocol)
- Rlogin (Rlogin)
- RAW
Für Fernhilfe eigent sich nach wie vor TeamViewer, aber auch AnyDesk ist sehr empfehlenswert.
MP3 Dateien reparieren
Mit dem MP3 Repair Tool können Sie defekte mp3 Dateien reparieren, die z.B. nicht vollständig abgespielt werden. Meist liegt dies an fehlerhaften ID3-Tags die durch dieses Werkzeug gelöscht werden.