System Center Operations Manager 2012 R2: SCOM-Tipp

Immer mal wieder bringt der SCOM eine Meldung über fehlerhafte RunAs-Profile bzw. Accounts. meist ist aber dort nicht der Account angegeben, sondern nur die interne SSID, mit der man relativ wenig anfangen kann. Dieses kleine Script schafft Abhilfe und wandelt die SSID in einen sprechenden Namen:

param([Parameter(Mandatory=$true,HelpMessage="Please enter the SSID")][string]$SSID)
Get-scomRunAsAccount | Sort Name | % {$string = $null;$_.SecureStorageId | % {
 $string = $string + "{0:X2}" -f $_}

$RunAsAccountName = $_.Name
[string]$RunAsAccountSSID = $string
if ($SSID -match $RunAsAccountSSID) {write-host "The Run As Account is .. $RunAsAccountName"}
}

Mailconverter und Filename-Spielereien

Vor einigen Wochen stand ich vor der Herausforderung, eine Extraktion aus einem proprietären Filearchivsystem eines Herstellers mit zwei Buchstaben auf einem normalen Fileshare bereitzustellen.
Was war archiviert?
Das Archivsystem hat jede Datei die archiviert wurde an eine E-Mail angehängt und in einem Mailarchiv abgelegt. Die Extraktion brachte mir zwei Files:

EINDEUTIGE-ID.info – Textdatei mit Infos zum Archivierer und ursprünglichem Pfad zur Archivdatei
EINDEUTIGE-ID.data – EML-Datei mit eingebettetem Anhang

Continue reading ‘Mailconverter und Filename-Spielereien’ »

Teil 1: AD-Gruppenmitglieder auslesen

Aufgabenstellung: Ein Umzug eines bzw. mehrerer Fileserver von einer Domäne in die andere inkl. Übernahme der bestehenden Berechtigungen. Die User sind in Domäne B Gruppen zugeordnet. Domäne B ist eine Unterdomäne von Domäne A. Der Fileserver ist in Domäne C und in dessen lokalen Gruppen sind die globalen Berechtigungsgruppen der Domäne B. Domäne C fällt weg und die Fileserver sollen zukünftig in Domäne A laufen und die Gruppen namenstechnisch aus Domäne C übernehmen.

Erster Schritt: Die Gruppenmitgliedschaft aus Domäne C (Vertrauensstellung zu Domäne A besteht) auslesen, um dort Leichen zu finden und zu bereinigen. Problem: Die Abtrennung in eine andere Domäne, erschwert den Zugriff, da in Domäne C keine Domainadminrechte vorhanden sind, lediglich Berechtigungen auf Fileebene und in bestimmte OU’s. Erster Versuch mit Get-ADGroupmember im Folgenden:

#Variablen definieren
$textfile="gruppen.txt"
$output="gruppen.csv"

# Gruppen auslesen und in Textfile schreiben.
DSQuery * -d domain.de -Filter "(&(objectClass=group)(member=*))" -Limit 0 >$textfile

#Textfile in Array
$gruppenhp = (Get-Content $textfile)

#Ausgabe Gruppenmitglieder
foreach ($_ in $gruppenhp)
    {
    Get-ADGroupMember -Identity $_
    }

Ergebnis: Mit Get-ADGroupmember können keine Gruppen aus fremden Domänen ausgelesen werden, es werden Gruppen aus Domäne A erwartet.

Zweiter Versuch mit DSQUERY und DSGET, der Abschnitt #Ausgabe Gruppenmitglieder wird ersetzt durch:

foreach ($a in $gruppenhp)
    {
    DSQUERY GROUP $a | DSGET GROUP -MEMBERS
    }

Hier klappt der Zugriff über Domänengrenzen hinweg, Problem: Die Gruppen können nicht aufgelöst werden und anstatt dem Gruppennamen wird nur die SID mit dem Hinweis auf „ForeignSecurityPrincipals“ ausgegeben. Überlegungen zur Nutzung von SID-Auflösung mittels System.Security.Principal.NTAccount habe ich aufgrund fehlender Scripterfahrung wieder verworfen, eine Automatisierung gestaltete sich hier schwierig…

Lösung dafür wäre das optimierte Cmdlet von Quest, das vollständige Script lautet:

#Questmodul laden
Add-PSSnapin Quest.ActiveRoles.ADManagement

#Variablen definieren
$textfile="gruppen.txt"
$output="gruppen.csv"

# Gruppen auslesen und in Textfile schreiben.
DSQuery * -d domain.de -Filter "(&(objectClass=group)(member=*))" -Limit 0 >$textfile

#Textfile in Array
$gruppenhp = (Get-Content $textfile)

#Ausgabe Gruppenmitglieder
foreach ($_ in $gruppenhp)
    {
    Get-QADGroupMember -Identity $_
    }

Aber: Hier macht die Variablenübergabe Probleme, was bei den erstgenannten Scripts funktioniert, meldet hier einen Fehler, anstatt Zeile für Zeile auszulesen und abzufragen, nimmt das Quest-Cmdlet die Variable nicht mit und meckert etwas über falsche Parameter. Sobald ich eine Lösung habe, wird sie hier veröffentlicht.

Test des Code-Plugins

Einfache Möglichkeit um Code hervorzuheben:

#Das ist ein Script
#Erstellt am 11.8.2013 von Andreas Lentz

Get-VM –ComputerName Server1 | Where-Object {$_.State –eq ‘Running’}

Powershell Scriptsammlung

Hier sammeln sich Powershell-Scripts, die für die tägliche Arbeit eines Administrators benötigt werden.  Noch sind die meisten Kategorien leer, aber durch die Administration von Exchangeserver, dem Active Directory oder den System Center 2012 (R2) Produkten wie dem Operations Manager, Virtual Machine Manager, Configuration Manager und vor allem dem Orchestrator entwickeln sich von Zeit zur Zeti neue Scripts, die ich hier ablegen werde. Anregungen und Kritik gerne in die Kommentare, da ich erst ganz neu im Powershell-Business bin, freue ich mich über jede Verbesserung, Optimierungsvorschläge oder auch Tips zu „Das geht aber viel einfacher“ 🙂