VW Golf 3

Dies ist bis jetzt das einzige Modell, das ich nicht für mich, sondern als Geschenk gebaut habe. Die Nummernschilder sind angepasst, sodass sie dem Original entsprechen. Auch sonst habe ich versucht das Modell so gut es geht dem Original anzugleichen. Bei den Felgen musste ich leider aufs Standardmodell zurückgreifen, da ich die entsprechenden Alufelgen vom Original im Modellbausortiment nicht gefunden habe.

Audi A4 DTM

Der Audi A4, der von Timo Scheider in der DTM Saison 2009 gefahren wurde, war nach langer Zeit wiedermal ein nicht-militärisches Modell. Überhaupt darauf gekommen bin ich, weil mich jemand gefragt hat, wieso ich überwiegend militärische Modelle baue. Einen wirklichen Grund gibt es wohl nicht, aus meiner Sicht machen diese einfach mehr her. Aber als ich dann den Bausatz von Revell sah, musste ich zugeben, so ein Auto vollgeklebt mir “Werbung” wirkt auch noch interessant.

Admiral Ushakov

Bei der Admiral Ushakov (ehemals Kirov) handelt es sich um eines von vier Schiffen der gleichnamigen Klasse. Sie sind mit 252 Metern Länge, nach den Flugzeug- und Hubschrauberträger, die grössten Militärschiffe. Eingestuft werden sie als Schlachtkreuzer bzw. Lenkwaffenkreuzer. Anders als andere heutige Schiffe gleicher oder ähnlicher Typen ist die Kirov-Klasse atomgetrieben. Die US Navy hatte zwar auch Kreuzer mit Atomantrieb, jedoch ist von diesen keiner mehr im Einsatz.Zwei der vier gebauten Schiffe der Kirov-Klasse sind aktuell stillgelegt. Ein weiteres, die Admiral Nakhimov (ehemals Kalinin), wird einer Modernisierung unterzogen und soll 2015 wieder in Dienst gestellt werden. Das einzige aktive Schiff der Klasse ist die Pjotr Weliki (ehemals Yuri Andropov), die als Flaggschiff der Nordflotte dient.

Die Kirov-Klasse ist mir vor allem durch die Rumpfform und den strukturierten, aufgeräumten Aufbau aufgefallen. Als Beispiel wird bei der russischen Slava-Klasse das Deck von 16 Raketen­abschussvorrichtungen dominiert. Bei der Kirov-Klasse sind alle Abschussvorrichtungen vertikal ins Deck und die Aufbauten eingelassen.

Die Suche nach einem Modell dieses Schiffes war nicht ganz einfach, da es, bei den in Europa weit verbreiteten Herstellern, nicht im Sortiment ist. Der Modellshop aus Basel hatte den Bausatz der Admiral Ushakov vom Hersteller Trumpeter im Sortiment. Mit ca. 150 Franken definitiv einer der teureren Bausätze die ich bis jetzt gekauft habe. Der Kauf hat sich aus meiner Sicht gelohnt und das fertige Modell sieht in der Vitrine richtig gut aus, auch wenn es nicht perfekt geworden ist. Aber für diesen Fall gibt es immer noch drei weitere Schiffe dieser Klasse…

Rename Files

Ursprünglich als Test gedacht, habe ich es zum Umbenennen meiner Mediensammlung eingesetzt. Ein Script zum Auslesen und die Daten in eine CSV-Datei schreiben, ein Script zum Einlesen der geänderten CSV-Datei und umbenennen der Dateien. Dazwischen Excel zur Aufbereitung der Daten. Mit grosser Wahrscheinlichkeit wäre es noch einfacher, schöner und auch effizienter möglich gewesen.
Dateinamen auslesen und aufbereiten

Zeile 4: Es werden alle Dateien (Ordner werden ignoriert) rekursiv aus dem Verzeichnis ausgelesen, das in Zeile 1 gesetzt wurde.
Zeile 15-17: Der Dateinamen wird von der Endung befreit und bei dem Zeichensatz ” – ” getrennt. Die Teilstücke werden im Array $NameParts gespeichert und von überflüssigen Leerzeichen befreit.
Zeile 21-28: Der Array $NameParts wird ausgelesen und in die Eigenschaften der Variable $datacombo geschrieben. Mit Invoke-Expression kann ein Befehl in einer Variable ausgeführt werden, somit besteht die Möglichkeit ein Befehl in Laufzeit zusammen zu setzen.

