Aracılığıyla paylaş


hakkında_Otomatik_Değişkenler

Kısa açıklama

PowerShell tarafından oluşturulan ve korunan durum bilgilerini depolayan değişkenleri açıklar.

Uzun açıklama

Kavramsal olarak, bu değişkenlerin çoğu salt okunur olarak kabul edilir. yazılabilir olsa da geriye dönük uyumluluk için yazılmamalıdır.

PowerShell'deki otomatik değişkenlerin listesi aşağıdadır:

$$

Oturum tarafından alınmış son satırdaki son belirteci içerir.

$?

Son komutun yürütme durumunu içerir. Son komutun başarılı olup olmadığını True ve başarısız olursa False içerir. Ayrıştırma hataları yürütmeye neden olmadığından $?değerini etkilemez.

bir işlem hattında birden çok aşamada çalıştırılan cmdlet'ler ve gelişmiş işlevler için, örneğin hem process hem de end bloklarında, herhangi bir noktada sırasıyla this.WriteError() veya $PSCmdlet.WriteError() çağrılması $?Falseolarak ayarlar; bu durum this.ThrowTerminatingError() ve $PSCmdlet.ThrowTerminatingError()için de geçerlidir.

Write-Error cmdlet'i, her zaman yürütüldükten hemen sonra $?'i False olarak ayarlar, ancak çağıran bir işlev için $?'ü False olarak ayarlamaz:

function Test-WriteError
{
    Write-Error "Bad"
    "The `$? variable is: $?"
}

Test-WriteError
"Now the `$? variable is: $?"
Test-WriteError:
Line |
   7 |  Test-WriteError
     |  ~~~~~~~~~~~~~~~
     | Bad
The $? variable is: False
Now the $? variable is: True

İkinci amaç için bunun yerine $PSCmdlet.WriteError() kullanılmalıdır.

Yerel komutlar (yürütülebilir dosyalar) için $?, 0 olduğunda $LASTEXITCODE olarak ayarlanır ve başka bir değer olduğunda $LASTEXITCODE olarak ayarlanır.

Not

PowerShell 7'ye kadar, ifadeyi parantez içinde sarmak , alt ifadenin söz dizimi veya dizi ifadesi her zaman 'u Doğruolarak sıfırlardı. Örneğin, (Write-Error)$?Trueolarak gösterir. Bu davranış PowerShell 7'de değiştirildiğinden, $? her zaman bu ifadelerdeki son komut çalıştırmasının gerçek başarısını yansıtır.

$^

Oturum tarafından alınan son satırdaki ilk belirteci içerir.

$_

$PSItemile aynıdır. İşlem hattı nesnesindeki mevcut nesneyi içerir. Bu değişkeni, işlem hattındaki her nesne üzerinde eylem gerçekleştiren komutlarda kullanabilirsiniz.

Daha fazla bilgi için bkz. about_PSItem.

$args

Bir işleve, betike veya betik bloğuna geçirilen bildirilmemiş parametreler için bir değer dizisi içerir. İşlev oluşturduğunuzda, param anahtar sözcüğüyle veya işlev adından sonra parantez içinde virgülle ayrılmış bir parametre listesi ekleyerek parametreleri bildirebilirsiniz.

Bir olay eyleminde, $args değişkeni işlenen olayın olay bağımsız değişkenlerini temsil eden nesneler içerir. Bu değişken yalnızca bir olay kayıt komutunun Action bloğu içinde doldurulur. Bu değişkenin değeri, döndüren PSEventArgs nesnesinin Get-Event özelliğinde de bulunabilir.

$ConsoleFileName

Oturumda en son kullanılan konsol dosyasının (.psc1) yolunu içerir. Bu değişken, PowerShell'i PSConsoleFile parametresiyle başlattığınızda veya ek bileşen adlarını bir konsol dosyasına aktarmak için Export-Console cmdlet'ini kullandığınızda doldurulur.

Export-Console cmdlet'ini parametresiz kullandığınızda, oturumda en son kullanılan konsol dosyasını otomatik olarak güncelleştirir. Güncelleştirilecek dosyayı belirlemek için bu otomatik değişkeni kullanabilirsiniz.

$EnabledExperimentalFeatures

Etkinleştirilen deneysel özelliklerin adlarının listesini içerir.

$Error

En son hataları temsil eden bir hata nesneleri dizisi içerir. En son hata, dizi $Error[0]içindeki ilk hata nesnesidir.

$Error dizisine hata eklenmesini önlemek için ErrorAction common parametresini Ignoredeğeriyle kullanın. Daha fazla bilgi için bkz. about_CommonParameters.

