Zufallszahlen, temporäre Dateinamen und GUIDs erzeugen in PowerShell

    ZufallszahlenIn Scripts benötigt man gelegentlich zufällig generierte Werte, seien es Zahlen, Namen für temporäre Dateien oder GUIDs für eindeutige Registry- bzw. Datenbank­schlüssel. PowerShell bietet eigene Funktionen für solche Zufallswerte.

    Während man in einigen Script-Sprachen erst den Generator für Zufallszahlen mit dem Timer initialisieren, dann eine Funktion zum Erzeugen der Zahl aufrufen und schließlich diese mit einer Modulo-Operation auf einen bestimmten Bereich eingrenzen muss, erledigt man diese Aufgabe in PowerShell viel einfacher mit dem Aufruf von Get-Random.

    Zufallszahl erzeugen

    Gibt man ihm keine Argumente mit, dann liefert es eine zufällige Zahl zwischen 0 und 2 147 483.647 (dem Höchstwert von unsigned integer). Möchte man diesen Bereich eingrenzen, dann kann man dies mit Hilfe der Parameter Minimum und Maximum tun:

    Get-Random -Minimum 100 -Maximum 200

    Übergibt man der Funktion ein Array, dann wählt es daraus zufällig ein Element aus:

    $farben = "rot", "gelb", "grün", "blau"
    Get-Random $farben

    Temporärer Dateiname

    Um einen temporären Dateinamen zu erzeugen, verwendet man die .NET-Methode GetTempFileName, die von System.IO-Path-Objekten bereitgestellt wird:

    [System.IO.Path]::GetTempFileName()

    Sie erzeugt nicht nur einen zufälligen, noch nicht verwendeten Dateinamen, sondern verdrahtet diesen gleich fest mit dem Pfad zum temp-Verzeichnis, wie er in der entsprechenden Umgebungsvariablen definiert ist.

    Erzeugen von Zufallszahlen, temporären Dateinamen und GUIDs mit PowerShell.

    Wenn man daraus nur den Dateinamen entnehmen möchte, um ihn in einem anderen Verzeichnis zu platzieren, dann kann man dies über den replace-Operator tun:

    [System.IO.Path]::GetTempFileName() -replace '.*\\', ''

    Der hier verwendete Ausdruck ersetzt alle Zeichen bis zum letzten Backslash durch die leere Zeichenkette. Es gilt jedoch zu bedenken, dass der Dateiname an einem anderen Ort möglicherweise schon existiert, was man mit Hilfe von Test-Path überprüfen sollte.

    GUID generieren

    Benötigt man einen Globally Unique Identifier, dann kann man diesen durch den Aufruf von

    [guid]::NewGuid()

    tun. Er ließe sich auch als Name für eine temporäre Datei verwenden, ohne dass man automatisch auf dass temp-Verzeichnis festgelegt wird. Die Gefahr für Namenskonflikte existiert dennoch nicht.

    New-Item -Name ([guid]::NewGuid()) -Type File

    Dieser Aufruf von New-Item würde eine Datei mit dem GUID als Name im aktuellen Verzeichnis erzeugen. Möchte man sie an einem anderen Ort anlegen, dann spezifiziert man diesen über den Parameter Path.

    Keine Kommentare