PowerShell
$FilePath = "Pfad zum Auslesen"

$DataCollection = @()
$Files = Get-ChildItem -Path $FilePath -Recurse | where { !$_.PSIsContainer }

ForEach ($File in $Files) {
    $datacombo = "" | Select "Path", "Size", "NewName", "NP1","NP2","NP3","NP4","NP5","Resolution","Extension"
    $NameParts = @()

    $datacombo.Path = $File.Fullname
    $Size = $File.Length
    $datacombo.Size = $Size/1MB
    $datacombo.Extension = $File.Extension

    $Name = $File.Name -Replace($File.Extension,"")
    $NameParts = $Name -Split" - "
    $NameParts = $NameParts | %{$_.Trim()}

    $i = 1

    ForEach ($Part in $NameParts) {

        If ($Part -eq "720p" -or $Part -eq "1080p" -or $Part -eq "HD") {
            $datacombo.Resolution = $Part
        } Else {
            $temp = '$datacombo.NP'+$i+'=$Part'
            Invoke-Expression $temp
        }
        $i++
    }

    $DataCollection += $datacombo

}

$DataCollection | Export-Csv -Path "Pfad für CSV-Datei" -Encoding "Unicode" -NoTypeInformation</pre>
 

<strong>Dateien umbenennen</strong>

Zeile 3: Um allfälligen Codierungsfehlern aus dem Weg zu gehen, wird der Inhalt der Datei ausgelesen und als Unicode in eine temporäre Datei geschrieben.
<pre class="lang:ps decode:true toolbar:1 scroll:true " title="Dateien umbenennen">$FilePath = "Pfad zur CSV-Datei"

Get-Content $FilePath | Out-File .temp.csv -Encoding Unicode
sleep(5)
$Import = Import-Csv -Path .temp.csv -Delimiter ";"
Remove-Item -Path .temp.csv

$Import | ForEach-Object { 
    $File = Get-ItemProperty -Path $_.Path
    If ($_.NewName -ne $File.Name) {
        Rename-Item -Path $_.Path -NewName $_.NewName
    }
}

Create Homefolder

Ein einfaches Script zum Erstellen von Homefoldern mit den entsprechenden Rechten für die Folder Redirection (User als Owner). Anstatt es eigenständig zu nutzen, kann es auch in ein Script zur Benutzererstellung implementiert werden.
Zeile 4: Hier wird die Quelle der Benutzernamen (SamAccountName) angegeben, in diesem Fall ein Import einer CSV-Datei.
Zeile 9-10: Überprüfung ob bereits ein Ordner mit dem Namen vorhanden ist.

PowerShell
$Path = "Pfad zur CSV-Datei"
$HomeFolderRoot = "Share aller Homefolder"

Import-Csv -Path $Path |  %{
    $username = $_.SamAccountName
    $HomeFolder = $HomeFolderRoot + $username
    $NTAccount = "Domain$username"

    $check = Test-Path -Path $HomeFolder -PathType Container
    If ($check -eq $false){
        New-Item $HomeFolder -Type Directory &gt; null
        $acl = Get-Acl $HomeFolder
        $acl.SetOwner([System.Security.Principal.NTAccount] "$NTAccount")
        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$NTAccount","FullControl","ContainerInherit, ObjectInherit", "None", "Allow")
        $acl.AddAccessRule($rule)
        Set-Acl $HomeFolder $acl
        echo "Homefolder created for User $username"
    } else {
        echo "Homefolder already exists for User $username"
    }
}

Delete Domain Users

Am Arbeitsplatz wurden beim Entfernen von Domänen Benutzern oft nur die AD Accounts gelöscht. Die Mailkonten werden so zwar mitgelöscht, die Benutzerordner (Profil und Home) jedoch nicht. So fielen je länger je mehr Daten an, die zu keinem Benutzer mehr gehörten. Aus diesem Grund entstand das Script, das alle AD Accounts in einer OU löscht und auch die Benutzerordner berücksichtigt.
Da die Ordnerberechtigungen nicht immer ein direktes Löschen zuliessen, setzt das Script vor dem Löschen bei allen Ordnern den Owner auf die Lokale Administratorgruppe und fügt diese mit Full Control den Berechtigungen hinzu. Für das Anpassen der Berechtigungen kommt das Programm SetACL zum Einsatz. Als weiteres kommt ActiveRoles Management Shell for Active Directory von Quest zum Einsatz.

