PowerShell'de Rastgele Dize Oluşturun [6 Yol]


[System.Guid] Sınıfını Kullanma

PowerShell'de rastgele bir dize oluşturmak için:

  • NewGuid() yöntemini kullanarak genel olarak benzersiz bir tanımlayıcı oluşturun.
  • GUID'i (önceki adımda oluşturulan) String biçimine dönüştürmek için ToString() yöntemini kullanın.
  • Rastgele dizeyi yazdırmak için Write-Host cmdlet'ini kullanın.

System.Guid Sınıfını Kullanın:

$randomString = ([System.Guid]::NewGuid()).ToString()
Write-Host $randomString

ÇIKTI:

95ffbbf8-f721-4cf2-886d-dcdbfae00665

New-Guid(), rastgele bir GUID (Globally Unique Identifier) oluşturmak için kullandığımız [System.Guid] sınıfının statik bir yöntemidir. Bir komut dosyasında benzersiz bir kimlik oluşturmamız gerekiyorsa bu yöntemi kullanırız.

Daha sonra, ToString() yöntemini New-Guid() ile zincirleyerek türünü 'de sakladığımız String olarak değiştirdik. $randomString değişkeni. Son olarak, $randomString değerini PowerShell konsoluna yazdırmak için Write-Host cmdlet'ini kullandık.

.NET RNGCryptoServiceProvider Sınıfını Kullanma

PowerShell'de rastgele bir dize oluşturmak için:

  • Bayt dizisi oluşturmak için New-Object cmdlet'ini kullanın.
  • .NET RNGCryptoServiceProvider sınıfının bir nesnesini oluşturmak için New-Object cmdlet'ini kullanın.
  • Bayt dizisini (ilk adımda oluşturulan) rastgele baytlarla doldurmak için GetBytes() yöntemini kullanın.
  • Bayt dizisini base64 kodlu dizeye dönüştürmek için ToBase64String() yöntemini kullanın.
  • PowerShell konsoluna dönüştürülen dize için Write-Host cmdlet'ini kullanın.

RNGCryptoServiceProvider Sınıfını kullanın:

$randomBytesArray = New-Object byte[] 32
$rngObject = New-Object System.Security.Cryptography.RNGCryptoServiceProvider
$rngObject.GetBytes($randomBytesArray)
$randomString = [System.Convert]::ToBase64String($randomBytesArray)
Write-Host $randomString

ÇIKTI:

6nh6ArzjvQSh6dW7DQ2C/3sTCZiKWpq/THDOTKHwg8E=

Öncelikle byte türünde bir dizi oluşturmak için New-Object cmdlet'ini kullandık ve onun referansını $randomBytesArray değişkeninde sakladık. Bu dizi daha sonra kodda oluşturacağımız rastgele baytları tutacaktır. New-Object cmdlet'i Microsoft.PowerShell.Utility modülüne aittir ve nesneler oluşturmak için kullanılır.

Yine RNGCryptoServiceProvider sınıfının bir örneğini oluşturmak için New-Object cmdlet'ini kullandık ve bunu $rngObject değişkeninde sakladık. Bu nesneyi neden yarattınız? Çünkü RNGCryptoServiceProvider sınıfı, rastgele baytların kriptografik olarak güvenli bir şekilde oluşturulmasına yardımcı olur. $randomBytesArray'i parametre olarak alıp içini rastgele baytlarla dolduran GetBytes() yöntemini kullandık.

Sonrasında [System.Convert] sınıfının ToBase64String() metodunu kullanarak $randomBytesArray'i parametre olarak alıp base64 kodlu string'e dönüştürdük ve $randomString değişkeninde saklanır. Son olarak, PowerShell konsolunda $randomString dosyasını yazdırmak için Write-Host cmdlet'ini kullandık.

System.Random'ı For ve ForEach Döngüsüyle Kullanmak

