about_Automatic_Variables
Deskripsi singkat
Menjelaskan variabel yang menyimpan informasi status untuk dan dibuat dan dikelola oleh PowerShell.
Secara konseptual, sebagian besar variabel ini dianggap baca-saja. Meskipun dapat ditulis, untuk kompatibilitas mundur, mereka tidak boleh ditulis.
Berikut adalah daftar variabel otomatis di PowerShell:
- $$
- $?
- $^
- $_
- $args
- $ConsoleFileName
- $EnabledExperimentalFeatures
- $Error
- $Event
- $EventArgs
- $EventSubscriber
- $ExecutionContext
- $false
- $foreach
- $HOME
- $Host
- $input
- $IsCoreCLR
- $IsLinux
- $IsMacOS
- $IsWindows
- $LASTEXITCODE
- $Matches
- $MyInvocation
- $NestedPromptLevel
- $null
- $PID
- $PROFILE
- $PSBoundParameters
- $PSCmdlet
- $PSCommandPath
- $PSCulture
- $PSDebugContext
- $PSEdition
- $PSHOME
- $PSItem
- $PSScriptRoot
- $PSSenderInfo
- $PSUICulture
- $PSVersionTable
- $PWD
- $Sender
- $ShellId
- $StackTrace
- $switch
- $this
- $true
Deskripsi panjang
$$
Berisi token terakhir di baris terakhir yang diterima oleh sesi.
$?
Berisi status eksekusi perintah terakhir. Ini berisi True jika perintah terakhir berhasil dan False jika gagal. Kesalahan penguraian $?
tidak mengakibatkan eksekusi, sehingga tidak memengaruhi nilai .
Untuk cmdlet dan fungsi tingkat lanjut yang dijalankan pada beberapa tahap dalam alur, misalnya di process
blok dan end
, memanggil this.WriteError()
atau $PSCmdlet.WriteError()
masing-masing pada titik apa pun diatur $?
ke False, seperti halnya this.ThrowTerminatingError()
dan $PSCmdlet.ThrowTerminatingError()
.
Write-Error
Cmdlet selalu diatur $?
ke False segera setelah dijalankan, tetapi tidak akan diatur $?
ke False untuk fungsi yang memanggilnya:
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
Untuk tujuan terakhir, $PSCmdlet.WriteError()
harus digunakan sebagai gantinya.
Untuk perintah native (executables), $?
diatur ke True saat $LASTEXITCODE
adalah 0, dan diatur ke False ketika $LASTEXITCODE
adalah nilai lain.
Catatan
Hingga PowerShell 7, membungkus pernyataan dalam tanda kurung , sintaks subekspresi (...)
, atau ekspresi @(...)
array selalu reset$?
ke True.$(...)
Misalnya, (Write-Error)
ditampilkan $?
sebagai True. Perilaku ini berubah di PowerShell 7, sehingga $?
selalu mencerminkan keberhasilan aktual dari perintah terakhir yang dijalankan dalam ekspresi ini.
$^
Berisi token pertama di baris terakhir yang diterima oleh sesi.
$_
Sama seperti $PSItem
. current Berisi objek dalam objek alur. Anda dapat menggunakan variabel ini dalam perintah yang melakukan tindakan pada setiap objek dalam alur.
Untuk informasi selengkapnya, lihat about_PSItem.
$args
Berisi array nilai untuk parameter yang tidak dinyatakan yang diteruskan ke blok fungsi, skrip, atau skrip. Saat membuat fungsi, Anda dapat mendeklarasikan parameter dengan param
kata kunci atau dengan menambahkan daftar parameter yang dipisahkan koma dalam tanda kurung setelah nama fungsi.
Dalam tindakan peristiwa, $args
variabel berisi objek yang mewakili argumen peristiwa peristiwa yang sedang diproses. Variabel ini hanya diisi dalam Action
blok perintah pendaftaran peristiwa. Nilai variabel ini juga dapat ditemukan di properti SourceArgs dari PSEventArgs objek yang Get-Event
dikembalikan.
$ConsoleFileName
Berisi jalur file konsol (.psc1
) yang terakhir digunakan dalam sesi. Variabel ini diisi saat Anda memulai PowerShell dengan parameter PSConsoleFile atau saat Anda menggunakan Export-Console
cmdlet untuk mengekspor nama snap-in ke file konsol.
Saat Anda menggunakan Export-Console
cmdlet tanpa parameter, cmdlet secara otomatis memperbarui file konsol yang terakhir digunakan dalam sesi. Anda dapat menggunakan variabel otomatis ini untuk menentukan file yang akan diperbarui.
$EnabledExperimentalFeatures
Berisi daftar nama fitur eksperimental yang diaktifkan.
$Error
Berisi array objek kesalahan yang mewakili kesalahan terbaru. Kesalahan terbaru adalah objek kesalahan pertama dalam array $Error[0]
.
Untuk mencegah kesalahan ditambahkan ke $Error
array, gunakan parameter umum ErrorAction dengan nilai Abaikan. Untuk informasi selengkapnya, lihat about_CommonParameters.
$Event
PSEventArgs Berisi objek yang mewakili peristiwa yang sedang diproses. Variabel ini hanya diisi dalam Action
blok perintah pendaftaran peristiwa, seperti Register-ObjectEvent
. Nilai variabel ini adalah objek yang sama dengan yang Get-Event
dikembalikan cmdlet. Anda dapat menggunakan properti Event
variabel, seperti $Event.TimeGenerated
, dalam Action
blok skrip.
$EventArgs
Berisi objek yang mewakili argumen peristiwa pertama yang berasal dari EventArgs dari peristiwa yang sedang diproses . Variabel ini hanya diisi dalam Action
blok perintah pendaftaran peristiwa. Nilai variabel ini juga dapat ditemukan di properti SourceEventArgs dari PSEventArgs objek yang Get-Event
dikembalikan.
$EventSubscriber
PSEventSubscriber Berisi objek yang mewakili pelanggan peristiwa peristiwa yang sedang diproses. Variabel ini hanya diisi dalam Action
blok perintah pendaftaran peristiwa. Nilai variabel ini adalah objek yang sama dengan yang Get-EventSubscriber
dikembalikan cmdlet.
$ExecutionContext
Berisi objek EngineIntrinsics yang mewakili konteks eksekusi host PowerShell. Anda dapat menggunakan variabel ini untuk menemukan objek eksekusi yang tersedia untuk cmdlet.
$false
Berisi False. Anda dapat menggunakan variabel ini untuk mewakili False dalam perintah dan skrip alih-alih menggunakan string "false"
. String dapat ditafsirkan sebagai True jika dikonversi ke string yang tidak kosong atau ke bilangan bulat bukan nol.
$foreach
Berisi enumerator (bukan nilai yang dihasilkan) dari perulangan ForEach . Variabel $ForEach
hanya ada saat ForEach
perulangan berjalan; variabel dihapus setelah perulangan selesai.
Enumerator berisi properti dan metode yang dapat Anda gunakan untuk mengambil nilai perulangan dan mengubah iterasi current perulangan. Untuk informasi selengkapnya, lihat Menggunakan Enumerator.
$HOME
Berisi jalur lengkap direktori beranda pengguna. Pada Windows, variabel ini menggunakan nilai "$env:USERPROFILE"
variabel lingkungan Windows, biasanya C:\Users\<UserName>
. Pada Unix, variabel ini menggunakan nilai HOME
variabel lingkungan.
Penting
Windows dapat mengalihkan lokasi profil pengguna. Ini berarti bahwa $HOME
mungkin tidak memiliki nilai yang sama dengan "$env:HOMEDRIVE$env:HOMEPATH"
.
$Host
Berisi objek yang mewakili current aplikasi host untuk PowerShell.
Anda dapat menggunakan variabel ini untuk mewakili current host dalam perintah atau untuk menampilkan atau mengubah properti host, seperti $Host.version
atau $Host.CurrentCulture
, atau $Host.UI.RawUI.BackGroundColor = "Red"
.
Catatan
Pengaturan warna di $Host.PrivateData
telah digantikan oleh $PSStyle
variabel preferensi. Untuk informasi selengkapnya, lihat about_ANSI_Terminals.
$input
Berisi enumerator yang menghitung semua input yang diteruskan ke fungsi.
Variabel $input
hanya tersedia untuk fungsi, blok skrip (yang merupakan fungsi yang tidak disebutkan namanya), dan file skrip (yang merupakan blok skrip yang disimpan).
Dalam fungsi tanpa
begin
, ,process
atauend
blok,$input
variabel menghitung koleksi semua input ke fungsi.begin
Dalam blok,$input
variabel tidak berisi data.process
Dalam blok,$input
variabel berisi current objek dalam alur.end
Dalam blok ,$input
variabel menghitung pengumpulan semua input ke fungsi.Catatan
Anda tidak dapat menggunakan variabel di
$input
dalamprocess
blok danend
blok dalam fungsi atau blok skrip yang sama.
Karena $input
merupakan enumerator, mengakses salah satu propertinya menyebabkan $input
tidak lagi tersedia. Anda dapat menyimpan $input
dalam variabel lain untuk menggunakan $input
kembali properti.
Enumerator berisi properti dan metode yang dapat Anda gunakan untuk mengambil nilai perulangan dan mengubah iterasi current perulangan. Untuk informasi selengkapnya, lihat Menggunakan Enumerator.
Variabel $input
juga tersedia untuk perintah yang ditentukan oleh -Command
parameter pwsh
saat dipanggil dari baris perintah. Contoh berikut dijalankan dari shell Perintah Windows.
echo Hello | pwsh -Command """$input World!"""
$IsCoreCLR
Berisi $true
jika current sesi berjalan pada .NET Core Runtime (CoreCLR). Jika tidak, berisi $false
.
$IsLinux
Berisi $true
jika current sesi berjalan pada sistem operasi Linux.
Jika tidak, berisi $false
.
$IsMacOS
Berisi $true
jika current sesi berjalan pada sistem operasi MacOS.
Jika tidak, berisi $false
.
$IsWindows
Berisi $true
jika current sesi berjalan pada sistem operasi Windows. Jika tidak, berisi $false
.
$LASTEXITCODE
Berisi kode keluar dari program asli terakhir atau skrip PowerShell yang berjalan.
Untuk skrip PowerShell, nilai $LASTEXITCODE
tergantung pada bagaimana skrip dipanggil dan apakah exit
kata kunci digunakan:
Saat skrip menggunakan
exit
kata kunci:$LASTEXITCODE
diatur ke nilai yang ditentukan olehexit
kata kunci. Untuk informasi selengkapnya, lihat about_Language_Keywords.Ketika skrip dipanggil secara langsung, seperti
./Test.ps1
, atau dengan operator panggilan (&
) seperti& ./Test.ps1
:Nilai
$LASTEXITCODE
tidak diubah kecuali:- Skrip memanggil skrip lain yang menggunakan
exit
kata kunci - Skrip memanggil perintah asli
- Skrip menggunakan
exit
kata kunci
- Skrip memanggil skrip lain yang menggunakan
Saat skrip dipanggil dengan
pwsh
menggunakan parameter File ,$LASTEXITCODE
diatur ke:1
jika skrip dihentikan karena pengecualian- Nilai yang ditentukan oleh
exit
kata kunci, jika digunakan dalam skrip 0
jika skrip berhasil diselesaikan
Saat skrip dipanggil dengan
pwsh
menggunakan parameter Perintah ,$LASTEXITCODE
diatur ke:1
jika skrip dihentikan karena pengecualian atau jika hasil perintah terakhir diatur$?
ke$false
0
jika skrip berhasil diselesaikan dan hasil perintah terakhir diatur$?
ke$true
Untuk informasi selengkapnya tentang parameter File dan Perintah , lihat about_Pwsh.
$Matches
Variabel $Matches
bekerja dengan -match
operator dan -notmatch
. Saat Anda mengirimkan input skalar ke operator atau -notmatch
, dan salah satu mendeteksi kecocokan-match
, mereka mengembalikan nilai Boolean dan mengisi $Matches
variabel otomatis dengan tabel hash dari nilai string apa pun yang cocok. Tabel $Matches
hash juga dapat diisi dengan tangkapan saat Anda menggunakan ekspresi reguler dengan -match
operator.
Untuk informasi selengkapnya tentang -match
operator, lihat about_Comparison_Operators. Untuk informasi selengkapnya tentang ekspresi reguler, lihat about_Regular_Expressions.
Variabel $Matches
juga berfungsi dalam switch
pernyataan dengan -Regex
parameter . Ini diisi dengan cara yang sama seperti -match
operator dan -notmatch
. Untuk informasi selengkapnya tentang pernyataan tersebut switch
, lihat about_Switch.
Catatan
Ketika $Matches
diisi dalam sesi, ia mempertahankan nilai yang cocok sampai ditimpa oleh kecocokan lain. Jika -match
digunakan lagi dan tidak ada kecocokan yang ditemukan, itu tidak reset$Matches
ke $null
. Nilai yang dicocokkan sebelumnya disimpan di $Matches
hingga kecocokan lain ditemukan.
$MyInvocation
Berisi informasi tentang current perintah, seperti nama, parameter, nilai parameter, dan informasi tentang bagaimana perintah dimulai, dipanggil, atau dipanggil, seperti nama skrip yang memanggil current perintah.
$MyInvocation
hanya diisi untuk blok skrip, fungsi, dan skrip. Anda dapat menggunakan informasi dalam objek System.Management.Automation.InvocationInfo yang $MyInvocation
dikembalikan dalam current skrip, seperti nama fungsi ($MyInvocation.MyCommand.Name
) untuk mengidentifikasi current perintah.
Ini berguna untuk menemukan nama current skrip.
Dimulai di PowerShell 3.0, MyInvocation
memiliki properti baru berikut ini.
- PSScriptRoot - Berisi jalur lengkap ke skrip yang memanggil current perintah. Nilai properti ini hanya diisi ketika pemanggil adalah skrip.
- PSCommandPath - Berisi jalur lengkap dan nama file skrip yang memanggil current perintah. Nilai properti ini hanya diisi ketika pemanggil adalah skrip.
$PSScriptRoot
Tidak seperti variabel dan $PSCommandPath
otomatis, properti PSScriptRoot dan PSCommandPath dari $MyInvocation
variabel otomatis berisi informasi tentang pemanggil atau skrip panggilan, bukan current skrip.
$NestedPromptLevel
current Berisi tingkat perintah. Nilai 0 menunjukkan tingkat permintaan asli. Nilainya akan dinaikkan saat Anda memasukkan tingkat berlapis dan mengalami penurunan saat Anda keluar darinya.
Misalnya, PowerShell menyajikan prompt perintah berlapis saat Anda menggunakan metode .$Host.EnterNestedPrompt
PowerShell juga menyajikan prompt perintah berlapis saat Anda mencapai titik henti di debugger PowerShell.
Saat Anda memasukkan perintah berlapis, PowerShell menjeda current perintah, menyimpan konteks eksekusi, dan menaikkan nilai $NestedPromptLevel
variabel. Untuk membuat perintah berlapis tambahan (hingga 128 tingkat) atau untuk kembali ke prompt perintah asli, selesaikan perintah, atau ketik exit
.
Variabel $NestedPromptLevel
ini membantu Anda melacak tingkat prompt. Anda dapat membuat prompt perintah PowerShell alternatif yang menyertakan nilai ini sehingga selalu terlihat.
$null
$null
adalah variabel otomatis yang berisi nilai null atau kosong. Anda dapat menggunakan variabel ini untuk mewakili nilai yang tidak ada atau tidak terdefinisi dalam perintah dan skrip.
PowerShell memperlakukan $null
sebagai objek dengan nilai, atau tempat penampung, sehingga Anda dapat menggunakan $null
untuk mewakili nilai kosong dalam kumpulan nilai.
Misalnya, ketika $null
disertakan dalam koleksi, itu dihitung sebagai salah satu objek.
$a = "one", $null, "three"
$a.count
3
Jika Anda menyalurkan $null
variabel ke ForEach-Object
cmdlet, itu menghasilkan nilai untuk $null
, seperti halnya untuk objek lain
"one", $null, "three" | ForEach-Object { "Hello " + $_}
Hello one
Hello
Hello three
Akibatnya, Anda tidak dapat menggunakan $null
untuk berarti tidak ada nilai parameter. Nilai $null
parameter mengambil alih nilai parameter default.
Namun, karena PowerShell memperlakukan $null
variabel sebagai tempat penampung, Anda dapat menggunakannya dalam skrip seperti yang berikut ini, yang tidak akan berfungsi jika $null
diabaikan.
$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
Berisi pengidentifikasi proses (PID) dari proses yang menghosting current sesi PowerShell.
$PROFILE
Berisi jalur lengkap profil PowerShell untuk current pengguna dan current aplikasi host. Anda dapat menggunakan variabel ini untuk mewakili profil dalam perintah. Misalnya, Anda dapat menggunakannya dalam perintah untuk menentukan apakah profil telah dibuat:
Test-Path $PROFILE
Atau, Anda dapat menggunakannya dalam perintah untuk membuat profil:
New-Item -ItemType file -Path $PROFILE -Force
Anda dapat menggunakannya dalam perintah untuk membuka profil di notepad.exe:
notepad.exe $PROFILE
$PSBoundParameters
Berisi kamus parameter yang diteruskan ke skrip atau fungsi dan nilainya current . Variabel ini hanya memiliki nilai dalam cakupan di mana parameter dideklarasikan, seperti skrip atau fungsi. Anda dapat menggunakannya untuk menampilkan atau mengubah current nilai parameter atau meneruskan nilai parameter ke skrip atau fungsi lain.
Dalam contoh ini, fungsi Test2 meneruskan $PSBoundParameters
ke fungsi Test1 . $PSBoundParameters
ditampilkan dalam format Kunci dan Nilai.
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
Berisi objek yang mewakili cmdlet atau fungsi tingkat lanjut yang sedang dijalankan.
Anda dapat menggunakan properti dan metode objek dalam cmdlet atau kode fungsi Anda untuk merespons kondisi penggunaan. Misalnya, properti ParameterSetName berisi nama set parameter yang sedang digunakan, dan metode ShouldProcess menambahkan parameter WhatIf dan Confirm ke cmdlet secara dinamis.
Untuk informasi selengkapnya tentang $PSCmdlet
variabel otomatis, lihat about_Functions_CmdletBindingAttribute dan about_Functions_Advanced.
$PSCommandPath
Berisi jalur lengkap dan nama file skrip yang sedang dijalankan. Variabel ini valid di semua skrip.
$PSCulture
Dimulai di PowerShell 7, $PSCulture
mencerminkan budaya current runspace PowerShell (sesi). Jika budaya diubah di runspace PowerShell, nilai untuk runspace tersebut $PSCulture
diperbarui.
Budaya menentukan format tampilan item seperti angka, mata uang, dan tanggal, dan disimpan dalam objek System.Globalization.CultureInfo . Gunakan Get-Culture
untuk menampilkan budaya komputer. $PSCulture
berisi nilai properti Nama.
$PSDebugContext
Saat penelusuran kesalahan, variabel ini berisi informasi tentang lingkungan penelusuran kesalahan. Jika tidak, ini berisi nilai null . Akibatnya, Anda dapat menggunakannya untuk menentukan apakah debugger memiliki kontrol. Ketika diisi, ini berisi objek PsDebugContext yang memiliki properti Breakpoints dan InvocationInfo . Properti InvocationInfo memiliki beberapa properti yang berguna, termasuk properti Lokasi . Properti Lokasi menunjukkan jalur skrip yang sedang di-debug.
$PSEdition
Berisi nilai yang sama dalam $PSVersionTable.PSEdition
. Variabel ini tersedia untuk digunakan dalam file manifes modul, sedangkan $PSVersionTable
tidak.
$PSHOME
Berisi jalur lengkap direktori penginstalan untuk PowerShell, biasanya, C:\Program Files\PowerShell\7
dalam sistem Windows. Anda dapat menggunakan variabel ini di jalur file PowerShell. Misalnya, perintah berikut mencari topik Bantuan konseptual untuk kata Bantuan:
Select-String -Pattern Help -Path $PSHOME\en-US\*.txt
$PSItem
Sama seperti $_
. current Berisi objek dalam objek alur. Anda dapat menggunakan variabel ini dalam perintah yang melakukan tindakan pada setiap objek dalam alur.
Untuk informasi selengkapnya, lihat about_PSItem.
$PSScriptRoot
Berisi jalur lengkap direktori induk skrip yang dijalankan.
Di PowerShell 2.0, variabel ini hanya valid dalam modul skrip (.psm1
).
Dimulai di PowerShell 3.0, ini valid di semua skrip.
$PSSenderInfo
Berisi informasi tentang pengguna yang memulai PSSession, termasuk identitas pengguna dan zona waktu komputer asal. Variabel ini hanya tersedia dalam PSSessions.
Variabel $PSSenderInfo
ini mencakup properti yang dapat dikonfigurasi pengguna, ApplicationArguments, yang secara default, hanya $PSVersionTable
berisi dari sesi asal. Untuk menambahkan data ke properti ApplicationArguments , gunakan parameter ApplicationArguments cmdlet New-PSSessionOption
.
$PSUICulture
Berisi nama budaya antarmuka pengguna (UI) yang dikonfigurasi dalam sistem operasi. Budaya UI menentukan string teks mana yang digunakan untuk elemen antarmuka pengguna, seperti menu dan pesan. Ini adalah nilai properti System.Globalization.CultureInfo.CurrentUICulture.Name sistem. Untuk mendapatkan objek System.Globalization.CultureInfo untuk sistem, gunakan Get-UICulture
cmdlet .
$PSVersionTable
Berisi tabel hash baca-saja yang menampilkan detail tentang versi PowerShell yang berjalan dalam current sesi. Tabel menyertakan item berikut:
- PSVersion - Nomor versi PowerShell
- PSEdition Properti ini memiliki nilai 'Desktop' untuk PowerShell 4 ke bawah serta PowerShell 5.1 pada edisi Windows berfungsi lengkap. Properti ini memiliki nilai
Core
untuk PowerShell 6 dan yang lebih tinggi serta Windows PowerShell 5.1 pada edisi pengurangan jejak seperti Windows Nano Server atau Windows IoT. - GitCommitId - Id penerapan file sumber, di GitHub,
- OS - Deskripsi sistem operasi yang dijalankan PowerShell.
- Platform - Platform tempat sistem operasi berjalan. Nilai di Linux dan macOS adalah Unix. Lihat
$IsMacOs
dan$IsLinux
. - PSCompatibleVersions - Versi PowerShell yang kompatibel dengan current versi
- PSRemotingProtocolVersion - Versi protokol manajemen jarak jauh PowerShell.
- SerializationVersion - Versi metode serialisasi
- WSManStackVersion - Nomor versi tumpukan WS-Management
$PWD
Berisi objek jalur yang mewakili jalur current lengkap lokasi direktori untuk current runspace PowerShell.
Catatan
PowerShell mendukung beberapa runspace per proses. Setiap runspace memiliki direktorinya sendiricurrent. Ini tidak sama current dengan direktori proses: [System.Environment]::CurrentDirectory
.
$Sender
Berisi objek yang menghasilkan kejadian ini. Variabel ini hanya diisi dalam blok Tindakan dari perintah pendaftaran peristiwa. Nilai variabel ini juga dapat ditemukan di properti PSEventArgs Pengirim objek yang Get-Event
mengembalikan.
$ShellId
Berisi pengidentifikasi current shell.
$StackTrace
Berisi pelacakan tumpukan untuk kesalahan terbaru.
$switch
Berisi enumerator bukan nilai pernyataan yang Switch
dihasilkan. Variabel $switch
hanya ada saat Switch
pernyataan berjalan; itu dihapus ketika switch
pernyataan menyelesaikan eksekusi. Untuk informasi selengkapnya, lihat about_Switch.
Enumerator berisi properti dan metode yang dapat Anda gunakan untuk mengambil nilai perulangan dan mengubah iterasi current perulangan. Untuk informasi selengkapnya, lihat Menggunakan Enumerator.
$this
Variabel $this
digunakan dalam blok skrip yang memperluas kelas untuk merujuk ke instans kelas itu sendiri.
Extensible Type System (ETS) PowerShell memungkinkan Anda menambahkan properti ke kelas menggunakan blok skrip. Dalam blok skrip yang menentukan properti skrip atau metode skrip, $this
variabel mengacu pada instans objek kelas yang sedang diperluas. Misalnya, PowerShell menggunakan ETS untuk menambahkan properti BaseName ke kelas FileInfo .
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};}
Untuk informasi selengkapnya, lihat about_Types.ps1xml.
Dalam kelas PowerShell, $this
variabel mengacu pada objek instans kelas itu sendiri, memungkinkan akses ke properti dan metode yang ditentukan di kelas . Untuk informasi selengkapnya, lihat about_Classes.
Variabel $this
ini juga digunakan oleh kelas peristiwa .NET yang mengambil blok skrip sebagai delegasi untuk penanganan aktivitas. Dalam skenario ini, $this
mewakili objek yang berasal dari peristiwa, yang dikenal sebagai pengirim peristiwa.
$true
Berisi True. Anda dapat menggunakan variabel ini untuk mewakili True dalam perintah dan skrip.
Menggunakan Enumerator
Variabel $input
, $foreach
, dan $switch
adalah semua enumerator yang digunakan untuk melakukan iterasi melalui nilai yang diproses oleh blok kode yang berisinya.
Enumerator berisi properti dan metode yang dapat Anda gunakan untuk memajukan atau reset iterasi, atau mengambil nilai iterasi. Memanipulasi enumerator secara langsung tidak dianggap sebagai praktik terbaik.
Dalam perulangan, kata kunci kontrol alur putus dan lanjutkan harus lebih disukai.
Dalam fungsi yang menerima input alur, praktik terbaik adalah menggunakan parameter dengan atribut ValueFromPipeline atau ValueFromPipelineByPropertyName .
Untuk informasi selengkapnya, lihat about_Functions_Advanced_Parameters.
MoveNext
Metode MoveNext memajukan enumerator ke elemen koleksi berikutnya. MoveNext mengembalikan True
jika enumerator berhasil dimajukan, False
jika enumerator telah melewati akhir koleksi.
Catatan
Nilai Boolean yang dikembalikan oleh MoveNext dikirim ke aliran output.
Anda dapat menekan output dengan mengetikkannya atau [void]
memilahnya ke Out-Null.
$input.MoveNext() | Out-Null
[void]$input.MoveNext()
Reset
Metode ini Reset mengatur enumerator ke posisi awalnya, yaitu sebelum elemen pertama dalam koleksi.
Current
Properti Current mendapatkan elemen dalam koleksi, atau alur, pada current posisi enumerator.
Properti Current terus mengembalikan properti yang sama hingga MoveNext dipanggil.
Contoh
Contoh 1: Menggunakan variabel $input
Dalam contoh berikut, mengakses $input
variabel akan menghapus variabel hingga lain kali blok proses dijalankan. Menggunakan metode mereset Reset $input
variabel ke current nilai alur.
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
Blok proses secara otomatis memajukan $input
variabel bahkan jika Anda tidak mengaksesnya.
$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
Contoh 2: Menggunakan $input di luar blok proses
Di luar blok $input
proses, variabel mewakili semua nilai yang disalurkan ke dalam fungsi.
$input
Mengakses variabel akan menghapus semua nilai.- Metode mereset Reset seluruh koleksi.
- Properti Current tidak pernah diisi.
- Metode MoveNext mengembalikan false karena koleksi tidak dapat dimajukan.
- Memanggil MoveNext menghapus
$input
variabel.
- Memanggil MoveNext menghapus
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:
Contoh 3: Menggunakan $input.Current harta benda
Current Dengan properti , current nilai alur dapat diakses beberapa kali tanpa menggunakan Reset metode . Blok proses tidak secara otomatis memanggil metode MoveNext .
Properti Current tidak pernah diisi kecuali Anda secara eksplisit memanggil MoveNext. Properti Current dapat diakses beberapa kali di dalam blok proses tanpa menghapus nilainya.
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
Contoh 4: Menggunakan variabel $foreach
$input
Tidak seperti variabel, $foreach
variabel selalu mewakili semua item dalam koleksi saat diakses secara langsung. Current Gunakan properti untuk mengakses current elemen koleksi, dan Reset metode MoveNext dan untuk mengubah nilainya.
Catatan
Setiap perulangan perulangan foreach
secara otomatis memanggil metode MoveNext .
Perulangan berikut hanya dijalankan dua kali. Dalam iterasi kedua, koleksi dipindahkan ke elemen ketiga sebelum iterasi selesai. Setelah iterasi kedua, sekarang tidak ada lagi nilai untuk iterasi, dan perulangan berakhir.
Properti MoveNext tidak memengaruhi variabel yang dipilih untuk melakukan iterasi melalui koleksi ($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
Menggunakan metode mengatur Reset ulang current elemen dalam koleksi. Contoh berikut mengulang melalui dua elemen pertama dua kali karena metode dipanggil Reset . Setelah dua perulangan pertama, if
pernyataan gagal dan perulangan berulang melalui ketiga elemen secara normal.
Penting
Ini dapat mengakibatkan perulangan tak terbatas.
$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
Contoh 5: Menggunakan variabel $switch
Variabel $switch
memiliki aturan yang sama persis dengan $foreach
variabel . Contoh berikut menunjukkan semua konsep enumerator.
Catatan
Perhatikan bagaimana kasus NotEvaluated tidak pernah dijalankan, meskipun tidak break
ada pernyataan setelah metode MoveNext .
$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