$Event

İşlenmekte olan olayı temsil eden bir PSEventArgs nesnesi içerir. Bu değişken yalnızca Actiongibi bir olay kayıt komutunun Register-ObjectEvent bloğu içinde doldurulur. Bu değişkenin değeri, Get-Event cmdlet'inin döndürdüğü nesneyle aynıdır. Bir betik bloğunda değişkeninin Event özelliklerini (gibi$Event.TimeGeneratedAction) kullanabilirsiniz.

$EventArgs

İşlenmekte olan olayın EventArgs'den türetilen ilk olay bağımsız değişkenini temsil eden bir nesne içerir. Bu değişken yalnızca bir olay kayıt komutunun Action bloğu içinde doldurulur. Bu değişkenin değeri, döndüren PSEventArgs nesnesinin Get-Event özelliğinde de bulunabilir.

$EventSubscriber

İşlenmekte olan olayın olay abonesini temsil eden bir PSEventSubscriber nesnesi içerir. Bu değişken yalnızca bir olay kayıt komutunun Action bloğu içinde doldurulur. Bu değişkenin değeri, Get-EventSubscriber cmdlet'inin döndürdüğü nesneyle aynıdır.

$ExecutionContext

PowerShell konağının yürütme bağlamını temsil eden bir EngineIntrinsics nesnesi içerir. Cmdlet'ler için kullanılabilen yürütme nesnelerini bulmak için bu değişkeni kullanabilirsiniz.

$false

Falseiçerir. dizesini kullanmak yerine komutlarda ve betiklerde "false" göstermek için bu değişkeni kullanabilirsiniz. Dize, boş olmayan bir dizeye veya sıfır olmayan bir tamsayıya dönüştürülürse True olarak yorumlanabilir.

$foreach

bir foreach döngüsünün numaralandırıcısını (sonuçta elde edilen değerleri değil) içerir. $foreach değişkeni yalnızca foreach döngüsü çalışırken bulunur; döngü tamamlandıktan sonra silinir.

Numaralandırıcılar, döngü değerlerini almak ve geçerli döngü yinelemesini değiştirmek için kullanabileceğiniz özellikler ve yöntemler içerir. Daha fazla bilgi için bkz. Numaralandırıcıları Kullanma.

$HOME

Kullanıcının giriş dizininin tam yolunu içerir. Windows'da, bu değişken genellikle "$Env:USERPROFILE"C:\Users\<UserName> Windows ortam değişkeninin değerini kullanır. Unix'te, bu değişken HOME ortam değişkeninin değerini kullanır.

Önemli

Windows, kullanıcı profilinin konumunu yeniden yönlendirebilir. Bu, $HOME"$Env:HOMEDRIVE$Env:HOMEPATH"ile aynı değere sahip olmadığı anlamına gelir.

$Host

PowerShell için geçerli konak uygulamasını temsil eden bir nesne içerir. Bu değişkeni, komutlarda geçerli konağı temsil etmek veya $Host.Version veya $Host.CurrentCultureya da $Host.UI.RawUI.BackGroundColor = "Red"gibi konağın özelliklerini görüntülemek veya değiştirmek için kullanabilirsiniz.

Not

$Host.PrivateData renk ayarları, $PSStyle tercih değişkeniyle değiştirilmiştir. Daha fazla bilgi için bkz. about_ANSI_Terminals.

$input

bir işleve geçirilen tüm girişleri numaralandıran bir numaralandırıcı içerir. $input Değişkeni yalnızca işlevler, betik blokları (adsız işlevler) ve betik dosyaları (kaydedilen betik blokları) için kullanılabilir.

  • begin, processveya end bloğu olmayan bir işlevde, $input değişkeni işleve tüm girişlerin koleksiyonunu numaralandırır.

  • begin bloğunda $input değişkeni veri içermez.

  • process bloğunda, $input değişkeni işlem hattındaki geçerli nesneyi içerir.

  • end bloğunda, $input değişkeni işleve yönelik tüm girişlerin koleksiyonunu numaralandırır.

    Not

    Hem bloğun $input hem de bloğun processend içindeki değişkeni aynı işlevde veya betik bloğunda kullanamazsınız.

$input bir numaralandırıcı olduğundan, özelliklerinden herhangi birine erişmek $input artık kullanılabilir olmamasına neden olur. $input özelliklerini yeniden kullanmak için $input başka bir değişkende depolayabilirsiniz.

