Aracılığıyla paylaş


about_Automatic_Variables

Kısa açıklama

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

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

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

Uzun açıklama

$$

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

$?

Son komutun yürütme durumunu içerir. Son komut başarılı olursa True ve başarısız olursa False değerini 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 hem de process bloklarında, herhangi bir noktada çağrılır end veya this.WriteError() herhangi bir noktada sırasıyla False$PSCmdlet.WriteError()$?

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

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

Test-WriteError
"Now the `$? variable is: $?"
Test-WriteError : Bad
At line:7 char:1
+ Test-WriteError
+ ~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Test-WriteError

The $? variable is: False
Now the $? variable is: True

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

Yerel komutlar (yürütülebilir dosyalar) $? olarak ve başka bir değer olduğunda $LASTEXITCODE False.

Not

PowerShell 7'ye kadar, deyimi parantez içinde sarmalama , alt ifade söz dizimi veya dizi ifadesi her zaman trueolarak sıfırlar. Örneğin, (Write-Error) True$?gösterilir. 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.

$_

ile $PSItemaynı. İşlem hattı nesnesinde 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, anahtar sözcüğüyle veya işlev adından sonra parantez içinde virgülle param ayrılmış bir parametre listesi ekleyerek parametreleri bildirebilirsiniz.

Bir olay eyleminde $args değişken, 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 nesnenin özelliğinde PSEventArgs 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 cmdlet'ini kullandığınızda Export-Console doldurulur.

cmdlet'ini Export-Console 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.

$Error

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

Bir hatanın $Error diziye eklenmesini önlemek için ErrorAction ortak parametresini Ignore değeriyle kullanın. Daha fazla bilgi için bkz . about_CommonParameters.

$Event

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

$EventArgs

İşlenmekte olan olayın EventArgs öğesinden 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 nesnenin özelliğinde PSEventArgs de bulunabilir.

$EventSubscriber

İşlenmekte olan olayın olay abonesini temsil eden bir PSEventSubscriber 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, cmdlet'in döndürdüğü nesneyle Get-EventSubscriber aynıdır.

$ExecutionContext

PowerShell konağı 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

False içerir. dizesini kullanmak yerine komutlarda ve betiklerde False"false"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

ForEach döngüsünün numaralandırıcısını (sonuçta elde edilen değerleri değil) içerir. Değişken $ForEach yalnızca ForEach döngü ç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ırmaları Kullanma.

$HOME

Kullanıcının giriş dizininin tam yolunu içerir. Bu değişken genellikle "$env:USERPROFILE"Windows ortam değişkeninin C:\Users\<UserName> değerini kullanır.

Önemli

Windows, kullanıcı profilinin konumunu yeniden yönlendirebilir. Bu, ile $HOME aynı değere "$env:HOMEDRIVE$env:HOMEPATH"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.

$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ı (adlandırılmamış işlevler) ve betik dosyaları (kaydedilen betik blokları) için kullanılabilir.

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

  • bloğunda begin$input değişken veri içermiyor.

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

  • bloğunda end$input değişkeni işlevine tüm girişlerin koleksiyonunu numaralandırır.

    Not

    Değişkeni hem bloğun $input hem de bloğun processend içinde aynı işlev veya betik bloğunda kullanamazsınız.

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

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ırmaları Kullanma.

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

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

$LASTEXITCODE

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

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

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

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

  • Bir betik gibi doğrudan veya gibi ./Test.ps1çağrı işleciyle & (& ./Test.ps1) çağrıldığında:

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

    • Betik, anahtar sözcüğünü exit kullanan başka bir betiği çağırır
    • Betik yerel bir komut çağırır
    • Betik anahtar sözcüğünü exit kullanır
  • Dosyapowershell.exeile bir betik çağrıldığında, $LASTEXITCODE olarak ayarlanır:

    • 1 bir özel durum nedeniyle betik sonlandırıldıysa
    • Betikte exit kullanılıyorsa anahtar sözcüğü tarafından belirtilen değer
    • 0 betik başarıyla tamamlandıysa
  • Komutpowershell.exeile bir betik çağrıldığında şu $LASTEXITCODE şekilde ayarlanır:

    • 1bir özel durum nedeniyle betik sonlandırıldıysa veya son komutun sonucu olarak ayarlandıysa $?$false
    • 0betik başarıyla tamamlandıysa ve son komutun sonucu olarak ayarlandıysa $?$true