PowerShell'de 10 karakterden oluşan rastgele bir dize oluşturmak için:

  • Bir karakter dizisi oluşturmak için ToCharArray() yöntemini bir dize değeriyle zincirleyin.
  • System.Random sınıfının bir örneğini oluşturmak için New-Object cmdlet'ini kullanın.
  • Aynı işleri 10 kez gerçekleştirmek için for döngüsünü kullanın.
  • Her yineleme için:

    • Next() yöntemini kullanarak rastgele bir dizin oluşturun.
    • Önceki adımda oluşturulan rastgele dizinden karakteri alın.
    • Belirtilen rastgele dizinden alınan geçerli karakteri birleştirmek için += kullanın.
  • PowerShell konsolunda rastgele dizeyi yazdırmak için Write-Host kullanın.

Döngü için kullanın:

$charsArray = "abcdefghijkmnopqrstuvwxyzABCEFGHJKLMNPQRSTUVWXYZ0123456789!"#$%&''()*+,-./:;<=>?@[\]^_`{|}~".ToCharArray()
$randomObject = New-Object System.Random
$randomString = ""
for ($i = 0; $i -lt 10; $i++) {
    $randomIndex = $randomObject.Next(0, $charsArray.Length)
    $randomCharacter = $charsArray[$randomIndex]
    $randomString += $randomCharacter
}
Write-Host $randomString

ÇIKTI:

mQ7NgZmX!0

İlk olarak, $charArray değişkeninde saklanan karakterlerin bir dizisini oluşturmak için ToCharArray() yöntemini kullandık. Bundan sonra, System.Random sınıfının bir örneğini oluşturmak için New-Object cmdlet'ini kullandık ve bunu $randomObject değişkeninde sakladık; rastgele dizinler oluşturmak için System.Random sınıfını başlattık. Bunu daha sonra for döngüsünde göreceğiz.

Daha sonra $randomString değişkenini boş bir dizeyle bildirdik ve başlattık. Bundan sonra 10 yineleme yapmak için for döngüsünü kullandık; her yinelemede rastgele bir dizin oluşturmak için Next() yöntemini kullandık ve bunu $randomIndex değişkeninde sakladık. Rastgele endeksin her zaman 0 ila dizinin uzunluğu aralığında olacağını unutmayın.

Bu $randomIndex'i $charArray'den bir karakter almak için kullandık ve onu $randomCharacter değişkenine kaydettik. Ayrıca, mevcut $randomCharacter'ı $randomString ile birleştirmek için += ile temsil edilen birleştirme operatörünü kullandık. Son olarak Write-Host cmdlet'ini kullanarak $randomString değişkeninin değerini PowerShell konsoluna yazdırdık.

Aşağıda yukarıdaki çözüme alternatif bir yaklaşım yer almaktadır. Yinelemeler için ForEach döngüsünü kullandık ve bu döngü nispeten daha az kod satırı içeriyor.

ForEach Döngüsünü kullanın:

$randomObject = New-Object System.Random
$randomString=""
1..10 | ForEach { $randomString = $randomString + [char]$randomObject.Next(33,126) }
Write-Host $randomString

ÇIKTI:

b?YDha&3>,

System.Web modülünü kullanma

PowerShell'de rastgele bir dize oluşturmak için System.Web modülündeki GeneratePassword() yöntemini kullanın.

GeneratePassword() Yöntemini kullanın:

[Reflection.Assembly]::LoadWithPartialName("System.Web")
[System.Web.Security.Membership]::GeneratePassword(20,2)

ÇIKTI:

C&h%qk+Cxra7%s9=ZTq@

Bu çözüm için Reflection.Assembly sınıfının LoadWithPartialName() yöntemini kullanarak System.Web'i PowerShell'e yüklememiz gerekiyor. İçe aktardıktan sonra System.Web.Security ad alanında bulunan Membership sınıfının GeneratePassword() yöntemini kullandık.

