Es gibt die Möglichkeit unter PowerShell eine Random Zahl oder etwas anderes zufällig auszugeben. Beispielsweise kann man Zahlen von eins bis Zehn zufällig ausegben lassen oder auch Buchstaben.
Das Ganze wird mittels der Funktion Random realisiert. Aufzurufen ist diese über System.Random. Seit PowerShell 3.0 ist dies jedoch erheblich einfacher geworden. Siehe dazu Get-Random.
Es muss ein neues Objekt erstellt werden, New-Object System Random und einer Variable $x zugewiesen werden. $x = New-Object System Random. Über die Objekteigenschaft von $x wird die Eigenschaft next() genutzt um den minimalen und maximalen Wert festzulegen.Bede werde sind durch ein Komma getrennt $x.next(1,10). Nun kann eine Ausgabe über eine Hilfs Variable erzeugt werden. $y = $x.next(1,10).
Codebeispiele
Würfel
1 2 3 4 5 |
$Wuerfel = New-Object System.Random $randomWuerfel= $Wuerfel.next(1,6) $randomWuerfel #Ausgabe #2 |
Zufallsbuchstabe
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#Variante 1 $ZufaelligerBuchstabe = New−Object System.Random $randomChar = [char]$ZufaelligerBuchstabe.next(65,90) $randomChar #Ausgabe #S #Variante 2 #Minima und Maxima definieren $min = 65 $max = 90 $ZufaelligerBuchstabe = New−Object System.Random $randomChar = [char]$ZufaelligerBuchstabe.next($min,$max) $randomChar #Ausgabe #R |
Get-Random
Mittels der Cmdlet Get-Random lässt sich ein zufälliger Wert wesentlich einfacher und bequemer erstellen. Dazu ein praktisches Beispiel, mittags kommt die beliebte Frage auf „Wo sollen wir den nur essen gehen?“ Gibt es eine breite Auswahl an Restaurants, kann hier Get-Random helfen 😉
Dazu wird ein Array mit den allen Restaurants bzw. Speisemöglichkeiten benötigt. Diese können mit Semikolon oder Komma separiert werden (siehe Script).
1 2 3 4 5 |
$RandomRestaurant = @('Chinese Westpark';'Goldene Muschel','Café Florian','Penny - Bela mia Casa','Subway','Mongole','BoWu Kland','Döner','Vapiano') $Date = Get-Date $Aussage = "$($Date.DayOfWeek), $($Date.Day).$($Date.Month).$($Date.Year)`nDas heutige Restaurant ist $($RandomRestaurant.Item($(Get-Random -Maximum $RandomRestaurant.Count)))." Write-Host $Aussage -ForegroundColor Green |
Die Auswahl erfolgt dann mittels Get-Ramdom, als Maximalwert wird die Anzahl der Restaurants genommen, also der Count von unserem Array. Ein Minimum muss nicht angegeben werden, wenn dies gleich Null ist. Jedoch geht es noch einfacher, dies zeigt das letzte Codebeispiel im Artikel.
1 |
$RandomRestaurant.Item($(Get-Random -Maximum $RandomRestaurant.Count)) |
Das Script kann man natürlich auch noch mit einer Messagebox und einer Dauerschleife füf eine Neuwahl aufbessern.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Function Main{ $RandomRestaurant = @('Chinese Westpark';'Goldene Muschel','Café Florian','Penny - Bela mia Casa','Subway','Mongole','BoWu Kland','Döner','Vapiano') $Date = Get-Date $Aussage = "$($Date.DayOfWeek), $($Date.Day).$($Date.Month).$($Date.Year)`nDas heutige Restaurant ist $($RandomRestaurant.Item($(Get-Random -Maximum $RandomRestaurant.Count))).`n`nNeuwahl?" $Result =[System.Windows.Forms.MessageBox]::Show($Aussage,"Restaurantwahl - blog.stefanrehwald.de",5,[System.Windows.Forms.MessageBoxIcon]::Asterisk) If ($Result -eq "Retry") { Main } } Main |
Über den Wiederholen Button in der Messagebox kann solange ein neues Restaurant gewählt werden, bis das gewünschte „zufällig“ angezeigt wird.
Ebenso können auch Strings zufällig aus einer vorgebenden Liste gewählt werden. Hier wieder auf die Restaurantwahl bezogen.
1 2 3 4 5 6 7 8 |
#Variante 1 $RandomRestaurant = @('Chinese Westpark','Goldene Muschel','Café Florian','Penny - Bela mia Casa','Subway','Mongole','BoWu Kland','Döner','Vapiano') Get-Random -InputObject $RandomRestaurant #Variante 2 Get-Random -InputObject 'Chinese Westpark','Goldene Muschel','Café Florian','Penny - Bela mia Casa','Subway','Mongole','BoWu Kland','Döner','Vapiano' |
Wie zusehen ist, kann die Wahl des Restaurants auch in einen Einzeiler (Oneliner) packen. Weiter Beispiele mit Get-Random gibt es im Technet Artikel [engl.] von MS.
rewe
2 Gedanken zu „PowerShell – 02 – Random“