Dosya ve Komut parametreleri hakkında daha fazla bilgi için bkz. about_PowerShell_exe.

$Matches

$Matches değişkeni ve -match işleçleriyle -notmatch çalışır. or işlecine skaler-matchve biri eşleşme algıladığında, bir Boole değeri döndürür ve otomatik değişkeni eşleşen dize değerlerinin karma tablosuyla doldurur-notmatch.$Matches Karma $Matches tablo, işleciyle normal ifadeler kullandığınızda yakalamalarla -match da doldurulabilir.

İşleç -match hakkında daha fazla bilgi için bkz . about_Comparison_Operators. Normal ifadeler hakkında daha fazla bilgi için bkz . about_Regular_Expressions.

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

Not

Bir oturumda doldurulduğunda $Matches , başka bir eşleşme tarafından üzerine yazılana kadar eşleşen değeri korur. -match yeniden kullanılırsa ve eşleşme bulunmazsa, $Matches$nullolarak sıfırlanmaz. Daha önce eşleşen değer, başka bir eşleşme bulunana kadar içinde $Matches 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 blokları için doldurulur. Geçerli betikte tarafından döndürülen $MyInvocation nesnesindeki bir işlevin adı ($MyInvocation.MyCommand.Name) gibi bilgileri, geçerli komutu tanımlamak için kullanabilirsiniz. Bu, mevcut betiğin adını bulmak için kullanışlıdır.

PowerShell 3.0'da MyInvocation başlayarak 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 bir 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 bir betik olduğunda doldurulur.

$PSScriptRoot ve $PSCommandPath otomatik değişkenlerinden farklı olarak, otomatik değişkeninin PSScriptRoot ve $MyInvocation özellikleri, geçerli betik hakkında değil, çağıran veya çağırılan 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üzey girdiğinizde değer artırılır ve değerden çıktığınızda azalmış olur.

Örneğin, yöntemini kullandığınızda $Host.EnterNestedPrompt 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 komutunu tamamlayın veya yazın exit.

değişkeni, $NestedPromptLevel 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

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

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

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

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

değişkeni cmdlet'ine $null aktarırsanızForEach-Object, diğer nesnelerde olduğu gibi için $nullbir değer oluşturur.

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

Sonuç olarak, parametre değeri$nulletmek için kullanamazsınız. parametresi değeri $null , varsayılan parametre değerini geçersiz kılar.

Ancak, PowerShell değişkeni yer tutucu olarak değerlendirdiğinden $null , aşağıdaki gibi betiklerde kullanabilirsiniz; bu, yoksayılırsa $null 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.exe açmak için bir komutta kullanabilirsiniz:

notepad.exe $PROFILE

$PSBoundParameters

Bir script veya fonksiyona geçirilen parametrelerin ve bunların geçerli 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 test1$PSBoundParametersiletir. $PSBoundParameters, Anahtar ve Değer biç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 cmdlet'ine WhatIf ve Confirm parametrelerini dinamik olarak ekler.

Otomatik değişken hakkında $PSCmdlet 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

İşletim sisteminde kullanılmakta olan kültürün adını içerir. Kültür, sayılar, para birimi ve tarihler gibi öğelerin görüntüleme biçimini belirler ve System.Globalization.CultureInfo nesnesinde depolanır. Bilgisayarın kültürünü görüntülemek için kullanın Get-Culture . $PSCultureName ö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, null bir değer 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 nesnesi içerir. InvocationInfo özelliği, Location özelliği de dahil olmak üzere çeşitli yararlı özelliklere sahiptir. Location özelliği, hata ayıklanan betiğin yolunu gösterir.

