Otomatik Değişkenler Hakkında
Kısa açıklama
PowerShell'in durum bilgilerini depolayan değişkenleri açıklar. Bu değişkenler PowerShell tarafından oluşturulur ve korunur.
Uzun açıklama
Kavramsal olarak, bu değişkenler salt okunur olarak kabul edilir. Bu kişilere yazılabilir olsalar da geriye dönük uyumluluk için bu kişilere yazılmamalıdır .
PowerShell'deki otomatik değişkenlerin listesi aşağıdadır:
$$
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ıysa True , başarısız olursa False değerini içerir.
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 end
de process
bloklarında, herhangi bir noktada çağrılırken this.WriteError()
veya $PSCmdlet.WriteError()
herhangi bir noktada sırasıyla false olarak this.ThrowTerminatingError()
$PSCmdlet.ThrowTerminatingError()
ayarlanır$?
.
Write-Error
Cmdlet yürütüldükten hemen sonra her zaman False olarak ayarlanır$?
, ancak çağıran bir işlev için False olarak ayarlanmaz$?
:
function Test-WriteError
{
Write-Error "Bad"
$? # $false
}
Test-WriteError
$? # $true
İkinci amaç için bunun $PSCmdlet.WriteError()
yerine kullanılmalıdır.
Yerel komutlar için (yürütülebilir dosyalar), $?
0 olduğunda $LASTEXITCODE
True, başka bir değer olduğunda $LASTEXITCODE
ise False olarak ayarlanır.
Not
Parantez (...)
içinde bir deyim içeren PowerShell 7'ye kadar, alt ifade söz dizimi $(...)
veya dizi ifadesi @(...)
her zaman True olarak sıfırlanır$?
, böylece (Write-Error)
True olarak gösterilir$?
.
Bu, PowerShell 7'de değiştirilmiştir, böylece $?
bu ifadelerde her zaman 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 $PSItem
aynı. İşlem hattı nesnesindeki geçerli nesneyi içerir. Bu değişkeni, her nesne üzerinde veya bir işlem hattındaki seçili nesneler üzerinde eylem gerçekleştiren komutlarda kullanabilirsiniz.
$args
Bir işleve, betike veya betik bloğuna geçirilen bildirilmemiş parametreler için bir değer dizisi içerir. bir işlev oluşturduğunuzda, anahtar sözcüğünü kullanarak param
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ş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 PSEventArgs nesnesinin Get-Event
SourceArgs özelliğinde de bulunabilir.
$ConsoleFileName
Oturumda en son kullanılan konsol dosyasının (.psc1
) yolunu içerir. 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
bu değişken doldurulur.
cmdlet'ini Export-Console
parametresiz kullandığınızda, oturumda en son kullanılan konsol dosyasını otomatik olarak güncelleştirir. Hangi dosyanın güncelleştirileceğini 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
İşlenen olayı temsil eden bir PSEventArgs nesnesi içerir. Bu değişken yalnızca gibi Register-ObjectEvent
bir olay kayıt komutunun bloğu içinde Action
doldurulur. Bu değişkenin değeri, cmdlet'in döndürdüğü nesneyle Get-Event
aynıdır. Bu nedenle, bir Action
betik bloğunda gibi değişkenin Event
$Event.TimeGenerated
özelliklerini kullanabilirsiniz.
$EventArgs
İşlenmekte olan olayın EventArgs öğesinden türetilen ilk olay bağımsız değişkenini temsil eden bir 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, döndüren PSEventArgs nesnesinin Get-Event
SourceEventArgs özelliğinde de bulunabilir.
$EventSubscriber
İşlenen 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, 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. "false" dizesini kullanmak yerine komutlarda ve betiklerde False değerini 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
ForEach döngüsünün numaralandırıcısını (sonuçta elde edilen değerleri değil) içerir. $ForEach
Değişken 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ırıcıları Kullanma.
$HOME
Kullanıcının giriş dizininin tam yolunu içerir. Bu değişken, windows ortam değişkenlerinin "$env:homedrive$env:homepath"
eşdeğeridir, genellikle C:\Users\<UserName>
.
$Host
PowerShell için geçerli konak uygulamasını temsil eden bir nesnesi içerir. Bu değişkeni komutlarda geçerli konağı temsil etmek veya konağın veya $Host.CurrentCulture
$host.ui.rawui.setbackgroundcolor("Red")
gibi $Host.version
ö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 ve betik blokları (adlandırılmamış işlevlerdir) için kullanılabilir.
,
Process
veyaEnd
bloğu olmayan birBegin
işlevde$input
, değişkeni işleve yönelik tüm girişlerin koleksiyonunu numaralandırır.bloğunda
Begin
$input
değişken veri içermiyor.bloğunda
Process
$input
, değişkeni şu anda işlem hattında olan nesnesini içerir.bloğunda
End
$input
değişkeni, işleve yönelik tüm girişlerin koleksiyonunu numaralandırır.Not
Değişkeni aynı işlev veya betik bloğunda hem İşlem bloğunun hem de End bloğunun içinde kullanamazsınız
$input
.
Bir numaralandırıcı olduğundan $input
, özelliklerine 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ırıcıları Kullanma.
$IsCoreCLR
Geçerli oturumun .NET Core Çalışma Zamanı'nda (CoreCLR) çalıştırılıp çalıştırılamadığını içerir $True
. Aksi takdirde içerir $False
.
$IsLinux
Geçerli oturumun linux işletim sisteminde çalıştırılıp çalıştırılamadığını içerir $True
.
Aksi takdirde içerir $False
.
$IsMacOS
Geçerli oturumun bir MacOS işletim sisteminde çalıştırılıp çalıştırılamadığını içerir $True
.
Aksi takdirde içerir $False
.
$IsWindows
Geçerli oturumun bir Windows işletim sisteminde çalıştırılıp çalıştırılamadığını içerir $TRUE
. Aksi takdirde içerir $FALSE
.
$LastExitCode
Çalıştırılan son Windows tabanlı programın çıkış kodunu içerir.
$Matches
Matches
değişkeni ve -notmatch
işleçleriyle -match
çalışır.
veya -notmatch
işlecine -match
skaler giriş gönderdiğinizde ve 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$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.
$MyInvocation
Geçerli komut hakkında ad, parametreler, parametre değerleri gibi bilgileri ve komutun nasıl başlatıldığı, çağrıldığı veya çağrıldığı hakkında bilgiler (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 komutu tanımlamak için, geçerli betikte döndüren $MyInvocation
System.Management.Automation.InvocationInfo nesnesindeki, betiğin yolu ve dosya adı ($MyInvocation.MyCommand.Path
) veya işlevin adı ($MyInvocation.MyCommand.Name
) gibi bilgileri kullanabilirsiniz. Bu, özellikle geçerli betiğin adını bulmak için kullanışlıdır.
PowerShell 3.0 MyInvocation
sürümünden başlayarak aşağıdaki yeni özelliklere sahiptir.
Özellik | Açıklama |
---|---|
PSScriptRoot | Çağrılan betiğin tam yolunu içerir |
geçerli komut. Bu özelliğin değeri | |
yalnızca çağıran bir betik olduğunda doldurulur. | |
PSCommandPath | Betiğin tam yolunu ve dosya adını içerir |
geçerli komutu çağıran. Bunun değeri | |
özelliği yalnızca çağıran bir olduğunda doldurulur | |
Komut dosyası. |
$PSScriptRoot
ve $PSCommandPath
otomatik değişkenlerinden farklı olarak, otomatik değişkenin PSScriptRoot ve PSCommandPath özellikleri $MyInvocation
geçerli betikle değil çağıran veya çağı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üzey girdiğinizde değer artırılır ve bu düzeyden çıktığınızda azalmış olur.
Örneğin, yöntemini kullandığınızda $Host.EnterNestedPrompt
PowerShell iç içe bir komut istemi sunar. PowerShell hata ayıklayıcısında bir kesme noktasına ulaştığınızda PowerShell 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 değişkenin $NestedPromptLevel
değerini artırır. İç içe ek komut istemleri (en fazla 128 düzey) oluşturmak veya özgün komut istemine dönmek için, komutu 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
$null
null 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 sahip bir nesne olarak, yani açık bir yer tutucu olarak davranır $null
, böylece bir değer serisindeki 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 ForEach-Object
kanal oluşturursanız$null
, diğer nesneler için olduğu gibi için $null
bir değer oluşturur.
"one", $null, "three" | ForEach-Object { "Hello " + $_}
Hello one
Hello
Hello three
Sonuç olarak, parametre değeri olmamasını ifade etmek için kullanamazsınız$null
. parametresinin $null
değeri, varsayılan parametre değerini geçersiz kılar.
Ancak, PowerShell değişkeni yer tutucu olarak değerlendirdiğinden $null
, bunu 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 temsil etmek 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, profil oluşturmak için komutta da kullanabilirsiniz:
New-Item -ItemType file -Path $PROFILE -Force
Profili notepad.exeaçmak için bir komutta kullanabilirsiniz:
notepad.exe $PROFILE
$PSBoundParameters
Bir betik veya işleve geçirilen parametrelerin ve bunların geçerli değerlerinin 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. Parametrelerin geçerli değerlerini görüntülemek veya değiştirmek ya da parametre değerlerini başka bir betik veya işleve geçirmek için bunu kullanabilirsiniz.
Bu örnekte, Test2 işlevi test1 işlevine iletir$PSBoundParameters
. $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'e 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
. $PSCulture
Name ö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ı belirtmek için 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.
$PSHOME
Genellikle Windows sistemlerinde PowerShell $env:windir\System32\PowerShell\v1.0
yükleme dizininin tam yolunu içerir. Bu değişkeni PowerShell dosyalarının yollarında kullanabilirsiniz. Örneğin, aşağıdaki komut sözcük değişkeni için kavramsal Yardım konularını arar:
Select-String -Pattern Variable -Path $pshome\*.txt
$PSItem
ile $_
aynı. İşlem hattı nesnesindeki geçerli nesneyi içerir. Bu değişkeni, her nesne üzerinde veya bir işlem hattındaki seçili nesneler üzerinde eylem gerçekleştiren komutlarda kullanabilirsiniz.
$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 sürümünden itibaren tüm betiklerde geçerlidir.
$PSSenderInfo
PSSession'u başlatan kullanıcı hakkında, kullanıcı kimliği ve kaynak bilgisayarın saat dilimi gibi bilgileri içerir. Bu değişken yalnızca PSSessions içinde kullanılabilir.
$PSSenderInfo
değişkeni, varsayılan olarak yalnızca $PSVersionTable
kaynak oturumdan öğesini içeren applicationArguments adlı, kullanıcı tarafından yapılandırılabilir bir özellik içerir. ApplicationArguments özelliğine veri eklemek için cmdlet'in ApplicationArguments parametresini New-PSSessionOption
kullanın.
$PSUICulture
İşletim sisteminde kullanılmakta olan 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ıldığını belirler. Bu, sistemin System.Globalization.CultureInfo.CurrentUICulture.Name özelliğinin değeridir. Sistemin System.Globalization.CultureInfo nesnesini almak için cmdlet'ini Get-UICulture
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:
Özellik | Açıklama |
---|---|
PSVersion | PowerShell sürüm numarası |
PSEdition | Bu özellik için 'Desktop' değerine sahiptir |
PowerShell 4 ve altına ek olarak PowerShell | |
Tam özellikli Windows sürümlerinde 5.1. | |
Bu özellik için 'Core' değerine sahiptir | |
PowerShell 6 ve üzerinin yanı sıra PowerShell | |
Azaltılmış ayak izi sürümleri üzerinde PowerShell 5.1 | |
Örneğin, Windows Nano Server veya Windows IoT. | |
GitCommitId | GitHub'daki kaynak dosyaların işleme kimliği, |
İşletim sistemi | Şu işletim sisteminin açıklaması: |
PowerShell üzerinde çalışıyor. | |
Platform | İşletim sisteminin çalıştığı platform |
-ını. Linux ve macOS'ta değer Unix'tir. | |
Bkz $IsMacOs . ve $IsLinux . |
|
PSCompatibleVersions | Uyumlu PowerShell sürümleri |
geçerli sürümle | |
PSRemotingProtocolVersion | PowerShell uzak sürümünü |
yönetim protokolü. | |
SerializationVersion | Seri hale getirme yönteminin sürümü |
WSManStackVersion | WS-Management yığınının sürüm numarası |
$PWD
Geçerli dizinin tam yolunu temsil eden bir yol nesnesi içerir.
$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 PSEventArgs nesnesinin Get-Event
Sender özelliğinde 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şkeni 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ırıcıları Kullanma.
$this
Bir betik özelliğini veya betik yöntemini tanımlayan bir betik bloğunda $this
değişken, genişletilmekte olan nesneye başvurur.
Özel bir sınıfta değişkeni, $this
sınıfında tanımlanan özelliklere ve yöntemlere erişime izin veren sınıf nesnesinin kendisine başvurur.
$true
True içerir. Komutlarda ve betiklerde True'yu göstermek için bu değişkeni kullanabilirsiniz.
Numaralandırıcıları Kullanma
$input
, $foreach
ve $switch
değişkenleri, içeren kod blokları tarafından işlenen değerler arasında yineleme yapmak 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üzenlemek 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. Numaralandırıcı başarılı bir şekilde gelişmişse MoveNext, numaralandırıcı koleksiyonun sonunu geçtiyse False değerini döndürür.
Not
MoveNext değerimi döndüren Boole değeri çıkış akışına gönderildi.
Çıkışı typecasting to veya piping [void]
out-Null olarak gizleyebilirsiniz.
$input.MoveNext() | Out-Null
[void]$input.MoveNext()
Sıfırla
Reset yöntemi, numaralandırıcıyı koleksiyondaki ilk öğeden önceki başlangıç konumuna ayarlar.
Geçerli
Current özelliği, koleksiyondaki 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şkenine $input
erişmek, işlem bloğunun bir sonraki yürütülmesine kadar değişkeni temizler. Reset yönteminin kullanılması değişkeni geçerli işlem hattı değerine sıfırlar$input
.
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, siz 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 erişilirken
$input
tüm değerler temizilir. - 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
.
- MoveNext çağrısı değişkeni 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 kullanma. Geçerli özellik
Current özelliği kullanılarak, Reset yöntemi kullanılmadan geçerli işlem hattı değerine birden çok kez erişilebilir. İşlem bloğu, MoveNext yöntemini otomatik olarak çağırmaz.
MoveNext öğesini açıkça çağırmadığınız sürece Current özelliği hiçbir zaman doldurulmayacak. 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
değişkeninin $input
aksine değişkeni, $foreach
doğrudan erişildiğinde her zaman koleksiyondaki tüm öğeleri temsil eder. Geçerli koleksiyon öğesine erişmek için Current özelliğini ve 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, yinelemek için artık 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 has not changed: $num"
}
}
Iteration: 0
Num: one
Current: one
Iteration: 1
Num: two
Current: two
Before MoveNext (Current): two
After MoveNext (Current): three
Num has not changed: two
Reset yönteminin kullanılması koleksiyondaki geçerli öğeyi sıfırlar. Aşağıdaki örnek, Reset yöntemi çağrıldığından ilk iki öğede iki kez 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() | Out-Null
("`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 sonra deyimi olmasa break
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 bkz.
about_Functions_Advanced_Methods
about_Functions_Advanced_Parameters
about_Functions_OutputTypeAttribute