Numaralandırıcılar, döngü değerlerini almak ve geçerli döngü yinelemesini değiştirmek için kullanabileceğiniz özellikler ve yöntemler içerir. Daha fazla bilgi için bkz. Numaralandırıcıları Kullanma.

$input değişkeni, komut satırından çağrıldığında -Commandpwsh parametresi tarafından belirtilen komut için de kullanılabilir. Aşağıdaki örnek, Windows Komut kabuğundan çalıştırılır.

echo Hello | pwsh -Command """$input World!"""

$IsCoreCLR

Geçerli oturum .NET Core Çalışma Zamanı'nda (CoreCLR) çalışıyorsa $true içerir. Aksi takdirde $falseiçerir.

$IsLinux

Geçerli oturum bir Linux işletim sisteminde çalışıyorsa $true içerir. Aksi takdirde $falseiçerir.

$IsMacOS

Geçerli oturumun bir macOS işletim sisteminde çalışıp çalışmadığını $true içerir. Aksi takdirde $falseiçerir.

$IsWindows

Geçerli oturumun bir Windows işletim sisteminde çalışıp çalışmadığını $true içerir. Aksi takdirde $falseiçerir.

$LASTEXITCODE

Çalıştıran son yerel programın veya PowerShell betiğinin çıkış kodunu içerir.

PowerShell betikleri için $LASTEXITCODE değeri, betiğin nasıl çağrıldığı ve exit anahtar sözcüğün kullanılıp kullanılmadığına bağlıdır:

  • Bir betik exit anahtar sözcüğünü kullandığında:

    $LASTEXITCODE, exit anahtar sözcüğü tarafından belirtilen değere ayarlanır. Daha fazla bilgi için bkz. about_Language_Keywords.

  • Bir betik, ./Test.ps1gibi doğrudan çağrıldığında veya çağrı işleci (&) ile & ./Test.ps1gibi çalıştırıldığında:

    $LASTEXITCODE değeri aşağıdakiler dışında değiştirilmez:

    • Betik, exit anahtar sözcüğünü kullanan başka bir betiği çağırır
    • Betik yerel bir komutu çalıştırır.
    • Betik exit anahtar sözcüğünü kullanır
  • pwsh parametresi kullanılarak ile bir betik çağrıldığında, $LASTEXITCODE şu şekilde ayarlanır:

    • 1 bir özel durum nedeniyle betik sonlandırıldığında
    • Betikte kullanılıyorsa exit anahtar sözcüğü tarafından belirtilen değer
    • 0 betik başarıyla tamamlandıysa
  • pwsh parametresi kullanılarak ile bir betik çağrıldığında, $LASTEXITCODE olarak ayarlanır:

    • Betiğin bir özel durum nedeniyle sonlandırıldığı veya son komutun sonucunun 1'i $? olarak ayarladığı durumlarda $false.
    • 0 betik başarıyla tamamlandıysa ve son komutun sonucu $? olarak $true'ye ayarlandıysa

Dosya ve Command parametreleri hakkında daha fazla bilgi için bkz. about_Pwsh.

$Matches

$Matches değişkeni -match ve -notmatch işleçleriyle çalışır. veya -match işlecine -notmatch girişi gönderdiğinizde ve bunlardan biri eşleşme algıladığında, bu işleçler bir boole değeri döndürür ve $Matches otomatik değişkenini eşleşen dize değerlerinin bir karma tablosuyla doldururlar. $Matches karma tablosu, -match işleciyle normal ifadeler kullandığınızda yakalamalarla da doldurulabilir.

-match işleci hakkında daha fazla bilgi almak için about_Comparison_Operators'ye bakın. Normal ifadeler hakkında daha fazla bilgi için bkz. about_Regular_Expressions.

$Matches değişkeni, switch parametresiyle bir -Regex deyiminde de çalışır. -match ve -notmatch işleçleri ile aynı şekilde doldurulur. switch deyimi hakkında daha fazla bilgi için bkz. about_Switch.

Not

Bir oturumda $Matches popüle edildiğinde, başka bir eşleşme tarafından üzerine yazılana kadar eşleşmiş değeri korur. -match yeniden kullanılırsa ve eşleşme bulunmazsa, $Matches$null'ye sıfırlanmaz. Daha önce eşleşen değer, başka bir eşleşme bulunana kadar $Matches içinde tutulur.

$MyInvocation

Geçerli komutla ilgili ad, parametreler, parametre değerleri gibi bilgileri ve komutun nasıl başlatıldığı, çağrıldığı veya çağrıldığı hakkındaki bilgileri (geçerli komutu çağıran betiğin adı gibi) içerir.