In den Zeilen mit einem Aufruf des Programms SetACL muss jeweils der Pfad und die Benutzergruppe angepasst werden.
Profil und Profil.V2 da wir lange Zeit eine gemischte Umgebung mit Windows XP und Windows 7 hatten.

PowerShell
# Variablen definieren
$UserColl = @()
$acllog = ""
$pslog = ""
$DeletedFolders = "Pfad zum Log für gelöschte Ordner"
$SetACLLog = "Pfad zum Log von SetACL"
$ErrorLog = "Pfad zum Errorlog"
$SearchRoot = "OU mit AD Accounts die gelöscht werden sollen"

# User in OU auslesen
$Users = Get-QADUser -SearchRoot $SearchRoot -SearchScope OneLevel

# Vorgang für jeden User durchführen
ForEach ($User in $Users) {

    $HomeDir = $User.HomeDirectory
    $ProfileDir = $User.ProfilePath
    $ProfileV2 = $User.ProfilePath + ".V2"
    $DistinguishedName = $User.DN
    $Username = $User.SamAccountName

    # Falls ein .V2 Profil vorhanden ist, werden Benutzer und Rechte angepasst und der Ordner gelöscht
    if (Test-Path -Path $ProfileV2) {
        SetACL.exe -on "$ProfileV2" -ot file -actn setowner -ownr "n:LOCALAdministrators" -rec cont_obj -log $SetACLLog -silent
        SetACL.exe -on "$ProfileV2" -ot file -actn ace -ace "n:LOCALAdministrators;p:full" -rec cont_obj -log $SetACLLog -silent

        Try {     
            cmd /c "rmdir /S /Q $ProfileV2"
            $ProfileV2 | Add-Content $DeletedFolders
        } Catch {
            "ERROR beim Entfernen $filename: $_.ExeptionMessage" | Add-Content $ErrorLog
            Write-Output "ProfilV2 von $Username konnte nicht gelöscht werden"
        }
    }

    # Falls ein Profil vorhanden ist, werden Benutzer und Rechte angepasst und der Ordner gelöscht
    if (Test-Path -Path $ProfileDir) {
        SetACL.exe -on "$ProfileDir" -ot file -actn setowner -ownr "n:LOCALAdministrators" -rec cont_obj -log $SetACLLog -silent 
	SetACL.exe -on "$ProfileDir" -ot file -actn ace -ace "n:LOCALAdministrators;p:full" -rec cont_obj -log $SetACLLog -silent

        Try {     
            cmd /c "rmdir /S /Q $ProfileDir"
            $ProfileDir | Add-Content $DeletedFolders
        } Catch {
            "ERROR beim Entfernen $filename: $_.Exception.Message" | Add-Content $ErrorLog
            Write-Output "Profil von $Username konnte nicht gelöscht werden"
        }
    }

    # Falls ein Home Ordner vorhanden ist, werden Benutzer und Rechte angepasst und er Ordner gelöscht
    if (Test-Path -Path $HomeDir) {
        SetACL.exe -on "$HomeDir" -ot file -actn setowner -ownr "n:LOCALAdministrators" -rec cont_obj -log $SetACLLog -silent
        SetACL.exe -on "$HomeDir" -ot file -actn ace -ace "n:LOCALAdministrators;p:full" -rec cont_obj -log $SetACLLog -silent

        Try {     
            cmd /c "rmdir /S /Q $HomeDir"
            $HomeDir | Add-Content $DeletedFolders
        } Catch {
            "ERROR beim Entfernen $filename: $_.Exception.Message" | Add-Content $ErrorLog
            Write-Output "Home von $Username konnte nicht gelöscht werden"
        }  
    }

    Try {
        # Löschen des AD Benutzerobjekts
        Remove-QADObject -Identity $DistinguishedName -Force -DeleteTree 
    } Catch {
        "ERROR beim Entfernen: $_.Exception.Message" | Add-Content $ErrorLog
        Write-Output "Benutzerkonto von $Username konnte nicht gelöscht werden"
    }   
}