Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kısa açıklama
PowerShell'de betik çalıştırmayı ve yazmayı açıklar.
Uzun açıklama
Betik, bir veya daha fazla PowerShell komutu içeren düz metin dosyasıdır.
PowerShell betiklerinin .ps1 dosya uzantısı vardır.
Betik çalıştırmak, cmdlet çalıştırmaya çok benzer. Betiğin yolunu ve dosya adını yazarak, verileri göndermek ve seçenekleri ayarlamak için parametreleri kullanırsınız. Betikleri bilgisayarınızda veya farklı bir bilgisayarda uzak oturumda çalıştırabilirsiniz.
Betik yazmak, daha sonra kullanmak üzere bir komut kaydeder ve başkalarıyla paylaşmayı kolaylaştırır. En önemlisi, komut dosyasının yolunu ve dosya adını yazarak komutları çalıştırmanızı sağlar. Betikler, bir dosyadaki tek bir komut kadar basit veya karmaşık bir program kadar kapsamlı olabilir.
Betikler #Requires özel açıklama, parametre kullanımı, veri bölümleri desteği ve güvenlik için dijital imzalama gibi ek özelliklere sahiptir.
Betikler ve betikteki işlevler için Yardım konuları da yazabilirsiniz.
Betik çalıştırma
Windows'da bir betik çalıştırabilmeniz için önce varsayılan PowerShell yürütme ilkesini değiştirmeniz gerekir. Yürütme ilkesi, Windows dışı platformlarda çalışan PowerShell için geçerli değildir.
Restrictedvarsayılan yürütme ilkesi, yerel bilgisayara yazdığınız betikler de dahil olmak üzere tüm betiklerin çalışmasını engeller. Daha fazla bilgi için bkz. about_Execution_Policies.
Yürütme ilkesi kayıt defterine kaydedilir, bu nedenle her bilgisayarda yalnızca bir kez değiştirmeniz gerekir.
Yürütme ilkesini değiştirmek için aşağıdaki yordamı kullanın.
Komut istemine şunu yazın:
Set-ExecutionPolicy AllSigned
veya
Set-ExecutionPolicy RemoteSigned
Değişiklik hemen geçerli olacak.
Betiği çalıştırmak için betik dosyasının tam adını ve tam yolunu yazın.
Örneğin, C:\Scripts dizininde Get-ServiceLog.ps1 betiğini çalıştırmak için şunu yazın:
C:\Scripts\Get-ServiceLog.ps1
Geçerli dizinde bir betik çalıştırmak için, geçerli dizinin yolunu yazın veya geçerli dizini belirtmek için bir nokta kullanın ve ardından ters eğik çizgi şeklinde bir yol ekleyin (.\).
Örneğin, ServicesLog.ps1 betiğini yerel dizinde çalıştırmak için şunu yazın:
.\Get-ServiceLog.ps1
Betiğin parametreleri varsa, betik dosya adından sonra bu parametreleri ve parametre değerlerini yazın.
Örneğin aşağıdaki komut, WinRM hizmet etkinliğinin günlüğünü istemek için Get-ServiceLog betiğinin ServiceName parametresini kullanır.
.\Get-ServiceLog.ps1 -ServiceName WinRM
Güvenlik özelliği olarak PowerShell, Dosya Gezgini'nde betik simgesine çift tıkladığınızda veya betik geçerli dizinde olsa bile betik adını tam yol olmadan yazdığınızda betikleri çalıştırmaz. PowerShell'de komut ve betik çalıştırma hakkında daha fazla bilgi için bkz. about_Command_Precedence.
PowerShell ile çalıştırma
PowerShell 3.0'dan başlayarak Dosya Gezgini'nden betik çalıştırabilirsiniz.
"PowerShell ile Çalıştır" özelliğini kullanmak için:
Dosya Gezgini'ni çalıştırın, betik dosya adına sağ tıklayın ve ardından "PowerShell ile Çalıştır"ı seçin.
"PowerShell ile Çalıştır" özelliği, gerekli parametrelere sahip olmayan ve komut istemine çıkış döndürmeyen betikleri çalıştıracak şekilde tasarlanmıştır.
Daha fazla bilgi için bkz. about_Run_With_PowerShell.
Betikleri diğer bilgisayarlarda çalıştırma
Bir veya daha fazla uzak bilgisayarda betik çalıştırmak için cmdlet'in Invoke-Command parametresini kullanın.
FilePath parametresinin değeri olarak betiğin dosya yolunu ve adını girin. Betik yerel bilgisayarda veya yerel bilgisayarın erişebileceği bir dizinde yer almalıdır.
Aşağıdaki komut, Server01 ve Server02 adlı uzak bilgisayarlarda Get-ServiceLog.ps1 betiğini çalıştırır.
$invokeCommandSplat = @{
ComputerName = 'Server01', 'Server02'
FilePath = 'C:\Scripts\Get-ServiceLog.ps1'
}
Invoke-Command @invokeCommandSplat
Betikler için yardım alma
Get-Help cmdlet'i, senaryoların yanı sıra cmdlet'ler ve diğer komut türleri için yardım konularını alır. Bir betiğin yardım konusunu almak için Get-Help yazın ve ardından betiğin yolunu ve dosya adını yazın. Betik yolu PATH ortam değişkeninizdeyse yolu belirtmenize gerek kalmaz.
Örneğin, ServicesLog.ps1 betiğiyle ilgili yardım almak için şunu yazın:
Get-Help C:\admin\scripts\ServicesLog.ps1
Betik yazma
Betik, tek komutlar, işlem hattını kullanan komutlar, işlevler ve if deyimleri ve for döngüleri gibi denetim yapıları dahil olmak üzere geçerli herhangi bir PowerShell komutu içerebilir.
Betik yazmak için, metin düzenleyicisinde yeni bir dosya açın, komutları yazın ve .ps1 dosya uzantısına sahip geçerli bir dosya adına sahip bir dosyaya kaydedin.
Aşağıdaki örnek, geçerli sistemde çalışan hizmetleri alan ve bunları bir günlük dosyasına kaydeden basit bir betiktir. Günlük dosya adı geçerli tarihten oluşturulur.
$date = (Get-Date).DayOfYear
Get-Service | Out-File "$date.log"
Bu betiği oluşturmak için bir metin düzenleyicisi veya betik düzenleyicisi açın, bu komutları yazın ve ServiceLog.ps1adlı bir dosyaya kaydedin.
Betiklerdeki parametreler
Betikte parametre tanımlamak için bir param deyimi kullanın. Açıklamalar ve param deyimleri dışında, #Requires deyimi bir betikteki ilk deyim olmalıdır.
Betik parametreleri, fonksiyon parametreleri gibi çalışır. Parametre değerleri betikteki tüm komutlar tarafından kullanılabilir. Parametre özniteliği ve adlandırılmış bağımsız değişkenleri de dahil olmak üzere işlev parametrelerinin tüm özellikleri betiklerde de geçerlidir.
Betiği çalıştırırken, betik kullanıcıları betik adından sonra parametreleri yazar.
Aşağıdaki örnekte, Test-Remote.ps1 parametresine sahip bir betiği gösterilmektedir. Betik işlevlerinin her ikisi de ComputerName parametre değerine erişebilir.
param ($ComputerName = $(throw "ComputerName parameter is required."))
function CanPing {
$Error.Clear()
$tmp = Test-Connection $ComputerName -ErrorAction SilentlyContinue
if (!$?)
{Write-Host "Ping failed: $ComputerName."; return $false}
else
{Write-Host "Ping succeeded: $ComputerName"; return $true}
}
function CanRemote {
$s = New-PSSession $ComputerName -ErrorAction SilentlyContinue
if ($s -is [System.Management.Automation.Runspaces.PSSession])
{Write-Host "Remote test succeeded: $ComputerName."}
else
{Write-Host "Remote test failed: $ComputerName."}
}
if (CanPing $ComputerName) {CanRemote $ComputerName}
Bu betiği çalıştırmak için, betik adından sonra parametre adını yazın. Örneğin
C:\PS> .\test-remote.ps1 -ComputerName Server01
Ping succeeded: Server01
Remote test failed: Server01
param deyimi ve işlev parametreleri hakkında daha fazla bilgi için bkz. about_Functions ve about_Functions_Advanced_Parameters.
Senaryolar için yazma yardımı
Aşağıdaki iki yöntemden birini kullanarak bir betik için yardım konusu yazabilirsiniz:
Comment-Based Betikler İçin Yardım
Açıklamalarda özel anahtar sözcükler kullanarak bir Yardım konusu oluşturun. Bir betik için açıklama tabanlı Yardım oluşturmak için, açıklamaların betik dosyasının başına veya sonuna yerleştirilmesi gerekir. Açıklama tabanlı Yardım hakkında daha fazla bilgi için bkz. about_Comment_Based_Help.
XML-Based Betikler için Yardım
Genellikle cmdlet'ler için oluşturulan tür gibi XML tabanlı bir Yardım konusu oluşturun. Yardım konularını birden çok dile çeviriyorsanız XML tabanlı Yardım gereklidir.
Betiği XML tabanlı Yardım konusuyla ilişkilendirmek için .EXTERNALHELP Yardım açıklaması anahtar sözcüğünü kullanın. Daha fazla bilgi için bkz:
Çıkış değeri döndürme
Varsayılan olarak, betikler sona erdiğinde çıkış durumu döndürmez. Bir komut dosyasından çıkış kodu döndürmek için exit deyimini kullanmanız gerekir. varsayılan olarak, exit deyimi 0döndürür. Farklı bir çıkış durumu döndürmek için sayısal bir değer sağlayabilirsiniz. Sıfır olmayan bir çıkış kodu genellikle bir hataya işaret eder.
Windows'ta, [int]::MinValue ile [int]::MaxValue arasında herhangi bir sayıya izin verilir.
Unix'te yalnızca [byte]::MinValue (0) ile [byte]::MaxValue (255) arasındaki pozitif sayılara izin verilir.
-1
-255 aralığındaki negatif bir sayı, 256 eklenerek otomatik olarak pozitif bir sayıya çevrilir. Örneğin, -2254dönüştürülür.
PowerShell'de exit deyimi $LASTEXITCODE değişkeninin değerini ayarlar. Windows Komut Kabuğu'nda (cmd.exe), exit deyimi %ERRORLEVEL% ortam değişkeninin değerini ayarlar.
Sayısal olmayan veya platforma özgü aralığın dışında olan bağımsız değişkenler 0değerine dönüştürülür.
Betik kapsamı ve nokta kaynağını belirleme
Her bir betik kendi kapsamında çalışır. Betikte oluşturulan işlevler, değişkenler, diğer adlar ve sürücüler yalnızca betik kapsamında bulunur. Bu öğelere veya betiğin çalıştığı kapsamdaki değerlerine erişemezsiniz.
Betiği farklı bir kapsamda çalıştırmak için, Genel veya Yerel gibi bir kapsam belirtebilir veya betiği "dot source" yaparak çalıştırabilirsiniz.
Nokta kaynak oluşturma özelliği, betik kapsamında değil geçerli kapsamda bir betik çalıştırmanıza olanak tanır. Nokta kaynaklı bir betik çalıştırdığınızda, betikteki komutlar komut isteminde yazdığınız gibi çalışır. Betiğin oluşturduğu işlevler, değişkenler, diğer adlar ve sürücüler, çalıştığınız kapsamda oluşturulur. Betik çalıştırıldıktan sonra, oluşturulan öğeleri kullanabilir ve oturumunuzda bunların değerlerine erişebilirsiniz.
Bir betiğin kaynağını nokta olarak belirtmek için, betik yolundan önce bir nokta (.) ve boşluk yazın.
Örneğin
. C:\scripts\UtilityFunctions.ps1
veya
. .\UtilityFunctions.ps1
UtilityFunctions.ps1 betiği çalıştırıldıktan sonra, betiğin oluşturduğu işlevler ve değişkenler geçerli kapsama eklenir.
Örneğin, UtilityFunctions.ps1 betiği New-Profile işlevini ve $ProfileName değişkenini oluşturur.
#In UtilityFunctions.ps1
function New-Profile
{
Write-Host "Running New-Profile function"
$profileName = Split-Path $PROFILE -Leaf
if (Test-Path $PROFILE)
{Write-Error "Profile $profileName already exists on this computer."}
else
{New-Item -Type File -Path $PROFILE -Force }
}
UtilityFunctions.ps1 betiğini kendi betik kapsamında çalıştırırsanız, New-Profile işlevi ve $ProfileName değişkeni yalnızca betik çalışırken bulunur. Betik sona erdiğinde, aşağıdaki örnekte gösterildiği gibi fonksiyon ve değişken kaldırılır.
C:\PS> .\UtilityFunctions.ps1
C:\PS> New-Profile
The term 'New-Profile' is not recognized as a cmdlet, function, operable
program, or script file. Verify the term and try again.
At line:1 char:12
+ New-Profile <<<<
+ CategoryInfo : ObjectNotFound: (New-Profile:String) [],
+ FullyQualifiedErrorId : CommandNotFoundException
C:\PS> $profileName
C:\PS>
Betiğin kaynağını belirttiğinizde ve çalıştırdığınızda, betik New-Profile işlevini ve kapsamınızdaki oturumunuzda $ProfileName değişkenini oluşturur. Betik çalıştırıldıktan sonra, aşağıdaki örnekte gösterildiği gibi oturumunuzda New-Profile işlevini kullanabilirsiniz.
C:\PS> . .\UtilityFunctions.ps1
C:\PS> New-Profile
Directory: C:\Users\juneb\Documents\WindowsPowerShell
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 1/14/2009 3:08 PM 0 Microsoft.PowerShellISE_profile.ps1
C:\PS> $profileName
Microsoft.PowerShellISE_profile.ps1
Kapsam hakkında daha fazla bilgi için bkz. about_Scopes.
Modüllerdeki betikler
Modül, birim olarak dağıtılabilir ilgili PowerShell kaynakları kümesidir. Betiklerinizi, işlevlerinizi ve diğer kaynaklarınızı düzenlemek için modülleri kullanabilirsiniz. Kodunuzu başkalarına dağıtmak ve güvenilen kaynaklardan kod almak için modülleri de kullanabilirsiniz.
Modüllerinize betikler ekleyebilir veya tamamen ya da öncelikli olarak bir betik ve destekleyici kaynaklardan oluşan, betik modülü adı verilen bir modül oluşturabilirsiniz. Betik modülü yalnızca .psm1 dosya uzantısına sahip bir betiktir.
Modüller hakkında daha fazla bilgi için bkz. about_Modules.
Diğer betik özellikleri
PowerShell,betiklerde kullanabileceğiniz birçok kullanışlı özelliğe sahiptir.
#Requires- Bir betiğin belirtilen modüller veya ek bileşenler ve belirli bir PowerShell sürümü olmadan çalışmasını önlemek için bir#Requiresdeyimi kullanabilirsiniz. Daha fazla bilgi için bkz: about_Requires.$PSCommandPath- Çalıştırılmakta olan betiğin tam yolunu ve adını içerir. Bu parametre tüm betiklerde geçerlidir. Bu otomatik değişken PowerShell 3.0'da kullanıma sunulmuştur.$PSScriptRoot- Betiğin çalıştırıldığı dizini içerir. PowerShell 2.0'da bu değişken yalnızca betik modüllerinde (.psm1) geçerlidir. PowerShell 3.0'da başlayarak tüm betiklerde geçerlidir.$MyInvocation-$MyInvocationotomatik değişkeni, nasıl başlatıldığı veya "çağrıldığı" da dahil olmak üzere mevcut betiğe dair bilgiler içerir. Bu değişkeni ve özelliklerini, betik çalıştığı sırada betik hakkında bilgi almak için kullanabilirsiniz. Örneğin,$MyInvocation. MyCommand.Path değişkeni betiğin yolunu ve dosya adını içerir.$MyInvocation. Satır, tüm parametreler ve değerler dahil olmak üzere betiği başlatan komutu içerir.PowerShell 3.0'da
$MyInvocation, geçerli betiği çağıran veya yürüten betik hakkında bilgi sağlayan iki yeni özelliğe sahiptir. Bu özelliklerin değerleri yalnızca çağıran bir komut dosyası olduğunda doldurulur.PSCommandPath, geçerli betiği çağıran veya çalıştıran betiğin tam yolunu ve adını içerir.
PSScriptRoot, geçerli betiği çalıştıran veya çağıran betiğin dizinini içerir.
Geçerli betik hakkında bilgi içeren
$PSCommandPathve$PSScriptRoototomatik değişkenlerinden farklı olarak, değişkeninin PSCommandPath ve$MyInvocationözellikleri, geçerli betiği çağıran betik hakkında bilgi içerir.Veri bölümleri - Betiklerdeki verileri mantıktan ayırmak için
Dataanahtar sözcüğünü kullanabilirsiniz. Veri bölümleri yerelleştirmeyi de kolaylaştırabilir. Daha fazla bilgi için bkz. about_Data_Sections ve about_Script_Internationalization.Komut Dosyası İmzalama - Komut dosyalarına dijital imza ekleyebilirsiniz. Yürütme ilkesine bağlı olarak, güvenli olmayan komutlar içerebilecek betiklerin çalıştırılmasını kısıtlamak için dijital imzaları kullanabilirsiniz. Daha fazla bilgi için bkz. about_Execution_Policies ve about_Signing.
Ayrıca bakınız
PowerShell