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çinToString()yöntemini kullanın.- Rastgele dizeyi yazdırmak için
Write-Hostcmdlet'ini kullanın.
System.Guid Sınıfını Kullanın:
$randomString = ([System.Guid]::NewGuid()).ToString()
Write-Host $randomStringÇIKTI:
95ffbbf8-f721-4cf2-886d-dcdbfae00665New-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 değişkeni. Son olarak, String olarak değiştirdik. $randomString$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-Objectcmdlet'ini kullanın. - .NET
RNGCryptoServiceProvidersınıfının bir nesnesini oluşturmak içinNew-Objectcmdlet'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-Hostcmdlet'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.Randomsınıfının bir örneğini oluşturmak içinNew-Objectcmdlet'ini kullanın.- Aynı işleri
10kez gerçekleştirmek içinfordö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.
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:
m8w6dqfn5tYukarı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#,|vBu 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
CO2Ez3iDWYBu ö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.