$MyInvocation yalnızca betikler, işlev ve betik engellemeleri için doldurulur. Geçerli komutu tanımlamak için geçerli betikte döndüren $MyInvocation nesnesindeki bir işlevin adı ($MyInvocation.MyCommand.Name) gibi bilgileri kullanabilirsiniz. Bu, geçerli betiğin adını bulmak için yararlıdır.

PowerShell 3.0 sürümünden başlayarak MyInvocation aşağıdaki yeni özelliklere sahiptir.

  • PSScriptRoot - Geçerli komutu çağıran betiğin tam yolunu içerir. Bu özelliğin değeri yalnızca çağıran betik olduğunda doldurulur.
  • PSCommandPath - Geçerli komutu çağıran betiğin tam yolunu ve dosya adını içerir. Bu özelliğin değeri yalnızca çağıran betik olduğunda doldurulur.

$PSScriptRoot ve $PSCommandPath otomatik değişkenlerinden farklı olarak, otomatik değişkeninin PSScriptRoot ve $MyInvocation özellikleri geçerli betikten değil, çağıran veya çalıştıran betik hakkında bilgi içerir.

$NestedPromptLevel

Geçerli istem düzeyini içerir. 0 değeri özgün istem düzeyini gösterir. İç içe bir düzeye girdiğinizde değer artırılır ve çıktığınızda azaltılır.

Örneğin, $Host.EnterNestedPrompt yöntemini kullandığınızda PowerShell iç içe bir komut istemi sunar. PowerShell, PowerShell hata ayıklayıcısında bir kesme noktasına ulaştığınızda iç içe bir komut istemi de sunar.

İç içe bir istem girdiğinizde PowerShell geçerli komutu duraklatır, yürütme bağlamını kaydeder ve $NestedPromptLevel değişkeninin değerini artırır. ek iç içe komut istemleri (en fazla 128 düzey) oluşturmak veya özgün komut istemine dönmek için, komutu tamamlayın veya exityazın.

$NestedPromptLevel değişkeni, istem düzeyini izlemenize yardımcı olur. Her zaman görünür olması için bu değeri içeren alternatif bir PowerShell komut istemi oluşturabilirsiniz.

$null

$null, null veya boş değer içeren otomatik bir değişkendir. Komutlarda ve betiklerde eksik veya tanımsız bir değeri göstermek için bu değişkeni kullanabilirsiniz.

PowerShell $null bir değerle veya yer tutucuyla bir nesne olarak ele alır, böylece değer koleksiyonundaki boş bir değeri temsil etmek için $null kullanabilirsiniz.

Örneğin, $null bir koleksiyona dahil edildiğinde nesnelerden biri olarak sayılır.

$a = "one", $null, "three"
$a.Count
3

$null değişkenini ForEach-Object cmdlet'ine aktarırsanız, diğer nesnelerde olduğu gibi $nulliçin bir değer oluşturur.

"one", $null, "three" | ForEach-Object {"Hello " + $_}
Hello one
Hello
Hello three

Sonuç olarak,parametre değeri olmadan anlamına kullanamazsınız. $null parametre değeri, varsayılan parametre değerini geçersiz kılar.

Ancak, PowerShell $null değişkenini yer tutucu olarak değerlendirdiğinden, bunu aşağıdaki gibi betiklerde kullanabilirsiniz; bu, $null yoksayılırsa işe yaramaz.

$calendar = @($null, $null, "Meeting", $null, $null, "Team Lunch", $null)
$days = "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
        "Friday", "Saturday"
$currentDay = 0
foreach($day in $calendar)
{
    if($day -ne $null)
    {
        "Appointment on $($days[$currentDay]): $day"
    }

    $currentDay++
}
Appointment on Tuesday: Meeting
Appointment on Friday: Team lunch

$PID

Geçerli PowerShell oturumunu barındıran işlemin işlem tanımlayıcısını (PID) içerir.

$PROFILE

Geçerli kullanıcı ve geçerli konak uygulaması için PowerShell profilinin tam yolunu içerir. Komutlarda profili göstermek için bu değişkeni kullanabilirsiniz. Örneğin, bir profilin oluşturulup oluşturulmadığını belirlemek için bunu bir komutta kullanabilirsiniz:

Test-Path $PROFILE

İsterseniz, bunu bir komutta kullanarak profil oluşturabilirsiniz:

New-Item -ItemType File -Path $PROFILE -Force

Profili notepad.exeiçinde açmak için bir komutta kullanabilirsiniz:

