Archiv der Kategorie: Powershell

Active Directory – Gruppenfilterung aller GPOs als CSV ausgeben

Hallo,

und noch ein Skript. Mit dem nachfolgenden Skript werden von allen Gruppenrichtlinienonjekten die Gruppen oder Benutzer ausgegeben, auf welche die GPO angewendet bzw. gefiltert wird (siehe Screenshot) .

GPO-Sicherheitsfilterung

Ausgabe ist eine kommaseparierte Textdatei.

Aufruf:

GPOPermAsCSV.ps1

–> Ausgabe erfolgt nach C:\Temp\GPOPerm.csv

mit Parameter eigener Filename möglich:

GPOPermAsCSV.ps1 -Outputfile C:\temp\GPOfilteredGroups.csv

Skript: GPOPermAsCSV.ps1

#Beim Aufruf den Pfad für Output abfragen, Standard ist C:\Temp\GPOPerm.csv
param (
    [Parameter(HelpMessage='Bitte Pfad und Dateiname für Output angeben (z. B. C:\Ordner1\Datei1.csv)')]
    $Outputfile = 'C:\Temp\GPOPerm.csv'
      )

#Prüfen ob Datei bereits vorhanden, wenn ja, dann löschen
if ((Test-Path $Outputfile) -eq $true) {del $Outputfile}

#Variablen initialisieren
$i=0
$a=0
$GPOs = @()
$GPOs += 'Name'
$output =@()
$outputneu = @()

#Alle GPOs mit deren Eigenschaften auslesen
$AllGPOs = Get-GPO -All

#Anzahl GPOs messen
$GPOcount = $AllGPOs.Count

#GPO-Namen in Variable $GPOs schreiben
for ($a; $a -le $GPOcount; $a++) {$GPOs += ,$AllGPOs[$a].DisplayName}

#Da $GPOs[0] den Wert 'Name' hat, ab 1 beginnen
$a = 1

#Spaltenüberschrift schreiben
$Spaltenüberschrift = "GPO-Name,AD-Objekt,Berechtigung,vererbt"
$Spaltenüberschrift >> $Outputfile

#Für jede GPO die Permissions auslesen
for ($a; $a -le $GPOcount; $a++)  {
                        $output = Get-GPPermissions -All -Name $GPOs[$a]
                        $Anzahl = $output.Count
                        for ($i; $i -le $Anzahl; $i++)
                        {
#und wenn das GpoApply (Gruppenrichtlinien anwenden) auftaucht, die berechtigte(n) Gruppe(n) rausschreiben
                         if ($output.Permission[$i] -eq "GpoApply")
                         {
#Zuweisen der einzelnen Werte in eigene Variablen um am Ende einen String zu erhalten
                            $GPOName = $GPOs[$a]
                            $ADObject = $output.Trustee[$i].Name
                            $Permission = $output.Permission[$i]
                            $vererbt = $output.Inherited[$i]
                            $GPORight = [string]::Join(",", $GPOName, $ADObject, $Permission, $vererbt)
                            $GPORight >> $Outputfile
                         }
                        }
                        $i = 0
                     }
Write-Host "Done"

Viel Spaß!

Advertisements

DPM 2012 (R2) – Bänder der letzten Tagessicherung als Mail versenden

Hallo,

aufgrund einer Anforderung sollte eine Möglichkeit gefunden werden, alle Bänder der Sicherungen der letzten Nacht in einer separaten E-Mail auszugeben. Die Bänder sollen am Tag nach der Sicherung ausgelagert werden. Dies habe ich per Powershell-Skript realisiert. Das Skript wurde als geplanter Task eingerichet. Dafür hatte ich zunächst im DPM geschaut, wann die letzte Sicherung fertig ist und einen Puffer aufgeschlagen. Hier möchte ich das Skript zur Verfügung stellen.

Anmerkungen:
Funktioniert für DPM 2012, DPM 2012 R2 auf Windows Server 2012

$heute = Get-Date $date1 -Format "dd.MM.yyyy HH:mm:ss"

$Gestern = (Get-Date).AddDays(-1)
$Gestern = Get-Date $Gestern -Format "dd.MM.yyyy HH:mm:ss"

$Tapesauslagern = new-object system.collections.arraylist

$DPMLib = Get-DPMLibrary -DPMServerName "YOURDPMSERVER"
$Tapes = Get-Tape -DPMLibrary $DPMLib | Select CreationDate, Barcode

foreach ($_ in $Tapes)
{
    if ($_.Barcode -like "CLN*")
    {
        $a > $null
    }
    else
    {
        $Zeitstempel = Get-Date $_.CreationDate -Format "dd.MM.yyyy HH:mm:ss"
        if ($gestern -lt $Zeitstempel -and $Zeitstempel -lt $heute)
        {
            $Tapesauslagern = $Tapesauslagern + $_.Barcode
            Write-Host $_.CreationDate
        }
    }
}
$Mailtext = "DPM Bandsicherung erfolgt. Bitte folgende Bänder auslagern:" + $Tapesauslagern
$PSEmailServer = "YOURMAILSERVER"
Send-MailMessage -To "RCPT@domain.com" -From "DPMBACKUP@domain.local" -Subject "DPM Bandsicherung erfolgt" -Body $Mailtext
Disconnect-DPMServer

Kommentare sind Willkommen!

Tschüß!

DPM 2012 (R2) – abgelaufene Bänder jeden Tag als frei markieren

Hallo,

ich habe leider noch nicht ganz verstanden, wie abgelaufene Bänder automatisch als frei markiert werden. Dies sört mich und führt bei einer kleinen Tapelibrary schon zu Problemen. Ich habe daher ein kleines Powershell Skript geschrieben, welches die Tapes prüft und auf „frei“ setzt und dieses anschließend als geplanten Task eingerichtet. Ich habe den Taks auf 18 Uhr gelegt. Damit wird sichergestellt, daß immer freie Bänder für die nächsten Bandjobs zur Verfügung stehen. Ist vielleicht nicht die sauberste Lösung, aber praktikabel.

Anmerkungen:
Funktioniert für DPM 2012, DPM 2012 R2 auf Windows Server 2012
manueller Aufruf über DPM-Verwaltungsshell auch für DPM 2010 auf Windows Server 2008 R2 (ForceFree-Tape.ps1 muß erst auf dem Server abgelegt werden!)

$DPMLib = Get-DPMLibrary -DPMServerName "YOURDPMSERVER"
Get-Tape -DPMLibrary $DPMLib -Verbose | foreach { if ($_.DataSetState -eq "recyclable") {& ForceFree-Tape.ps1 -DPMServerName YOURDPMSERVER.domain.local -LibraryName "TAPE LIBRARY NAME FROM DPM TAPEVIEW" -TapeLocationList $_.Location}}
Disconnect-DPMServer

Kommentare sind Willkommen.

Tschüß!