PowerShell Techguy.at

Orchestrator Ordnerstruktur im Filesystem erstellen

PowerShell

Heute stelle ich euch mein aktuelles Lieblingsscript vor. Einerseits weil ich schon lange davon geredet habe das ich so was benötige, andererseits weil ich ein bisschen stolz bin es ganz alleine geschrieben zu haben.

Es geht darum die Ordnerstruktur aus dem Runbook Designer im Filesystem abzubilden.

Warum mir das so wichtig ist und warum euch diese Skript dabei helfen kann euren SCO zu bereinigen, zeige ich euch in diesem Artikel.

Warum dieses Script?

Ich halte mich doch sehr an die Regeln oder Best Practice Empfehlungen von Microsoft und erstelle pro Ordner nur ein Runbook, somit besitze ich in meiner SCO Umgebung sehr viele Ordner.

Hier ein Beispiel einer aktuellen Kundenumgebung die sich gerade im Aufbau befindet.

image

Der zweite Punkt, warum ich diese Script benötige ist folgender:

Es existiert bei jedem Kunden ein “SCO Working Dir” in dem die aktuellen Powershell Files abgelegt, eventuelle Text Logs gespeichert und die Runbooks von Zeit zu Zeit exportiert werden. Die soll alles in einem zentralen Ordner liegen.

Bei der steigenden Zahl von Runbooks beim Kunden wird das Verzeichnis sehr schnell unübersichtlich wenn alles im Root abgelegt wird, daher erstelle ich  die selbe File Struktur auch in meinem “SCO Working Dir” und das Log File auch im richtigen Ordner abzulegen, passend um Runbook Pfad im Designer.

Diese Ordner manuell zu pflegen ist natürlich etwas mühsam, daher meine Idee ein Script zu schreiben, welches die Ordnerstruktur aus der SCO Datenbank ausliest und diese Struktur im Files System, unter meinem “SCO Working Dir” erstellt.

Das Script

Zu Beginn setzen wir ein paar Variablen.

$workingdir = Unter diesem Verzeichnis wird die Struktur erstellt
$SCO_DB = Name der SCO Datenbank
$SCO_DB_Server = Name des SQL Servers mit der SCO DB
$Depth = Die Ordner Tiefe die erstell werden soll, ist der ganze Pfad “c:\Work\1-Folder\1.2-Folder\1.2.3-Folder\1.2.3.4-Folder\” und die Variable ist auf 3 gestellt, werden nur die ersten 3 Ordner erstellt, also “c:\Work\1-Folder\”

#Variables
$workingdir=”E:\_SCOworkingDir”
$SCO_DB=”Orchestrator”
$SCO_DB_Server=”svatrisco1″
$Depth=”5″

Danach starten wir eine Abfrage auf die SQL DB um die Folder auszulesen

#Settings
$query = @”
use [$SCO_DB]
select UniqueID, Name, ParentID from folders where deleted = ‘0’ order by name desc
“@
$connection = new-object system.data.sqlclient.sqlconnection( “Data Source=$SCO_DB_Server;Initial Catalog=$SCO_DB;Integrated Security=SSPI;”)
$adapter = new-object system.data.sqlclient.sqldataadapter ($query, $connection)
$table = new-object system.data.datatable
$adapter.Fill($table) | out-null
$TableArray = @($table)

Mit diesen Werten gehen wir nun durch ein paar Funktionen und erstellen die Ordner unter dem “$WorkingDir”

#Functions
Function Get-Parent ($ID) {
foreach ($Entry in $TableArray) {
if ($Entry.UniqueID -eq $ID) {
$Value=$Entry.name
break
} else {
$value=”Exit”
}
}
return $Value
}

Function Get-ID ($ID) {
foreach ($Entry in $TableArray) {
if ($Entry.UniqueID -eq $ID) {
$Value=$Entry.ParentID
break
} else {
$value=”Exit”
}
}
return $Value
}

Function Split-Path ($Path) {
$Count=0
$Index=0
$Length=$Path.Split(“\”).Length-1
while ($count -lt $Depth) {
if ($count -lt $Length){
$index++
$Index=$Path.IndexOf(“\”,$index)
}
$count++
}
return $Path.substring(0,$Index)
}

Function Create-Path ($Path) {

if ($Path -match “Policies”) {
$Path=$Path+”\”
$Path=$PAth.Replace(“Policies”,”$workingdir”)

$PathNew=Split-Path $Path
if (!(Test-Path -Path $PathNew)) {
Write-Host $PathNew
New-Item -Path $Path -Type Directory
}
}
}

#Magic
foreach ($Entry in $TableArray) {
$Path=$Entry.name
$OldPath=$null
$Exit=0
$ID=$Entry.ParentID
while ($Exit -eq 0) {
$ParentName=Get-Parent $ID
if ($ParentName -eq “Exit”) {
$Exit=1
Create-Path $Path
} else {
$OldPath=$Path
$Path=$Parentname+”\”+$OldPath
$OldID=$ID.Guid
$ID = Get-ID $ID
}
}
}

 

Download auf der TechNet Gallery: http://gallery.technet.microsoft.com/Create-SCO-Folders-in-9cc05cdb

Solltet ihr Fragen, Wünsche oder Probleme mit dem Script haben, schreibt mir ein Kommentar

Alle meine TechNet Gallery Downloads findet ihr hier: 1jrYQoA

BITTE BEWERTET MEINE DOWNLOADS IN DER TECHNET GALLERY UND SAGT MIR WAS IHR EUCH VON DER NÄCHSTEN VERSION WÜNSCHT.

Michael Seidl aka Techguy

Leave a Comment

Your email address will not be published. Required fields are marked *

*