about_Scripts
Kısa açıklama
PowerShell'de betikleri ç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 betikleri bir dosya .ps1 uzantısına sahip.
Betik çalıştırma, cmdlet çalıştırmaya çok benzer. Betiğin yolunu ve dosya adını yazın, verileri göndermek ve seçenekleri ayarlamak için parametreleri kullanın. Betikleri bilgisayarınızda veya farklı bir bilgisayarda uzak oturumda çalıştırabilirsiniz.
Betik yazmak, daha sonra kullanmak üzere bir komutu kaydeder ve başkalarını paylaşmayı kolaylaştırır. En önemlisi, komut dosyasının yolunu ve dosya adını yazarak komutları çalıştırmaya olanak sağlar. Betikler bir dosyada tek bir komut kadar basit veya karmaşık bir program kadar kapsamlı olabilir.
Betikler özel açıklama, parametrelerin kullanımı, veri bölümleri için destek ve güvenlik için dijital imzalama #Requires gibi ek özelliklere sahiptir.
Betikler ve betikte herhangi bir işlev için Yardım konuları da yazabilirsiniz.
Betik çalıştırma
Bir betiği çalışma Windows önce varsayılan PowerShell yürütme ilkesi değiştir gerekir. Yürütme ilkesi, standart olmayan platformlarda çalışan PowerShell için Windows değildir.
Varsayılan yürütme ilkesi olan Restricted , yerel bilgisayarda yazarak betikler de dahil olmak üzere tüm betiklerin çalışmasını önler. Daha fazla bilgi için bkz. about_Execution_Policies.
Yürütme ilkesi kayıt defterine kaydedilir, bu nedenle bunu her bilgisayarda yalnızca bir kez değiştirebilirsiniz.
Yürütme ilkesi değiştirmek için aşağıdaki yordamı kullanın.
Komut istemine şunları yazın:
Set-ExecutionPolicy AllSigned
veya
Set-ExecutionPolicy RemoteSigned
Değişiklik hemen geçerli olur.
Bir 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ği çalıştırmak için 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 temsil eden bir nokta kullanın ve ardından bir yol ters eğik çizgi () .\ kullanın.
Örneğin, yerel dizinde ServicesLog.ps1 betiği çalıştırmak için yazın:
.\Get-ServiceLog.ps1
Betiğin parametreleri varsa, betik dosya adı'nın ardından parametreleri ve parametre değerlerini yazın.
Örneğin, aşağıdaki komut WinRM hizmet etkinliğinin günlüğünü Get-ServiceLog için Get-ServiceLog ServiceName parametresini kullanır.
.\Get-ServiceLog.ps1 -ServiceName WinRM
Güvenlik özelliği olarak PowerShell, Dosya Gezgini'da betik simgesine çift tıklarsanız veya betik geçerli dizinde olsa bile tam yol olmadan betik adını yazarak 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şarak betikleri Dosya Gezgini.
"PowerShell ile çalıştır" özelliğini kullanmak için:
Komut Dosya Gezgini, 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 olan ve komut istemine çıkış getiren 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 FilePath Invoke-Command parametresini kullanın.
FilePath parametresinin değeri olarak betiğin yolunu ve dosya adını girin. Betik yerel bilgisayarda veya yerel bilgisayarın erişetiği bir dizinde yer a olmalıdır.
Aşağıdaki komut, Get-ServiceLog.ps1 Server01 ve Server02 adlı uzak bilgisayarlarda betiği çalıştırır.
Invoke-Command -ComputerName Server01,Server02 -FilePath `
C:\Scripts\Get-ServiceLog.ps1
Betikler için yardım alın
CmdletGet-Help betiklerin 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 yazın ve ardından Get-Help betiğin yolunu ve dosya adını yazın. Betik yolu ortam Path değişkeniniz içinde ise yolu atabilirsiniz.
Örneğin, aşağıdaki betiğin yardım ServicesLog.ps1 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 ile For döngüleri gibi denetim yapıları gibi herhangi bir geçerli PowerShell komutu içerebilir.
Betik yazmak için metin düzenleyicisinde yeni bir dosya açın, komutları yazın ve dosya uzantısına sahip geçerli bir dosya adı olan bir .ps1 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 ardından adlı bir dosyaya ServiceLog.ps1 kaydedin.
Betiklerde parametreler
Betikte parametreleri tanımlamak için Param deyimini kullanın. deyimi, Param açıklamalar ve deyimler dışında bir betikte ilk deyim #Require olması gerekir.
Betik parametreleri işlev parametreleri gibi çalışır. Parametre değerleri betikte yer alan tüm komutlar tarafından kullanılabilir. Parameter ö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ırarak betik kullanıcıları betik adının ardından parametreleri yazarak.
Aşağıdaki örnekte Test-Remote.ps1 ComputerName parametresine sahip bir betik gösterir. Betik işlevlerinin her ikisi de ComputerName parametre değerine erişebilirsiniz.
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ının ardından parametre adını yazın. Örnek:
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.
Betikler için yardım yazma
Aşağıdaki iki yöntemden birini kullanarak bir betik için yardım konusu yazabilirsiniz:
Comment-Based Iç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 betik dosyasının başına veya sonuna yerleştirilleri gerekir. Açıklama tabanlı Yardım hakkında daha fazla bilgi için bkz. about_Comment_Based_Help.
XML-Based için Yardım
Normalde cmdlet'ler için oluşturulan tür gibi XML tabanlı bir Yardım konusu oluşturun. Yardım konularını birden çok dile aktarıyorsanız XML tabanlı Yardım gereklidir.
Betiği XML tabanlı Yardım konusuyla ilişkilendirmek için kullanın. ExternalHelp Yardım açıklaması anahtar sözcüğü. ExternalHelp anahtar sözcüğü hakkında daha fazla bilgi için bkz. about_Comment_Based_Help. XML tabanlı yardım hakkında daha fazla bilgi için bkz. How to Write Cmdlet Help.
Çıkış değeri döndüren
Betik sona erdiğinde betikler varsayılan olarak bir çıkış durumu dönmez. Betikten exit çıkış kodu dönmek için deyimini kullanabilirsiniz. Varsayılan olarak deyimi exit 0 döndürür. Farklı bir çıkış durumu dönmek için sayısal bir değer s getirsiniz. Sıfır olmayan çıkış kodu genellikle bir hata olduğunu işaret eder.
Bu Windows arasında herhangi bir [int]::MinValue sayıya [int]::MaxValue izin verilir.
Unix'te yalnızca [byte]::MinValue (0) ile [byte]::MaxValue (255) arasındaki pozitif sayılara izin verilir. ile aralığındaki negatif bir -1 -255 sayı, ekleyerek otomatik olarak pozitif sayıya çevrilir
256. Örneğin, -2 olarak 254 dönüştürülmesi.
PowerShell'de exit deyimi değişkenin değerini $LASTEXITCODE ayarlar. komut Windows (cmd.exe), exit deyimi ortam değişkeninin %ERRORLEVEL% değerini ayarlar.
Sayısal olmayan veya platforma özgü aralığın dışındaki bağımsız değişkenler değerine 0 çevrilir.
Betik kapsamı ve nokta kaynak kullanımı
Her 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 mevcuttur. Bu öğelere veya bunların değerlerine betiğin çalıştır olduğu kapsamda erişesiniz.
Bir betiği farklı bir kapsamda çalıştırmak için Genel veya Yerel gibi bir kapsam belirterek veya betiğin kaynağını nokta olarak belirterek.
Nokta kaynak özelliği, betik kapsamı yerine geçerli kapsamda bir betik çalıştırmaya olanak sağlar. Nokta kaynaklı bir betiği çalıştırarak komut isteminde bunları yazdınız gibi betikte komutlar çalıştırabilirsiniz. Betiğin oluşturduğu işlevler, değişkenler, diğer adlar ve sürücüler, çalışmakta olduğunuz kapsamda oluşturulur. Betik çalıştırılana kadar oluşturulan öğeleri kullanabilir ve oturumdaki değerlerine erişebilirsiniz.
Bir betiğin kaynağını noktalı olarak bağlamak için, betik yolundan önce bir nokta (.) ve boşluk yazın.
Örnek:
. C:\scripts\UtilityFunctions.ps1
veya
. .\UtilityFunctions.ps1
Betik UtilityFunctions.ps1 çalıştırktan sonra, betiğin oluşturduğu işlevler ve değişkenler geçerli kapsama eklenir.
Örneğin, UtilityFunctions.ps1 betik işlevi New-Profile ve değişkeni $ProfileName 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 }
}
Betiği kendi UtilityFunctions.ps1 betik kapsamında çalıştırsanız, New-Profile işlev ve değişken yalnızca $ProfileName betik çalışırken mevcuttur. Betik çıkışta, aşağıdaki örnekte gösterildiği gibi işlev 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ı noktalatır ve çalıştırabilirsiniz. Betik, işlevi ve değişkeni sizin New-Profile $ProfileName kapsamınız içinde oturumda oluşturur. Betik çalıştırktan sonra, aşağıdaki New-Profile örnekte gösterildiği gibi işlevini oturumda 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üllerde betikler
Modül, birim olarak dağıtılacak bir dizi ilgili PowerShell kaynağıdır. Betiklerinizi, işlevlerinizi ve diğer kaynaklarınızı düzenlemek için modülleri kullanabilirsiniz. Ayrıca, kodunuzu başkalarına dağıtmak ve güvenilen kaynaklardan kod almak için modülleri kullanabilirsiniz.
Modüllerinize betikler dahil etmek veya bir betik modülünü oluşturabilirsiniz. Bu modül, tamamen veya öncelikli olarak bir betik ve destekleyen kaynakları içeren bir modüldür. 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' in betiklerde kullanabileceğiniz birçok yararlı özelliği vardır.
#Requires- Bir betiğin belirtilen modüller veya ek bileşenler ve belirli bir PowerShell sürümü olmadan çalıştırılamı önlemek#Requiresiçin deyimini kullanabilirsiniz. Daha fazla bilgi için bkz. about_Requires.$PSCommandPath- Çalıştıracak 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 tanıtıldı.$PSScriptRoot- Betiğin çalıştır olduğu dizini içerir. PowerShell 2.0'da bu değişken yalnızca betik modüllerde ( ).psm1geçerlidir. PowerShell 3.0'dan itibaren tüm betiklerde geçerlidir.$MyInvocation-$MyInvocationOtomatik değişken, geçerli betik hakkında, nasıl başlatıldı veya "çağrıldı" gibi bilgiler içerir. Betik çalışırken betik hakkında bilgi almak için bu değişkeni ve özelliklerini 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'dan itibaren, geçerli betiği çağıran veya çağıran betik hakkında bilgi sağlayan
$MyInvocationiki yeni özellik vardır. Bu özelliklerin değerleri yalnızca çağıran veya çağıran bir betik olduğunda doldurulur.PSCommandPath, geçerli betiği çağıran veya çağıran betiğin tam yolunu ve adını içerir.
PSScriptRoot, geçerli betiği çağıran veya çağıran betiğin dizinini içerir.
Değişkenin
$PSCommandPath$PSScriptRootPSCommandPath ve PSScriptRoot özellikleri, geçerli betik hakkında bilgi içeren ve otomatik değişkenlerinin aksine, geçerli betiği çağıran betik$MyInvocationhakkında bilgi içerir.Veri bölümleri - Betiklerde verileri
Datamantıktan ayırmak için anahtar sözcüğünü kullanabilirsiniz. Veri bölümleri yerelleştirmeyi de kolaylaştırabilirsiniz. Daha fazla bilgi için bkz. about_Data_Sections ve about_Script_Internationalization.Betik İmzalama - Bir betike dijital imza ekleme. Yürütme ilkesine bağlı olarak, güvenli olmayan komutlar dahil olabilecek betiklerin yürütülmesini kısıtlamak için dijital imzalar kullanabilirsiniz. Daha fazla bilgi için bkz. about_Execution_Policies ve about_Signing.