Condividi tramite


Get-Random

Ottiene un numero casuale o seleziona oggetti in modo casuale da una raccolta.

Sintassi

Get-Random
   [-SetSeed <Int32>]
   [[-Maximum] <Object>]
   [-Minimum <Object>]
   [-Count <Int32>]
   [<CommonParameters>]
Get-Random
   [-SetSeed <Int32>]
   [-InputObject] <Object[]>
   [-Count <Int32>]
   [<CommonParameters>]
Get-Random
   [-SetSeed <Int32>]
   [-InputObject] <Object[]>
   [-Shuffle]
   [<CommonParameters>]

Descrizione

Il Get-Random cmdlet ottiene un numero selezionato in modo casuale. Se si invia una raccolta di oggetti a Get-Random, ottiene uno o più oggetti selezionati in modo casuale dall'insieme.

Senza parametri o input, un Get-Random comando restituisce un intero senza segno a 32 bit selezionato in modo casuale tra 0 (zero) e [int32]::MaxValue.

È possibile utilizzare i parametri di Get-Random per specificare i valori minimo e massimo, il numero di oggetti restituiti da una raccolta o un numero di inizializzazione.

Attenzione

Get-Random non garantisce la sicurezza crittografica della casualità. Il valore di inizializzazione viene usato per il comando corrente e per tutti i comandi successivi Get-Random nella sessione corrente fino a quando non si usa di nuovo SetSeed o si chiude la sessione. Non è possibile reimpostare il valore di inizializzazione sul valore predefinito.

L'impostazione intenzionale del valore di inizializzazione comporta un comportamento ripetibile non casuale. Deve essere usato solo quando si tenta di riprodurre il comportamento, ad esempio durante il debug o l'analisi di uno script che include Get-Random comandi. Tenere presente che il valore di inizializzazione può essere impostato da altro codice nella stessa sessione, ad esempio un modulo importato.

PowerShell 7.4 include Get-SecureRandom, che garantisce la sicurezza crittografica della casualità.

Esempio

Esempio 1: Ottenere un numero intero casuale

Questo comando ottiene un numero intero casuale compreso tra 0 (zero) e Int32.MaxValue.

Get-Random

3951433

Esempio 2: Ottenere un numero intero casuale compreso tra 0 e 99

Get-Random -Maximum 100

47

Esempio 3: Ottenere un numero intero casuale compreso tra -100 e 99

Get-Random -Minimum -100 -Maximum 100

56

Esempio 4: Ottenere un numero a virgola mobile casuale

Questo comando ottiene un numero a virgola mobile casuale maggiore o uguale a 10,7 e minore di 20,93.

Get-Random -Minimum 10.7 -Maximum 20.93

18.08467273887

Esempio 5: Ottenere un numero intero casuale da una matrice

Questo comando ottiene un numero selezionato in modo casuale dalla matrice specificata.

1, 2, 3, 5, 8, 13 | Get-Random

8

Esempio 6: Ottenere diversi numeri interi casuali da una matrice

Questo comando ottiene tre numeri selezionati in modo casuale in ordine casuale da una matrice.

1, 2, 3, 5, 8, 13 | Get-Random -Count 3

3
1
13

Esempio 7: Randomizzare un'intera raccolta

A partire da PowerShell 7.1, è possibile usare il parametro Shuffle per restituire l'intera raccolta in un ordine casuale.

1, 2, 3, 5, 8, 13 | Get-Random -Shuffle

2
3
5
1
8
13

Esempio 8: Ottenere un valore non numerico casuale

Questo comando restituisce un valore casuale da una raccolta non numerica.

"red", "yellow", "blue" | Get-Random

yellow

Esempio 9: Usare il parametro SetSeed

In questo esempio viene illustrato l'effetto dell'uso del parametro SetSeed .

Poiché SetSeed produce un comportamento non casuale, viene in genere usato solo per riprodurre i risultati, ad esempio durante il debug o l'analisi di uno script.

# Commands with the default seed are pseudorandom
Get-Random -Maximum 100 -SetSeed 23
Get-Random -Maximum 100
Get-Random -Maximum 100
Get-Random -Maximum 100

32
25
93
95

# Commands with the same seed aren't random
Get-Random -Maximum 100 -SetSeed 23
Get-Random -Maximum 100 -SetSeed 23
Get-Random -Maximum 100 -SetSeed 23

32
32
32

# SetSeed results in a repeatable series
Get-Random -Maximum 100 -SetSeed 23
Get-Random -Maximum 100
Get-Random -Maximum 100
Get-Random -Maximum 100

32
25
93
95

Esempio 10: Ottenere file casuali

Questi comandi ottengono un campione selezionato in modo casuale di 50 file dall'unità C: del computer locale.

$Files = Get-ChildItem -Path C:\* -Recurse
$Sample = $Files | Get-Random -Count 50

Esempio 11: Roll fair dadi

In questo esempio viene eseguito il rollback di un die 1200 volte e vengono conteggiato i risultati. Il primo comando ForEach-Object ripete la chiamata a Get-Random dalla pipe in numeri (1-6). I risultati vengono raggruppati in base al valore con Group-Object e formattati come tabella con Select-Object.

1..1200 | ForEach-Object {
    1..6 | Get-Random
} | Group-Object | Select-Object Name,Count