notepad.exe $PROFILE

$PSBoundParameters

Betik veya işlevlere geçirilen parametrelerin ve bunların mevcut değerlerinin bir sözlüğünü içerir. Bu değişken yalnızca betik veya işlev gibi parametrelerin bildirildiği bir kapsamda bir değere sahiptir. Bunu kullanarak parametrelerin geçerli değerlerini görüntüleyebilir veya değiştirebilir ya da parametre değerlerini başka bir betik veya işleve geçirebilirsiniz.

Bu örnekte Test2 işlevi, $PSBoundParameters'yi Test1 işlevine iletir. $PSBoundParameters, Anahtar ve Değerbiçiminde görüntülenir.

function Test1 {
   param($a, $b)

   # Display the parameters in dictionary format.
   $PSBoundParameters
}

function Test2 {
   param($a, $b)

   # Run the Test1 function with $a and $b.
   Test1 @PSBoundParameters
}
Test2 -a Power -b Shell
Key   Value
---   -----
a     Power
b     Shell

$PSCmdlet

Çalıştırılmakta olan cmdlet'i veya gelişmiş işlevi temsil eden bir nesne içerir.

Kullanım koşullarına yanıt vermek için cmdlet veya işlev kodunuzda nesnenin özelliklerini ve yöntemlerini kullanabilirsiniz. Örneğin, ParameterSetName özelliği kullanılmakta olan parametre kümesinin adını içerir ve ShouldProcess yöntemi WhatIf ekler ve parametrelerini cmdlet'e dinamik olarak ekler.

$PSCmdlet otomatik değişkeni hakkında daha fazla bilgi için bkz. about_Functions_CmdletBindingAttribute ve about_Functions_Advanced.

$PSCommandPath

Çalıştırılmakta olan betiğin tam yolunu ve dosya adını içerir. Bu değişken tüm betiklerde geçerlidir.

$PSCulture

PowerShell 7'de $PSCulture, geçerli PowerShell çalışma alanının (oturum) kültürünü yansıtır. PowerShell çalışma alanında kültür değiştirilirse, bu çalışma alanının $PSCulture değeri güncelleştirilir.

Kültür, sayılar, para birimi ve tarihler gibi öğelerin görüntü biçimini belirler ve System.Globalization.CultureInfo nesnesinde depolanır. Bilgisayarın kültürünü görüntülemek için Get-Culture kullanın. $PSCulture, Adı özelliğinin değerini içerir.

$PSDebugContext

Hata ayıklama sırasında, bu değişken hata ayıklama ortamı hakkında bilgi içerir. Aksi takdirde, boş değeri içerir. Sonuç olarak, hata ayıklayıcının denetimi olup olmadığını belirlemek için bunu kullanabilirsiniz. Doldurulduğunda, Kesme Noktaları ve InvocationInfo özelliklerine sahip bir PsDebugContext nesnesini içerir. InvocationInfo özelliği, Konum özelliği de dahil olmak üzere çeşitli yararlı özelliklere sahiptir. Konum özelliği, hata ayıklanan betiğin yolunu gösterir.

$PSEdition

$PSVersionTable.PSEditioniçinde aynı değeri içerir. Bu değişken modül bildirim dosyalarında kullanılabilirken $PSVersionTable kullanılamaz.

$PSHOME

Windows sistemlerinde genellikle C:\Program Files\PowerShell\7 PowerShell yükleme dizininin tam yolunu içerir. Bu değişkeni PowerShell dosyalarının yollarında kullanabilirsiniz. Örneğin, aşağıdaki komut, "yardım" sözcüğü için kavramsal Yardım konularını arar.

Select-String -Pattern Help -Path $PSHOME\en-US\*.txt

$PSItem

$_ile aynıdır. İşlem hattı nesnesindeki mevcut nesneyi içerir. Bu değişkeni, işlem hattındaki her nesne üzerinde eylem gerçekleştiren komutlarda kullanabilirsiniz.

Daha fazla bilgi için bkz. about_PSItem.

$PSScriptRoot

Yürütülmekte olan betiğin ana dizininin tam yolunu 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.

$PSSenderInfo

PSSession'ı başlatan kullanıcı hakkında, kullanıcı kimliği ve kaynak bilgisayarın saat dilimi dahil olmak üzere bilgileri içerir. Bu değişken yalnızca PSSessions içinde kullanılabilir.

değişkeni, varsayılan olarak yalnızca kaynak oturumdaki 'ü içeren, kullanıcı tarafından yapılandırılabilir bir özellik olan "ApplicationArguments"içerir. ApplicationArguments özelliğine veri eklemek için cmdlet'in New-PSSessionOption parametresini kullanın.

