“Nur ein fauler Admin ist ein guter Admin.” Ganz getreu diesem Mottos habe ich die Installation von Clients, bei uns im Unternehmen, weitestgehend automatisiert. Nach der Installation von Windows 10 über unseren WDS Server wird dieses Skript nach der ersten Anmeldung automatisch ausgeführt.

Funktionen des Skripts:

  • Ändern des Computernames (Format: w10$username)
    • Zusätzliche Prüfung ob Computerkonto schon im AD existiert.
  • Installation von Druckern
  • Installation von Software mithilfe von Chocolatey

Skriptbereiche erklärt

Zu Beginn möchte ich gerne das Skript in Teilbereiche aufbrechen um diese dann zu erklären.

Skript als Administrator ausführen

Der folgende Block prüft ob das Skript als Administrator ausgeführt wurde, falls nein wird das Skript erneut als Administrator ausgeführt.

param([switch]$Elevated)

function Test-Admin {
  $currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
  $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}

if ((Test-Admin) -eq $false)  {
    if ($elevated) 
    {
        # tried to elevate, did not work, aborting
    } 
    else {
        Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
}

exit
}

Computer umbenennen

Nun wird nach dem Nutzer gefragt, welcher diesen PC nutzen soll. Dieser wird abgefragt, da wir den Computernamen dementsprechend abändern möchten.

Daraufhin wird geprüft ob dieses Computerkonto bereits im Active Directory existiert. Falls ja: erfolgt eine Fehlermeldung und man landet in einer do{}-Schleife, in welcher solange geprüft wird, ob der neu eingegebene Computername bereits existiert.

# Ask for username
$username = Read-Host -Prompt 'Welcher User nutzt diesen PC?'

$computername = "w10$username"

write-host "#################################" -ForegroundColor Yellow
write-host "Suche nach $computername im AD" -ForegroundColor Yellow
write-host "#################################" -ForegroundColor Yellow

$searcher = [adsisearcher] "(cn=$computername)"
$rtn = $searcher.FindAll()

if($rtn.count -eq 0) {
    Write-Host "Computerkonto $computername wurde nicht im AD gefunden."
    Write-Host "Computer wird in $computername umbenannt."
} else {
    Write-Host "Computerkonto bereits im AD gefunden." -ForegroundColor Red
    $count = 1

    do {
        $computername = Read-Host -Prompt 'Welcher Computername soll genutzt werden?'
        $searcher = [adsisearcher] "(cn=$computername)"
        $rtn = $searcher.FindAll()
        $count = $rtn.count
        if($count -gt 0) {Write-Host "Computerkonto bereits im AD gefunden." -ForegroundColor Red}
    } until($count -eq 0)

    Write-Host "$computername wurde nicht im AD gefunden."
    Write-Host "Computer wird in $computername umbenannt."
}

Write-Host '#########################' -ForeGroundColor Gray

Drucker installieren

Da wir einige Kollegen haben die kaum in unserem Office sind, möchte ich gerne selbst entscheiden ob unsere Drucker installiert werden. Dies funktioniert hervorragend mit der switch-Anweisung.

Write-host "Drucker installieren? (Enter zum überspringen.)" -ForegroundColor Yellow 
    $Readhost = Read-Host " ( y / n ) " 
    Switch ($ReadHost) 
     { 
       Y {
            Write-Host "Installation der Drucker wird ausgeführt."
            Add-Printer -ConnectionName "\\Server\Druckername"
       } 
       N {} 
       Default {} 
     } 

Software installieren

Jetzt wirds spannend, aber eigentlich auch ziemlich unspektakulär. Die ersten Zeilen installieren Chocolatey. Nach der Installation können wir mit dem Befehl “choco install <software>” Software, ohne Benutzerinteraktion, installieren. Unterstützte Pakete können hier gesucht werden: https://chocolatey.org/packages

Am Ende wird der Rechnername geändert und der Rechner einmal neugestartet. Damit ist die Initialinstallation vorerst abgeschlossen.

Write-Host "##############################" -ForegroundColor Gray
Write-Host "Installing Software now..."
Write-Host "##############################" -ForeGroundColor Gray

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
choco feature enable -n allowGlobalConfirmation

choco install 7zip.install adobereader cdburnerxp googlechrome firefox greenshot jre8 keepassxc notepadplusplus.install pdf24 teamviewer mattermost-desktop synologydrive



Rename-Computer –Newname $computername
Write-Host "Restarting.. "
Restart-Computer