Name Count
---- -----
1      206
2      199
3      196
4      226
5      185
6      188

Esempio 12: Usare il parametro Count

È ora possibile usare il parametro Count senza eseguire il piping di oggetti in Get-Random. L'esempio seguente ottiene tre numeri casuali minori di 10.

Get-Random -Count 3 -Maximum 10

9
0
8

Esempio 13: Usare il parametro InputObject con una stringa vuota o $null

In questo esempio, il parametro InputObject specifica una matrice contenente una stringa vuota ('') e $null.

Get-Random -InputObject @('a','',$null)

Get-Randomarestituisce , stringa vuota o $null. Lo sting vuoto viene visualizzato come riga vuota e $null torna a un prompt di PowerShell.

Parametri

-Count

Specifica il numero di oggetti casuali da restituire. Il valore predefinito è 1.

Se usato con InputObject contenente una raccolta:

  • Ogni elemento selezionato in modo casuale viene restituito una sola volta.
  • Se il valore di Count supera il numero di oggetti nell'insieme, tutti gli oggetti dell'insieme vengono restituiti in ordine casuale.
Tipo:Int32
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-InputObject

Specifica una raccolta di oggetti. Get-Random ottiene oggetti selezionati in modo casuale in ordine casuale dall'insieme fino al numero specificato da Count. Immettere gli oggetti, una variabile che contiene gli oggetti oppure un comando o un'espressione che ottiene gli oggetti. È anche possibile inviare tramite pipe una raccolta di oggetti a Get-Random.

A partire da PowerShell 7, il parametro InputObject accetta matrici che possono contenere una stringa vuota o $null. La matrice può essere inviata verso il basso della pipeline o come valore del parametro InputObject .

Tipo:Object[]
Posizione:0
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:True
Accettare caratteri jolly:False

-Maximum

Specifica un valore massimo per il numero casuale. Get-Random restituisce un valore minore del valore massimo (non uguale). Immettere un numero intero, un numero a virgola mobile e precisione doppia o un oggetto che può essere convertito in un numero intero o doppio, ad esempio una stringa numerica ("100").

Il valore di Maximum deve essere maggiore di (diverso da) il valore di Minimum. Se il valore di Maximum o Minimum è un numero a virgola mobile, Get-Random restituisce un numero a virgola mobile selezionato in modo casuale.

In un computer a 64 bit, se il valore di Minimum è un intero a 32 bit, il valore predefinito di Maximum è Int32.MaxValue.

Se il valore di Minimum è un valore double (un numero a virgola mobile), il valore predefinito di Maximum è Double.MaxValue. In caso contrario, il valore predefinito è Int32.MaxValue.

Tipo:Object
Posizione:0
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Minimum

Specifica un valore minimo per il numero casuale. Immettere un numero intero, un numero a virgola mobile e precisione doppia o un oggetto che può essere convertito in un numero intero o doppio, ad esempio una stringa numerica ("100"). Il valore predefinito è 0 (zero).

Il valore di Minimum deve essere minore (diverso da) il valore di Maximum. Se il valore di Maximum o Minimum è un numero a virgola mobile, Get-Random restituisce un numero a virgola mobile selezionato in modo casuale.

Tipo:Object
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-SetSeed

Specifica un valore di inizializzazione per il generatore di numeri casuali. Quando si usa SetSeed, il cmdlet genera numeri pseudorandomi, che non sono crittograficamente sicuri.

Attenzione

L'impostazione del valore di inizializzazione comporta un comportamento non casuale. Deve essere usato solo quando si tenta di riprodurre il comportamento, ad esempio durante il debug o l'analisi di uno script che include Get-Random comandi.

Questo valore di inizializzazione viene usato per il comando corrente e per tutti i comandi successivi Get-Random nella sessione corrente fino a quando non si usa di nuovo SetSeed o si chiude la sessione. Non è possibile reimpostare il valore di inizializzazione sul valore predefinito.

Tipo:Nullable<T>[Int32]
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Shuffle

Restituisce l'intera raccolta in un ordine casuale.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

Input

Object

È possibile inviare tramite pipe qualsiasi oggetto a questo cmdlet. Seleziona i valori in modo casuale dagli oggetti inviati tramite pipe.

Output

Int32

Int64

Double

PSObject

Questo cmdlet restituisce un numero intero o a virgola mobile o un oggetto selezionato in modo casuale da una raccolta inviata.

Note

Get-Random non restituisce sempre lo stesso tipo di dati del valore di input. Nella tabella seguente viene illustrato il tipo di output per ognuno dei tipi di input numerici.

Tipo di input Tipo di output
SByte Double
Byte Double
Int16 Double
UInt16 Double
Int32 Int32
UInt32 Double
Int64 Int64
UInt64 Double
Double Double
Singola Double

A partire da Windows PowerShell 3.0, Get-Random supporta interi a 64 bit. In Windows PowerShell 2.0 viene eseguito il cast di tutti i valori a System.Int32.

A partire da PowerShell 7, il parametro InputObject nel set di parametri RandomListItemParameterSet accetta matrici che contengono una stringa vuota o $null. Nelle versioni precedenti di PowerShell, solo il parametro Maximum nel set di parametri RandomNumberParameterSet ha accettato una stringa vuota o $null.