$PSUICulture

İşletim sisteminde yapılandırılan kullanıcı arabirimi (UI) kültürünün adını içerir. Kullanıcı arabirimi kültürü, menüler ve iletiler gibi kullanıcı arabirimi öğeleri için hangi metin dizelerinin kullanılacağını belirler. Bu, sistemin System.Globalization.CultureInfo.CurrentUICulture.Name özelliğinin değeridir. Sistemin System.Globalization.CultureInfo nesnesini almak için Get-UICulture cmdlet'ini kullanın.

$PSVersionTable

Geçerli oturumda çalışan PowerShell sürümüyle ilgili ayrıntıları görüntüleyen salt okunur bir karma tablo içerir. Tablo aşağıdaki öğeleri içerir:

  • PSVersion - PowerShell sürüm numarası
  • PSEdition Bu özellik, PowerShell 4 ve altı için 'Desktop' değerine ve tam özellikli Windows sürümlerinde PowerShell 5.1'e sahiptir. Bu özellik, PowerShell 6 ve üzeri sürümler için yanı sıra Windows Nano Server veya Windows IoT gibi daraltılmış ayak izi sürümleri üzerindeki Windows PowerShell 5.1 için Core değerine sahiptir.
  • GitCommitId - GitHub'da kaynak dosyaların işleme kimliği,
  • işletim sistemi - PowerShell'in üzerinde çalıştığı işletim sisteminin açıklaması.
  • Platform - İşletim sisteminin üzerinde çalıştığı platform. Linux ve macOS'ta değer Unix. Bkz. $IsMacOS ve $IsLinux.
  • PSCompatibleVersions - PowerShell'in geçerli sürümle uyumlu sürümleri
  • PSRemotingProtocolVersion - PowerShell uzaktan yönetim protokolünün sürümü.
  • SerializationVersion - Serileştirme yönteminin sürümü
  • WSManStackVersion - WS-Management yığınının sürüm numarası

$PWD

Geçerli PowerShell çalışma alanı için geçerli dizin konumunun tam yolunu temsil eden bir yol nesnesi içerir.

Not

PowerShell, işlem başına birden çok çalışma alanı destekler. Her çalışma alanının kendi geçerli dizinivardır. Bu, işlemin geçerli diziniyle aynı değildir: [System.Environment]::CurrentDirectory.

$Sender

Bu olayı oluşturan nesneyi içerir. Bu değişken yalnızca bir olay kaydı komutunun Eylem bloğu içinde doldurulur. Bu değişkenin değeri, PSEventArgs döndüren Get-Event nesnesinin Sender özelliğinde de bulunabilir.

$ShellId

Mevcut kabuğun kimliğini içerir.

$StackTrace

En son hatanın yığın izlemesini içerir.

$switch

switch deyiminin sonuç değerlerini değil, numaralandırıcıyı içerir. $switch değişkeni yalnızca switch deyimi çalışırken bulunur; switch deyimi yürütmeyi tamamladığında silinir. Daha fazla bilgi için bkz. about_Switch.

Numaralandırıcılar, döngü değerlerini almak ve geçerli döngü yinelemesini değiştirmek için kullanabileceğiniz özellikler ve yöntemler içerir. Daha fazla bilgi için bkz. Numaralandırıcıları Kullanma.

$this

değişkeni, sınıfın $this kendi örneğine başvurmak için sınıfları genişleten betik bloklarında kullanılır.

PowerShell'in Genişletilebilir Tür Sistemi (ETS), betik bloklarını kullanarak sınıflara özellik eklemenize olanak tanır. Bir betik özelliğini veya betik yöntemini tanımlayan bir betik bloğunda $this değişken, genişletilmekte olan sınıfın bir nesnesi örneğine başvurur. Örneğin PowerShell, BaseName özelliğini FileInfo sınıfına eklemek için ETS kullanır.

PS> Get-ChildItem .\README.md | Get-Member BaseName | Format-List

TypeName   : System.IO.FileInfo
Name       : BaseName
MemberType : ScriptProperty
Definition : System.Object BaseName {get=if ($this.Extension.Length -gt 0)
             {$this.Name.Remove($this.Name.Length - $this.Extension.Length
             )}else{$this.Name};}

Daha fazla bilgi için bkz. about_Types.ps1xml.

PowerShell sınıfında, $this değişkeni sınıfın kendisinin örnek nesnesine başvurur ve sınıfta tanımlanan özelliklere ve yöntemlere erişim sağlar. Daha fazla bilgi için bkz. about_Classes.