GeneratePassword() yöntemi iki bağımsız değişken aldı; Birincisi şifrenin uzunluğu, ikincisi ise karmaşıklığıydı. Bizim durumumuzda, sayılara ve harflere ek olarak alfasayısal olmayan 2 karakteri temsil eden 2 karmaşıklığına sahip, 20 karakter uzunluğunda bir şifremiz var. Yukarıdaki betiğin başarılı bir şekilde yürütülmesi üzerine, yukarıda görebileceğiniz rastgele bir şifre dizisi elde edeceğiz.

Get-Random Cmdlet'ini -join Operatörüyle Kullanma

PowerShell'de küçük harf ve rakamlardan oluşan rastgele bir dize oluşturmak için -join operatörüyle birlikte Get-Random cmdlet'ini kullanın.

Get-Random Cmdlet'i -join Operatörü ile kullanın:

-join ((48..57) + (97..122) | Get-Random -Count 10 | % {[char]$_})

ÇIKTI:

m8w6dqfn5t

Yukarıdaki komutun ne işe yaradığını anlamadan önce onu parçalara ayıralım ve öğrenelim. (48..57) + (97..122), karakterlerin a-z (97-122 ) arasındaki ASCII kodlarını belirten bir Unicode değerleri dizisi oluşturur. ) ve 0-9 (48-57). Bu dizi, -Count kullanarak 10 sayısını belirttiğimiz için rastgele 10 değerleri seçen Get-Random cmdlet'iyle bağlantılandırıldı. .

Artık seçilen 10 rastgele karakter, onları ForEach-Object% {[char]$_ işlemine aktarıldı. > cmdlet'i oluşturdum ve her Unicode değerini karşılık gelen karaktere dönüştürdüm. Son olarak tüm karakterleri birleştirmek için -join operatörünü kullandık. Yani yukarıdaki komut, her karakterin küçük harf veya sayı olacağı 10 rastgele karakter üretecek ve birleştirecektir. Alternatif olarak büyük harflere ve özel karakterlere sahip olmak için aşağıdaki komutu kullanabiliriz.

PowerShell'de küçük harfler, büyük harfler, sayılar ve özel karakterler içeren rastgele bir dize oluşturmak için -join operatörüyle birlikte Get-Random cmdlet'ini kullanın.

Get-Random Cmdlet'i -join Operatörü ile kullanın:

-join ((33..126) | Get-Random -Count 10 | % {[char]$_})

ÇIKTI:

)H2T\n#,|v

Bu noktaya kadar rastgele bir dize oluşturduk; peki ya PowerShell'de n sayıda rastgele dize oluşturmamız gerekiyorsa?

n Rastgele Dizgeler Oluşturmak için get-random ile for Döngüsünü Kullanma

PowerShell'de n sayıda rastgele dize oluşturmak için get-random ile for döngüsünü kullanın.

N Rastgele Dize Oluşturmak için Döngüyü Kullanın:

for($i=0; $i -lt 5; $i++){
    ([char[]]([char]'a'..[char]'z' + [char]'A'..[char]'Z') + 0..9 | sort {get-random})[0..9] -join ''
}

ÇIKTI:

M5tV34J81u
2ErYS5uly6
jZ3ufpCBeh
qBdsjZi1Cp
CO2Ez3iDWY

Bu örnek öncekilere benzer ancak 5 rastgele alfanümerik dize oluşturur. Nasıl? Her rastgele dize için bir yineleme olacak şekilde 5 yineleme gerçekleştirmek için for döngüsünü kullandık. Her yinelemede, sayıları, küçük harfleri ve büyük harfleri birleştirerek rastgele sıralanmış bir alfasayısal karakter dizisi oluşturduk.

[0..9], rastgele dizeden ilk 10 karakterini seçti ve bunları -join operatörünü kullanarak birleştirdi. Bu işlem 5 dizenin tümü için tekrarlandı.

Bunların hepsi PowerShell'de rastgele Dize'nin nasıl oluşturulacağıyla ilgilidir.

İlgili makaleler