Kategorieauswahl

PowerShell

PowerShell Scripting, Trainer, Profi, Spezialist, Experte, Tipp, Schulung, Training, Kurs

Windows Server 2008 Core mit GUI

Windows Server 2008 Core als auch die R2 Version enthalten offensichtlich doch grafische Gestaltungselemente. Als Beweis tippen Sie doch einmal notepad, regedit oder timedate.cpl ein und drücken Enter/Return. Wie sagt man doch immer so schön: Der Laie staunt, der Fachmann wundert sich ;-).

Nun, also wenn Grafik geht, warum dann mühevoll auf der Kommandozeile z.B. die IP- und Firewallkonfiguration vornehmen?

Für Windows Server 2008 gibt es den Core Configurator 1.1 und für den R2 den Core Configurator 2.0. Kostenlos runterladen, auf CD brennen und Sie können von nun an alles grafisch einstellen.

Falls Sie Bedenken wegen der Sicherheit haben…es liegt jeweils im Quellcode vor, bzw. der Core Configurator 2.0 besteht „nur“ aus einer Sammlung von Powershellscripten, die Sie auch selbst schreiben könnten und in der Version 1.1 sind es vbs-Dateien also VisualBasicScript.

Da es auf Server 2008 keine Powershellunterstützung gibt ist Core Configurator 1.1 als ausführbares Programm auf der CD. Damit Sie die Powershellscripte vom Core Configurator 2.0 benutzen können, müssen Sie auch beim R2 erst die Powershell und das .NET Framework (gibt’s auch nicht auf dem 2008 – ohne R2) als Feature nachrüsten. Das geht wie folgt:

Installieren Sie mit ocsetup „NetFx2-ServerCore“ erst das .NET-Framework und danach mit ocsetup „MicrosoftWindowsPowerShell“ die Powershell. Ausnahmsweise bitte einmal die Groß-/Kleinschreibung beachten!

Nun können Sie mit dem Befehl start c:\windows\system32\powershell\v1.0\powershell eine Powershell Kommandozeile starten. Ohne „start“ würde die aktuelle Kommandozeile zur Powershell.

Auf der Powershell müssen Sie zunächst den Befehl set-executionpolicy unrestricted eingeben, damit die Scriptausführung zugelassen wird. Wenn Sie Ahnung haben, können Sie natürlich auch eine andere executionpolicy wählen. Allerdings kann man die sowieso jederzeit umstellen – sogar ohne Admin zu sein! So nun können Sie die Powershellscripte von der CD aufrufen um all Ihre Einstellungen (Computername, Aktivierung, IP- u. Firewallkonfiguration, Benutzerverwaltung, etc…) grafisch vorzunehmen.

Powershellbefehle bejahen lassen

Die meisten Powershellbefehle unterstützen den Schalter -confirm:$false damit werden Rückfragen automatisch mit „Ja“ beantwortet. Wenn man also mit remove-item * eine ganze Sammlung löschen möchte kann es schon ganz schön nerven wenn das 100 Objekte sind die alles bestätigt werden müssen. Einfach remove-item * -confirm:$false und schwupps ist alles weg. Ein -confirm:$true können Sie sich sparen, da dies die Standardvorgabe ist.

Ein Testlauf mit dem Schalter -whatif (erst mal simulieren – nicht machen) wäre u. U. hilfreich ;-).

Speicher sparen in der Powershell

Die Powershell von Windows startet für jedes eingegebene Kommando einen eigenen Thread, was jeweils extra Speicher kostet, aber auch für etwas mehr Stabilität und Skalierbarkeit sorgt. Das ist also eigentlich auch gut so. Auf Systemen wo der RAM Speicher aber knapp ist, will man aufwendige Scripts vielleicht etwas RAM schonender ausführen. Dazu sollten Sie in die erste Zeile Ihres ps1 Scriptes folgenden Befehl schreiben:
$Host.Runspace.ThreadOptions="ReuseThread"

Selbstverständlich können Sie den Befehl auch direkt in der Powershell eintippen, um bei nachfolgenden Befehlen immer wieder denselben Thread zu nutzen.

Eine weitere Möglichkeit den RAM-Speicher zu schonen ist nicht mehr benötigte Variablen wieder frei zugeben. Hat man also Beispielsweise eine Variable
$Variable="blabla"
erstellt und benötigt diese nicht mehr, dann löscht man nur den Inhalt der Variablen, wenn Sie $Variable="" eintragen. Der Speicher und die Variable an sich bleiben aber weiterhin erhalten. Erst ein rv Variable (dieses Mal ohne $ Zeichen!) gibt den Namen der Variablen und den Speicherplatz wieder frei.

/dev/null unter Windows

Wenn Sie mit der Windows Eingabeaufforderung die Ausgabe in den „Papierkorb“ umleiten möchten geht das wie folgt:

ping host >nul

In einem Batch-Script wird das genauso gemacht bei einem Doskey-Makro hingegen empfiehlt sich diese Schreibweise:

doskey wait=ping localhost -n $1 ^>nul

Tippt man nun „wait 5“ ein, wird 5 x hintereinander localhost angepingt, ohne das die Ausgabe des Ping am Bildschirm erscheint.

Bei der Powershell gibt es eine Variable namens $null die denselben Zweck erfüllt.

Dateien mit einem Präfix versehen

Um Dateien noch einen Text vor den Namen zu stellen bedarf es ein paar Tricks, denn „ren *.txt Präfix*.txt“ funktioniert nicht. Ein kleines Powershellscript löst das Problem:

Param (
 [String]$Prefix,
 [String[]]$Pfad
)
$Dateiliste=ls $Pfad
foreach ($Eintrag in $Dateiliste) {
 rename-item $Eintrag.Fullname ($Prefix+$Eintrag.Name)
}
Das Script bsw. unter dem Namen Prefdran.ps1 abspeichern und dann kann man alle Dateien in einem Ordner durch diesen Aufruf:

./Prefdran.ps1 „Was vor den Namen soll“ c:\Mein\Ordner\Pfad\*.Dateityp

umbenennen lassen.

Powershell Script mit Adminberechtigungen ausführen

Wie sich ein Powershellscript Adminberechtigungen „besorgt“:

$id=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$principal=New-Object System.Security.Principal.WindowsPrincipal($id)
if(!$principal.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)) {
 $powershell=[System.Diagnostics.Process]::GetCurrentProcess()
 $psi=New-Object System.Diagnostics.ProcessStartInfo $powershell.Path
 $script=$MyInvocation.MyCommand.Path
 $prm=$script
 foreach($a in $args) {
  $prm+=' '+$a
 }
 $psi.Arguments=$prm
 $psi.Verb="runas"
 [System.Diagnostics.Process]::Start($psi) | Out-Null
 return;
}
# Ab hier folgt das eigentlich Script das Adminrechte braucht