$PSEdition

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

$PSHOME

Genellikle Windows sistemlerinde PowerShell $env:windir\System32\PowerShell\v1.0 için 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ı. İşlem hattı nesnesinde 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ülen betiğin üst 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$PSSenderInfo, özelliğini içerir. ApplicationArguments özelliğine

$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

$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:

  • BuildVersion - Geçerli sürümün derleme numarası
  • CLRVersion - Ortak dil çalışma zamanının (CLR) sürümü
  • PSCompatibleVersions - PowerShell'in geçerli sürümle uyumlu sürümleri
  • PSEdition - Bu özellik, Windows Server ve Windows istemci sürümleri için 'Desktop' değerine sahiptir. Bu özellik, Nano Sunucu veya Windows IoT altında çalışan PowerShell için 'Core' değerine sahiptir.
  • PSRemotingProtocolVersion - PowerShell uzaktan yönetim protokolünün sürümü.
  • PSVersion - PowerShell sürüm numarası
  • 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 kendine ait 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, döndüren nesnenin PSEventArgs Sender özelliğinde Get-Event de bulunabilir.

$ShellId

Geçerli kabuğun tanımlayıcısını içerir.

$StackTrace

En son hata için bir yığın izlemesi içerir.

$switch

Bir deyiminin sonuçta elde edilen değerlerini değil numaralandırıcıyı Switch içerir. $switch Değişken yalnızca Switch deyimi çalışırken bulunur; deyimi yürütmeyi tamamladığında switch 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ırmaları 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 nesnesinin bir ö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.

Bir PowerShell sınıfında değişken, $this 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

True içerir. Komutlarda ve betiklerde True'yu temsil etmek için bu değişkeni kullanabilirsiniz.

Numaralandırıcıları Kullanma

$input, $foreachve $switch değişkenleri, içeren kod bloğu tarafından işlenen değerler arasında yinelemek için kullanılan tüm numaralandırıcılardı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ış denetimi anahtar sözcüklerinin sonu ve devamı 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.

MoveNext

MoveNext yöntemi numaralandırıcıyı koleksiyonun sonraki öğesine ilerler. döndürürTrue.

Not

MoveNext tarafından döndürülen Boole değeri çıkış akışına gönderilir. Çıktıyı, türüne yayınlayarak [void] veya Out-Null olarak piping yaparak gizleyebilirsiniz.

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

Reset

Reset yöntemi, numaralandırıcıyı koleksiyondaki ilk öğeden önceki ilk konumuna ayarlar.

Current

Current özelliği, koleksiyon veya işlem hattındaki öğeyi numaralandırıcının geçerli konumunda 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, değişkene $input 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 değişkeni otomatik olarak ilerletir $input .

$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 $input dışında değişken işleve yöneltilen tüm değerleri temsil eder.

  • değişkenine $input erişmek tüm değerleri temizler.
  • Reset yöntemi koleksiyonun tamamını sıfırlar.
  • Current Özelliği hiçbir zaman doldurulmaz.
  • Koleksiyon gelişmiş olmadığından MoveNext yöntemi false döndürür.
    • MoveNext çağrısı değişkeni temizler$input.
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 kullanma.Current mülk

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 MoveNext öğesini açıkça çağırmadığınız sürece özellik hiçbir zaman doldurulmaz. özelliğine Current 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

değişkeninin $input 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

Döngünün foreach 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, koleksiyon ($Num) aracılığıyla yinelemek için seçilen değişkeni etkilemez.

$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ığından ilk iki öğede döngü yapar. İlk iki döngüden if sonra 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

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

Not

MoveNext yönteminden büyük/küçük harf durumunun break 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 bkz.