Powershell: Active Directory mit Powershell – Einfach und Wirkungsvoll

Active Directory (AD) kann sehr einfach mit Powershell verwaltet werden.

Ein paar einfach Kniffe gibts hier:

Alle AD Objekte ausgeben, die Computer-Objekte sind

Get-ADComputer –Filter {Name –Like "*"}

Alle AD Computer-Objekte die seit 60 Tagen inaktiv sind

Search-ADaccount -AccountInactive -Timespan 60 -ComputersOnly

oder etwas dynamischer um gleich in einer Funktion weiter zu verwenden

$days = 60
$lastLogon = (get-date).adddays(-$days).ToFileTime()
Get-ADComputer -filter {lastLogonTimestamp -gt $lastLogon}

Deaktivierte Computer-Objekte löschen (Achtung! Vorsicht beim Löschen!)

Search-ADAccount -AccountDisabled -ComputersOnly | 
    Sort-Object | 
    Remove-ADComputer

Deaktivierte Computer-Objekte einer spezifischen OU löschen (Achtung! Vorsicht beim Löschen!)

Search-ADAccount -AccountDisabled -Searchbase "OU=OU-Name,DC=Domain,DC=Com" -ComputersOnly | 
    Sort-Object | 
    Remove-ADComputer

 

Weitere CMDlets werde ich noch hinzufügen.

Powershell: Funktion erstellen

Funktionen sind leicht wiederverwertbar und empfehlen sich sehr für Wiederverwendbarkeit.

Wichtig ist eine saubere Dokumentation, Kommentierung und Verwendung von Parametern.

Function Run-Function
{
<#
.SYNOPSIS
function information
.DESCRIPTION
function description
.PARAMETER $Parameter
parameter description
.EXAMPLE
Run-Function -PARAMETER 'Value'
#>
[CmdletBinding()]
Param
(
    [Parameter(Mandatory=$true)]
    [string]$Parameter1,
    [Parameter(Mandatory=$false)]
    [string]$Parameter2,
)
    
#Function Algorithm 

   
}

SQL Abfrage per Powershell

Sehr nützliche Funktion um Queries auf einer SQL Datenbank laufen zu lassen:

function Invoke-SQL 
{
    param(
    [string] $dataSource = 'Server-Name',
    [string] $database = "Database-Name",
    [string] $sqlCommand = $(throw "Please specify a query.")
        )
                                          
    $connectionString = "Data Source=$dataSource; " + 
                    "Integrated Security=SSPI; " + 
                    "Initial Catalog=$database"
                                                                      
    $connection = new-object system.data.SqlClient.SQLConnection($connectionString)
    $command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection)
    $connection.Open()
                                                                                  
    $adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
    $dataset = New-Object System.Data.DataSet
    $adapter.Fill($dataSet) | Out-Null
                                                                                              
    $connection.Close()
    $dataSet.Tables
                                                                                                      
}