PowerShell'de Giriş İstemi Nasıl Yapılır?
PowerShell, kullanıcı girişinin farklı eylemleri gerçekleştirmesini istemek için çeşitli yollar sağlar. Bu, sabit kodlama değerleri yerine dinamik çalışma zamanı yapılandırmasını, parametrelerini ve seçeneklerini kabul edebilen esnek, özelleştirilebilir ve etkileşimli komut dosyaları oluşturmanıza olanak tanır. Bu kapsamlı kılavuzda, kullanıcı girişini yönlendirmek için PowerShell'de bulunan çeşitli yöntemleri inceleyeceğiz. Komut satırından giriş okumak, GUI açılır pencerelerini görüntülemek, menü seçenekleri sunmak veya değerleri doğrulamak olsun, PowerShell kullanıcı dostu giriş deneyimleri oluşturmak için güçlü seçenekler sunar.
Kullanıcı Girişi için PowerShell İstemine Giriş
Kullanıcı girişi istemek, çalışma zamanında kullanıcılardan parametreleri, seçenekleri ve diğer değerleri kabul edebilen esnek PowerShell betikleri oluşturmanıza olanak tanır. Giriş istemenin bazı yaygın nedenleri şunlardır:
- Kullanıcılardan kimlik doğrulama için kimlik bilgileri girmelerini isteme
- Komut dosyası akışını ve mantığını belirlemek için kullanıcılardan seçimler alma
- Komut dosyasında kullanılacak dosya adlarını, yolları ve diğer giriş değerlerini kabul etme
- Kullanıcılardan değerleri onaylamalarını isteyerek girişi doğrulama
- Kullanıcılara seçenekler sunmak için etkileşimli menüler oluşturma
PowerShell, kullanıcıya uygun şekilde bilgi vermek için cmdlet'ler, okuma ana bilgisayarı, parametreler ve bağımsız değişkenler, giriş kutuları ve diğer teknikleri sağlar. Kullanıcı girişi için PowerShell istemiyle, kullanıcılardan dosya yolları, kullanıcı adları, parolalar ve betiğin başarılı bir şekilde yürütülmesi için gereken diğer parametreler gibi bilgileri istemesini sağlayabilirsiniz.
Kullanıcı Girişi için PowerShell İstemini Kullanmanın Yararları
Kullanıcı girişi için PowerShell istemini kullanmanın temel faydalarından biri, komut dosyalarınızı daha etkileşimli hale getirmesidir. Kullanıcılardan giriş yapmalarını isteyebilir ve ardından bu girişi komut dosyasındaki belirli görevleri gerçekleştirmek için kullanabilirsiniz. Bu, komut dosyalarınızı daha esnek ve kullanımı daha kolay hale getirebilir. Ek olarak, kullanıcı girişi için bir PowerShell istemi, normalde manuel müdahale gerektirecek belirli görevleri otomatikleştirmenize yardımcı olabilir. Bu size zaman kazandırabilir ve kuruluşunuzda verimliliği artırabilir.
PowerShell'de Kullanıcı Girişini İstemek için Read-Host cmdlet'ini kullanma
PowerShell'de kullanıcıdan girdi almanın en kolay yolu Read-Host cmdlet'idir. Bu cmdlet kullanıcıdan giriş yapmasını ister ve kullanıcının bir yanıt yazmasını bekler. Dizeler, sayılar ve güvenli dizeler gibi çeşitli giriş türlerini toplamak için kullanılabilir.
Kullanıcı girişi için PowerShell isteminin temel sözdizimi aşağıdaki gibidir:
Read-Host [-Prompt] <String> [-AsSecureString] [-MaskInput] [<CommonParameters>]
- -İstem: Kullanıcıya görüntülenen metin istemini belirtir. Bu parametre konumsaldır ve açıkça adlandırılmadan kullanılabilir. Örneğin, Read-Host “Adınızı girin”. Read-Host cmdlet'inin çıktısı bir dize nesnesidir.
- -AsSecureString: Girişin güvenli bir dize olarak değerlendirilmesi gerektiğini belirtir. Giriş maskelendiğinden ve bir System.Security.SecureString nesnesinde saklandığından bu, parolalar veya diğer hassas bilgiler için kullanışlıdır.
- MaskInput: Bu parametre, GUI uygulamalarındaki şifre alanlarına benzer şekilde girişin maskelenmesi gerektiğini belirtir. PowerShell 7.2'den başlayarak kullanılabilir.
Burada Read-Host cmdlet'ini kullanarak nasıl girdi alınacağına ilişkin bir örnek verilmiştir.
# Prompt for a string input
$name = Read-Host -Prompt "Enter your name"
#Get the input and store it in $Age variable name - without Prompt parameter
$Age = Read-Host "Please enter your age"
Write-Host "Hello $Name, welcome to my script!"
Bu komut dosyası kullanıcıdan bir mesaj ister ve ardından kullanıcı girişini bir değişkene atar. Giriş kişiselleştirilmiş bir mesaj olarak görüntülenecektir.
Kullanıcı Windows PowerShell konsolunda bir değer girip “Enter” tuşuna bastığında, girilen değer $name değişkeninde düz metin dize nesnesi olarak depolanır. PowerShell, bilgi istemi dizesinin sonuna iki nokta üst üste ekleyecektir.
Read-Host için bazı yararlı parametreler şunları içerir:
- Bilgi İstemi - Kullanıcıya görüntülenecek bilgi istemi metnini belirtir. Dize boşluk içeriyorsa onu tırnak işaretleri içine alın.
- AsSecureString - AsSecureString parametresi, parolalar gibi kullanıcı girişini maskeler
- MaskInput - Girilen her karakteri * olarak maskeler
Örneğin, bir parola istemek için:
# Prompt for a secure string input (password)
$Password = Read-Host -Prompt "Enter your password" -AsSecureString
Bu örnek kullanıcıdan şifresini ister. Giriş girildiğinde, konsoldaki karakterlerin yerinde gerçek giriş yerine yıldız işaretleri (*) görüntülenir.
Kullanıcıdan Onay Alma
Kullanıcılardan bir eylemi onaylamalarını istemek için Read-Host'u da kullanabilirsiniz. Örneğin:
$Confirm = Read-Host -Prompt "Are you sure you want to delete the file (Y/N)"
if ($confirm -eq 'y') {
# Delete file
} else {
Write-Host "Deletion cancelled"
}
Bu, bir dosyayı silmeden önce onay isteyen bir istem görüntüler. Bu, girişi doğrular ve uygun kod bloğu yürütülür. Read-Host'un bir kullanıcıdan gelen giriş olarak yalnızca 8190 karakteri kabul edebileceğini lütfen unutmayın.
Komut Dosyalarındaki Parametrelerle Kullanıcı Girişi İstemi
Daha karmaşık girişler için PowerShell betiklerinizi çalıştırırken parametreleri ve bağımsız değişkenleri kabul edebilirsiniz. Parametreler, değerleri -Ad veya -Yol gibi adlandırılmış bir şekilde girmenize olanak tanır.
Örneğin, parametreleri kabul eden, install-script.ps1 adında bir PowerShell betiği tanımlayabiliriz:
param(
[string]$Name,
[string]$Path
)
Write-Output "Installing $Name to path $Path"
Daha sonra bunu çalıştırabilir ve giriş değerlerini iletebiliriz:
.\install-script.ps1 -Name MyApp -Path C:\Apps
Bilgi istemi seçenekleri için, parametre girişinin farklı kombinasyonlarını kabul etmek amacıyla parametre setlerini kullanabilirsiniz. Konumsal değerler için bağımsız değişken girişini de kabul edebilirsiniz. Dolayısıyla parametrelerin ve argümanların birleştirilmesi, güçlü giriş istemlerine olanak tanır. Daha fazlası burada: PowerShell işlevi Parametreleri
Kullanıcı Girişi Bekleniyor
Bazı senaryolarda sürekli kullanıcı girişini beklemeniz gerekebilir. Bunu, kullanıcıların çıkmayı seçene kadar birden çok kez giriş yapmasına olanak tanıyan bir Okuma-Ana Bilgisayar döngüsü kullanarak başarabilirsiniz.
# Initialize a flag to control the loop
$continue = $true
# Start the loop
while ($continue) {
$input = Read-Host "Enter some input or type 'Q' to quit"
if ($input -eq "q") {
# If the user enters 'exit', set the flag to false to exit the loop
$continue = $false
} else {
# Process the user's input (in this example, we just display it)
Write-Host "You entered: $input"
}
}
Write-Host "User chose to exit. Script completed."
Komut dosyasını, kullanıcının girdisine veya belirli gereksinimlerine göre daha karmaşık mantık veya eylemler içerecek şekilde değiştirebilirsiniz.
Kullanıcı Girişini Doğrula
Kullanıcı girişini belirli bir koşul veya kriterle eşleşecek şekilde doğrulayabilirsiniz. Bir döngü kullanarak giriş doğrulamanın nasıl kullanılacağını görelim. Örneğin kullanıcının yaş parametresini almak istiyorsunuz.
# Promp for user input with validation
Do {
$Age = Read-Host -Prompt "Please enter your age"
} While ($Age -notmatch '^\d+$')
# Output the entered age
Write-Host "You entered age: $Age"
Bu sizden geçerli bir numara girmenizi isteyecektir.
Benzer şekilde, kullanıcı girdisine göre doğrulamak ve işlem yapmak için IF koşulunu kullanabilirsiniz.
$userInput = Read-Host "Enter a number between 1 and 10"
if ($userInput -ge 1 -and $userInput -le 10) {
Write-Host "Valid input: $userInput"
} else {
Write-Host "Invalid input. Please enter a number between 1 and 10."
}
İşlev parametreleri kullanıyorsanız, kullanıcı girişini şu özniteliklerle doğrulayabilirsiniz: ValidateSet, ValidateRange, ValidatePattern, vb. Daha fazla bilgi burada: PowerShell'de işlev parametrelerini doğrulama
Kullanıcı Girişini İstemek İçin Bir Menü Uygulama
Etkileşimli menü seçenekleri sağlamak için, seçenekleri görüntülemek ve menü seçimlerini almak üzere bir döngü içinde Read-Host komutunu kullanabilirsiniz. Örneğin, kullanıcının sistem bilgilerini kontrol etme, bir dizindeki dosyaları listeleme ve bilgisayarı kapatma gibi temel sistem görevlerini gerçekleştirmesine olanak tanıyan basit bir menü oluşturun:
# Define a function to display the system operations menu
function Show-SystemMenu {
Clear-Host # Clear the console to keep it clean
Write-Host "=== System Operations Menu ==="
Write-Host "1. Display System Information"
Write-Host "2. List Files in a Directory"
Write-Host "3. Shut Down Computer"
Write-Host "4. Exit"
}
# Display the system operations menu initially
Show-SystemMenu
# Start the menu loop
while ($true) {
$choice = Read-Host "Select an operation (1-4):"
# Validate user input
if ($choice -match '^[1-4]$') {
switch ($choice) {
1 {
# Display system information
Write-Host "System Information:"
Get-ComputerInfo | Format-Table -AutoSize
Read-Host "Press any key to continue..."
}
2 {
# List files in a directory
$directory = Read-Host "Enter the directory path:"
Get-ChildItem -Path $directory
Read-Host "Press any key to continue..."
}
3 {
# Shut down the computer
Write-Host "Shutting down the computer..."
#Stop-Computer -Force
}
4 { exit } # Exit the loop when 'Exit' is selected
}
}
else {
Write-Host "Invalid input. Please select a valid option (1-4)."
Start-Sleep -Seconds 2 # Pause for 2 seconds to display the message
}
# Redisplay the system operations menu
Show-SystemMenu
}
Bu, bir menü görüntüler, seçimler ister ve switch ifadesiyle seçilen menü seçeneğine bağlı olarak farklı kod bloklarını çalıştırır.
Onay Açılır Pencereleri ve Giriş Kutusu İstemleri Oluşturma
Giriş istemenin daha kullanıcı dostu ve etkileşimli bir yoluna ihtiyacınız varsa System.Windows.Forms ad alanını kullanarak açılır giriş kutuları oluşturabilirsiniz. Bu yaklaşım, komut dosyalarınız için grafik kullanıcı arayüzleri (GUI'ler) tasarlamanıza olanak tanır.
Add-Type -AssemblyName System.Windows.Forms
$InputBox = [System.Windows.Forms.MessageBox]::Show("Do you want to continue?", "Confirmation", [System.Windows.Forms.MessageBoxButtons]::YesNo)
$InputBox
İşte Icon'lu bir tane daha:
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()
$UserInput = [System.Windows.Forms.MessageBox]::Show("Do you want to proceed execution?","Continue script execution" , "YesNo", "Question")
Grafiksel bir giriş kutusu oluşturmak, özellikle teknik bilgisi olmayan kullanıcılar için kullanıcı deneyimini önemli ölçüde geliştirebilir.
Açılan bir istemi görüntülemek için Windows Komut Dosyası Ana Bilgisayarı nesnesini de kullanabilirsiniz:
$Prompt = New-Object -ComObject wscript.shell
$UserInput = $Prompt.popup("Do you want to proceed execution?",0,"Continue script execution",4+32)
If($UserInput -eq 6)
{
Write-host -f Green "Script Execution Continued..."
}
Else
{
Write-host -f Yellow "Script Execution Aborted!"
}
Giriş Kutularını Kullanarak Giriş İstemi
Giriş için etkileşimli bir bilgi istemi sağlamak amacıyla bir giriş kutusu oluşturabilirsiniz. Örneğin:
# Prompt the user for input using InputBox
$input = [Microsoft.VisualBasic.Interaction]::InputBox("Please enter your name:", "User Input", "")
# Check if the user provided input
if ([string]::IsNullOrWhiteSpace($input)) {
Write-Host "User canceled input."
} else {
Write-Host "You entered: $input"
}
Bu, kullanıcıya bir giriş açılır penceresi görüntüler. Girişi kontrol edebilir ve buna göre komut dosyası yürütmeye devam edebilirsiniz.
PowerShell GUI ile Kullanıcı Girişi Alın
Kullanıcı girişi için PowerShell istemi güçlü bir özellik olsa da ihtiyaçlarınıza bağlı olarak kullanabileceğiniz alternatifler de vardır. Böyle bir alternatif PowerShell açılır girişidir. Bu özellik, kullanıcılardan giriş yapmalarını isteyen bir grafik kullanıcı arayüzü (GUI) oluşturmanıza olanak tanır. İşte bir örnek:
# Load the System.Windows.Forms assembly
Add-Type -AssemblyName System.Windows.Forms
# Create a form object
$Form = New-Object System.Windows.Forms.Form
$Form.Text = "Enter the value"
$Form.Size = New-Object System.Drawing.Size(300,200)
$Form.StartPosition = "CenterScreen"
# Create a label to display instructions
$label = New-Object Windows.Forms.Label
$label.Text = "Enter your input:"
$label.Location = New-Object Drawing.Point(20, 20)
$form.Controls.Add($label)
# Create an OK button
$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Point(100,75)
$Button.Size = New-Object System.Drawing.Size(100,30)
$Button.DialogResult = [Windows.Forms.DialogResult]::OK
$Button.Text = "OK"
$Form.Controls.Add($Button)
# Create a text box for user input
$InputBox = New-Object System.Windows.Forms.TextBox
$InputBox.Location = New-Object System.Drawing.Point(50,50)
$InputBox.Size = New-Object System.Drawing.Size(200,20)
$Form.Controls.Add($InputBox)
# Show the form as a dialog box
$Result = $Form.ShowDialog()
# Check if the OK button was clicked
if ($Result -eq [Windows.Forms.DialogResult]::OK) {
$userInput = $InputBox.Text
Write-Host "You entered: $userInput"
}
# Dispose of the form
$form.Dispose()
Bu örnek, kullanıcıdan giriş yapmasını isteyen ve ardından girişi konsolda görüntüleyen bir GUI oluşturur.
Kullanıcı girişi için PowerShell isteminde uzmanlaşmanıza yardımcı olacak çeşitli kaynaklar vardır. Kullanıcı girişi için Read-Host istemine ilişkin resmi belgeler şunlardır: Read-Host Cmdlet Microsoft Docs
Özet
Bu kapsamlı kılavuzda temel konsol girişini, kullanıcılardan onay almayı, GUI giriş kutularını, parametrelendirilmiş komut dosyalarını ve sürekli kullanıcı etkileşimi için menüleri ele aldık. Bu kavramlara ve gerçek dünyadan örneklere hakim olarak etkileşimli ve kullanıcı dostu PowerShell betikleri oluşturmak için iyi bir donanıma sahip olursunuz:
- Giriş istemi için Read-Host cmdlet'i
- Parametreleri ve bağımsız değişkenleri kabul etme
- WinForms aracılığıyla giriş kutuları
- Döngüde Read-Host kullanan menüler
Bu yönlendirme tekniklerinin kullanılması, çalışma zamanı yapılandırmasını ve kullanıcılardan gelen girdileri dostane bir şekilde kabul edebilen komut dosyalarının oluşturulmasına olanak tanır. Bu, değerleri sabit olarak kodlamaktan daha fazla esneklik sağlar ve otomasyonu geliştirir. Bu makalede özetlenen yöntemleri izleyerek bu özelliği kullanma konusunda uzmanlaşabilir ve daha verimli ve esnek komut dosyaları oluşturabilirsiniz.