değişkeni $this , betik bloklarını olay işleyicisi için temsilci olarak alan .NET olay sınıfları tarafından da kullanılır. Bu senaryoda, $this olayı gönderen olarak bilinen olayı oluşturan nesneyi temsil eder.

$true

Trueiçerir. Komutlarda ve betiklerde True göstermek için bu değişkeni kullanabilirsiniz.

Numaralandırıcıları kullanma

$input, $foreachve $switch değişkenleri, içeriklerinde tanımlı kod bloğu tarafından işlenen değerler arasında gezinmek için kullanılan numaralandırıcılar olarak kullanılır.

Numaralandırıcı, yinelemeyi ilerletmek veya sıfırlamak ya da yineleme değerlerini almak için kullanabileceğiniz özellikler ve yöntemler içerir. Numaralandırıcıları doğrudan düzenleme en iyi yöntem olarak kabul edilmez.

  • Döngüler içinde, akış kontrolü anahtar kelimeleri break ve continue tercih edilmelidir.

  • İşlem hattı girişini kabul eden işlevlerde, ValueFromPipeline veya ValueFromPipelineByPropertyName öznitelikleriyle parametreleri kullanmak en iyi yöntemdir.

    Daha fazla bilgi için bkz. about_Functions_Advanced_Parameters.

Sonrakine Geç

MoveNext yöntemi, numaralandırıcıyı koleksiyonun sonraki öğesine ilerler. MoveNext, numaralandırıcı başarıyla ilerletildiyse True döndürür, False numaralandırıcı koleksiyonun sonunu geçtiyse döndürür.

Not

MoveNext tarafından döndürülen Boole değeri çıkış akışına gönderilir. Çıktıyı [void]'a çevirerek veya Out-Nullyönlendirerek gizleyebilirsiniz.

$input.MoveNext() | Out-Null
[void]$input.MoveNext()

Reset

yöntemi, numaralandırıcıyı başlangıç konumuna ayarlar; bu konum, koleksiyondaki ilk öğeden önce 'dir.

Current

Current özelliği, numaralandırıcının geçerli konumundaki koleksiyondaki veya işlem hattındaki öğeyi alır.

Current özelliği, MoveNext çağrılana kadar aynı özelliği döndürmeye devam eder.

Örnekler

Örnek 1: $input değişkenini kullanma

Aşağıdaki örnekte, $input değişkenine erişmek, işlem bloğunun bir sonraki yürütülmesine kadar değişkeni temizler. Reset yöntemi kullanıldığında $input değişkeni geçerli işlem hattı değerine sıfırlanır.

function Test
{
    begin
    {
        $i = 0
    }

    process
    {
        "Iteration: $i"
        $i++
        "`tInput: $input"
        "`tAccess Again: $input"
        $input.Reset()
        "`tAfter Reset: $input"
    }
}

"one","two" | Test
Iteration: 0
    Input: one
    Access Again:
    After Reset: one
Iteration: 1
    Input: two
    Access Again:
    After Reset: two

İşlem bloğu, erişmeseniz bile $input değişkenini otomatik olarak ilerletir.

$skip = $true
function Skip
{
    begin
    {
        $i = 0
    }

    process
    {
        "Iteration: $i"
        $i++
        if ($skip)
        {
            "`tSkipping"
            $skip = $false
        }
        else
        {
            "`tInput: $input"
        }
    }
}

"one","two" | Skip
Iteration: 0
    Skipping
Iteration: 1
    Input: two

Örnek 2: İşlem bloğunun dışında $input kullanma

İşlem bloğunun dışında $input değişkeni işleve yöneltilen tüm değerleri temsil eder.

  • $input değişkenine erişmek tüm değerleri temizler.
  • Reset yöntemi koleksiyonun tamamını sıfırlar.
  • Current özelliği hiçbir zaman doldurulmaz.
  • MoveNext yöntemi, koleksiyon ilerletilemediği için false döndürür.
    • MoveNext çağrılması değişkenini temizler.
Function All
{
    "All Values: $input"
    "Access Again: $input"
    $input.Reset()
    "After Reset: $input"
    $input.MoveNext() | Out-Null
    "After MoveNext: $input"
}

"one","two","three" | All
All Values: one two three
Access Again:
After Reset: one two three
After MoveNext:

Örnek 3: $input.Current özelliğini kullanma

Current özelliğiyle, geçerli işlem hattı değerine Reset yöntemi kullanılmadan birden çok kez erişilebilir. İşlem bloğu MoveNext yöntemini otomatik olarak çağırmaz.

