about_Scripts

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 dosya uzantısı vardır .ps1 .

Betik çalıştırmak, cmdlet çalıştırmaya çok benzer. Betiğin yolunu ve dosya adını yazar, 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 özel açıklama, parametre kullanımı, veri bölümleri için destek ve güvenlik için dijital imzalama gibi #Requires 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.

Varsayılan yürütme ilkesi, Restrictedyerel 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 dizinindeki 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 temsil etmek için bir nokta kullanın ve ardından bir yol ters eğik çizgi (.\ ).

Örneğin, ServicesLog.ps1 betiğini yerel dizinde çalıştırmak için şunu yazın:

.\Get-ServiceLog.ps1

Betikte parametreler varsa, betik dosya adından sonra 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 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ır

PowerShell 3.0'dan başlayarak, Dosya Gezgini betikleri çalıştırabilirsiniz.

"PowerShell ile Çalıştır" özelliğini kullanmak için:

Dosya Gezgini ç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 FilePath parametresini Invoke-Command kullanın.

FilePath parametresinin değeri olarak betiğin yolunu ve dosya adını girin. Betik yerel bilgisayarda veya yerel bilgisayarın erişebileceği bir dizinde bulunmalıdır.

Aşağıdaki komut, komut dosyasını Server01 ve Server02 adlı uzak bilgisayarlarda çalıştırır Get-ServiceLog.ps1 .

Invoke-Command -ComputerName Server01,Server02 -FilePath `
  C:\Scripts\Get-ServiceLog.ps1

Betikler için yardım alma

Yardım Al cmdlet'i, 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, betiğin yolunu ve dosya adını yazın Get-Help . Betik yolu ortam değişkeninizdeyse Path yolu atlayabilirsiniz.

Ö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ı gibi geçerli powershell komutlarını 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ına sahip bir dosyaya .ps1 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 adlı ServiceLog.ps1bir dosyaya kaydedin.

Betiklerdeki parametreler

Betikte parametre tanımlamak için Param deyimini kullanın. Deyim Param , açıklamalar ve deyimler #Require dışında bir betikteki ilk deyim olmalıdır.

Betik parametreleri işlev 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 ComputerName parametresi olan bir Test-Remote.ps1 betik 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.

Betikler için yardım yazma

Aşağıdaki iki yöntemden birini kullanarak bir betik için yardım konusu yazabilirsiniz:

  • Betikler için Açıklama Tabanlı 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.

  • Betikler için XML Tabanlı 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 kullanın. ExternalHelp Yardım açıklama 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 Yardımı.

Çıkış değeri döndürme

Varsayılan olarak, betik sona erdiğinde betikler çıkış durumu döndürmez. Betikten çıkış kodu döndürmek için deyimini exit kullanmanız gerekir. Deyimi varsayılan olarak exit döndürür 0. 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 ve arasında [int]::MinValue [int]::MaxValue herhangi bir sayıya izin verilir.

Unix'te yalnızca (0) ile [byte]::MaxValue (255) arasında [byte]::MinValue pozitif sayılara izin verilir. ile -255 aralığındaki -1 negatif bir sayı, 256 eklenerek otomatik olarak pozitif bir sayıya çevrilir. Örneğin, -2 olarak 254dönüştürülür.

PowerShell'de exit deyimi değişkeninin $LASTEXITCODE değerini ayarlar. Windows Komut Kabuğu'nda (cmd.exe), exit deyimi ortam değişkeninin %ERRORLEVEL% değerini ayarlar.

Sayısal olmayan veya platforma özgü aralığın dışında olan tüm bağımsız değişkenler değerine çevrilir 0.

Betik kapsamı ve nokta kaynağını belirleme

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 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ğin kaynağını noktalayabilirsiniz.

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

Betik çalıştırıldıktan UtilityFunctions.ps1 sonra, betiğin oluşturduğu işlevler ve değişkenler geçerli kapsama eklenir.

Örneğin, UtilityFunctions.ps1 betik işlevi ve değişkenini $ProfileName oluştururNew-Profile.

#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 betik kapsamında çalıştırırsanız UtilityFunctions.ps1 , New-Profile işlev ve $ProfileName değişken yalnızca betik çalışırken vardır. Betik çıktığında, 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ı belirttiğinizde ve çalıştırdığınızda, betik kapsamınızda oturumunuzda işlevi ve $ProfileName değişkeni oluştururNew-Profile. Betik çalıştırıldıktan sonra, aşağıdaki örnekte gösterildiği gibi oturumunuzda işlevini kullanabilirsiniz New-Profile .

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 veya öncelikli olarak bir betik ve destekleyici kaynaklardan oluşan bir modül olan bir betik 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 deyimini kullanabilirsiniz #Requires . 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 - Otomatik $MyInvocation değişken, nasıl başlatıldığı veya "çağrıldığı" hakkında bilgiler de dahil olmak üzere geçerli betik hakkında bilgiler içerir. Betik çalışırken betik hakkında bilgi almak için bu değişkeni ve bu değişkenin ö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'da başlayarak, $MyInvocation geçerli betiği çağıran veya çağıran betik hakkında bilgi sağlayan iki yeni özelliği 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.

    $PSCommandPath Geçerli betik hakkında bilgi içeren ve $PSScriptRoot otomatik değişkenlerinden farklı olarak, değişkenin PSCommandPath ve PSScriptRoot özellikleri $MyInvocation geçerli betiği çağıran betik hakkında bilgi içerir.

  • Veri bölümleri - Betiklerdeki verileri mantıktan ayırmak için anahtar sözcüğünü Data kullanabilirsiniz. Veri bölümleri yerelleştirmeyi de kolaylaştırabilir. Daha fazla bilgi için bkz . about_Data_Sections ve about_Script_Internationalization.

  • Betik İmzalama - Betiklere 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 bkz.