Zum Hauptinhalt springen

Hilfreiche Statische Methoden

Hilfreiche statische Methoden

Hier noch ein paar Beispiele für hilfreiche statische Methoden

Umgebungsvariablen global setzen mit System.Environment

Wenn Sie in Powershell Umgebungsvariablen setzen wollen, können Sie das über das Powershell-Laufwerk ENV: machen. Alle Änderungen, die an diesem Laufwerk durchgeführt werden, beziehen sich aber nur auf den Powershell-Prozess und sind nach dem Schließen der Powershell wieder verschwunden. Mit der statischen Methode SetEnvironmentVariable() aus der System.Environment-Klasse können die Umgebungsvariablen aber auch Systemweit gesetzt werden:

[System.Environment]::SetEnvironmentVariable('Test','Computervariable','Machine') 
[System.Environment]::SetEnvironmentVariable('Demo','Uservariable','User')

Der erste Aufruf erstellt eine Umgebungsvariable "Test" mit dem Inhalt "Computervariable" auf Computerebene, also für alle Benutzer, während der zweite Aufruf eine Benutzervariable mit dem Namen "Demo" und dem Inhalt "Uservariable" erzeugt.

Da sich statische Methoden bis auf die beiden Doppelpunkte beim Aufruf wie Methoden verhalten, kön-nen Sie sich die Überladungen durch Aufrufen der Methode ohne die runden Klammern anzeigen lassen:

[system.Environment]::SetEnvironmentvariable

> OverloadDefinitions
-----------------------
> static void SetEnvironmentVariable(string variable, string value) 
> static void SetEnvironmentVariable(string variable, string value, System.EnvironmentVariableTarget target)

Die Klasse System.Environment hat aber noch mehr spannende Eigenschaften und Methoden:

[system.Environment] | get-member -Static

>  TypeName: System.Environment

> Name                       MemberType Definition
> ----                       ---------- ----------
> ExpandEnvironmentVariables Method     static string expandEnvironmentVariables(string name)
> GetEnvironmentVariables    Method     static System.Collections.IDictionary
> GetLogicalDrives           Method     static string[] GetLogicalDrives()
> SetEnvironmentVariable     Method     static void SetEnvironmentVariable(string variable, strin...
> CommandLine                Property   static string CommandLine {get;}
> CurrentDirectory           Property   static string CurrentDirectory {get;set;}
> CurrentManagedThreadId     Property   static int CurrentManagedThreadId {get;}
[...]

 (Die Ausgabe wurde zusammengefasst)

Daten konvertieren mit System.Convert

Die Convert-Klasse stellt eine Reihe von Methoden zur Verfügung, um Datentypen zu konvertieren.

[System.Convert]::ToSTring(42562,16)   # Konvertiert ins Hex-System
> a642
[System.Convert]::ToSTring(42562,2)    # Konvertiert ins Binär-System
> 1010011001000010
[System.Convert]::ToSTring(42562,8)    # Konvertiert ins Oktal-System
> 123102 

Das erste Beispiel konvertiert die Zahl 42562 ins Hexadezimal (16er)-Zahlensystem, das zweite Beispiel konvertiert ins Binär-System (2er), und das dritte Beispiel konvertiert ins Oktal-System (8er).

Textbasierte Übertragungsprotkolle wieSMTP, das Mail-Protokoll, können keine Binärdaten übertragen, weil manche der Bitfolgen in Binärdaten in Textdaten als Steuerzeichen interpretiert werden. Um zu verstehen, warum das problematisch ist, brauchen Sie nur eine ausführe Datei im Notepad aufzumachen. Das Problem ist letzlich, dass man Binärdaten nicht als Text darstellen und hinterher wieder fehlerfrei in Binärdaten zurück konvertierten kann. Um dieses Problem zu lösen, hat man das Base64-Format entwickelt, bei dem die Bits einer Binärdatei in ausschließlich darstellbare Zeichen kodiert werden. Die darstellbaren Zeichen können dann problemlos übertragen und beim Empfänger zurück kodiert werden. Für die Konvertierung in Base64 gibt es ebenfalls eine Methode in der Convert-Klasse. 

$img = $env:windir\Web\Wallpaper\Windows\img0.jpg

$Bin=[System.Convert]::ToBase64String((Get-Content -Path $Img -Raw -Encoding Byte))

Mit der Methode FromBase64String() wandeln Sie den String wieder in Binärcode um, und mit Set-Content können Sie die Binärdaten wieder als Datei speichern:

$Binary = [Convert]::FromBase64String( $Bin )
Set-Content -Path c.\image.jpg -Value $Binary -Encoding Byte
[System.Convert]::ToSTring(42562,16)   # Konvertiert ins Hex-System
a642
[System.Convert]::ToSTring(42562,2)    # Konvertiert ins Binär-System
1010011001000010
[System.Convert]::ToSTring(42562,8)    # Konvertiert ins Oktal-System
123102