Current özelliği, MoveNextaçıkça çağırmadığınız sürece hiçbir zaman doldurulmaz. Current özelliğine işlem bloğunun içinde değerini temizlemeden birden çok kez erişilebilir.

function Current
{
    begin
    {
        $i = 0
    }

    process
    {
        "Iteration: $i"
        $i++
        "`tBefore MoveNext: $($input.Current)"
        $input.MoveNext() | Out-Null
        "`tAfter MoveNext: $($input.Current)"
        "`tAccess Again: $($input.Current)"
    }
}

"one","two" | Current
Iteration: 0
    Before MoveNext:
    After MoveNext: one
    Access Again: one
Iteration: 1
    Before MoveNext:
    After MoveNext: two
    Access Again: two

Örnek 4: $foreach değişkenini kullanma

$input değişkeninin aksine, $foreach değişkeni her zaman doğrudan erişildiğinde koleksiyondaki tüm öğeleri temsil eder. Geçerli koleksiyon öğesine erişmek için Current özelliğini, değerini değiştirmek için Reset ve MoveNext yöntemlerini kullanın.

Not

foreach döngüsünün her yinelemesi otomatik olarak MoveNext yöntemini çağırır.

Aşağıdaki döngü yalnızca iki kez yürütülür. İkinci yinelemede, yineleme tamamlanmadan önce koleksiyon üçüncü öğeye taşınır. İkinci yinelemeden sonra, artık yinelenmek için başka değer yoktur ve döngü sonlandırılır.

MoveNext özelliği, koleksiyonda yinelemek için seçilen değişkeni etkilemez ($Num).

$i = 0
foreach ($num in ("one","two","three"))
{
    "Iteration: $i"
    $i++
    "`tNum: $num"
    "`tCurrent: $($foreach.Current)"

    if ($foreach.Current -eq "two")
    {
        "Before MoveNext (Current): $($foreach.Current)"
        $foreach.MoveNext() | Out-Null
        "After MoveNext (Current): $($foreach.Current)"
        "Num hasn't changed: $num"
    }
}
Iteration: 0
        Num: one
        Current: one
Iteration: 1
        Num: two
        Current: two
Before MoveNext (Current): two
After MoveNext (Current): three
Num hasn't changed: two

Reset yönteminin kullanılması koleksiyondaki geçerli öğeyi sıfırlar. Aşağıdaki örnek, yöntemi çağrıldığı için ilk iki öğe Reset döngüsünün iki kez gerçekleştirilmesini sağlar. İlk iki döngüden sonra if deyimi başarısız olur ve döngü her üç öğede de normal olarak yinelenir.

Önemli

Bu, sonsuz döngüye neden olabilir.

$stopLoop = 0
foreach ($num in ("one","two", "three"))
{
    ("`t" * $stopLoop) + "Current: $($foreach.Current)"

    if ($num -eq "two" -and $stopLoop -lt 2)
    {
        $foreach.Reset()
        ("`t" * $stopLoop) + "Reset Loop: $stopLoop"
        $stopLoop++
    }
}
Current: one
Current: two
Reset Loop: 0
        Current: one
        Current: two
        Reset Loop: 1
                Current: one
                Current: two
                Current: three

Örnek 5: $switch değişkenini kullanma

$switch değişkeni, $foreach değişkeniyle tam olarak aynı kurallara sahiptir. Aşağıdaki örnekte tüm numaralandırıcı kavramları gösterilmektedir.

Not

MoveNext yönteminden sonra break deyimi olmasa bile NotEvaluated olayının hiçbir zaman yürütülmediğini unutmayın.

$values = "Start", "MoveNext", "NotEvaluated", "Reset", "End"
$stopInfinite = $false
switch ($values)
{
    "MoveNext" {
        "`tMoveNext"
        $switch.MoveNext() | Out-Null
        "`tAfter MoveNext: $($switch.Current)"
    }
    # This case is never evaluated.
    "NotEvaluated" {
        "`tAfterMoveNext: $($switch.Current)"
    }

    "Reset" {
        if (!$stopInfinite)
        {
            "`tReset"
            $switch.Reset()
            $stopInfinite = $true
        }
    }

    default {
        "Default (Current): $($switch.Current)"
    }
}
Default (Current): Start
    MoveNext
    After MoveNext: NotEvaluated
    Reset
Default (Current): Start
    MoveNext
    After MoveNext: NotEvaluated
Default (Current): End

Ayrıca bakınız