Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Deskripsi singkat
Menjelaskan variabel yang menyimpan informasi status, yang dibuat dan dikelola oleh PowerShell.
Deskripsi panjang
Secara konseptual, sebagian besar variabel ini dianggap hanya dapat dibaca. Meskipun mereka 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
$$
Berisi token terakhir di baris terakhir yang diterima dalam 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 blok process dan end, pemanggilan this.WriteError() atau $PSCmdlet.WriteError() pada titik mana pun akan menetapkan $? menjadi False, sama seperti this.ThrowTerminatingError() dan $PSCmdlet.ThrowTerminatingError().
Cmdlet Write-Error selalu mengatur $? ke False segera setelah dijalankan, tetapi tidak akan mengatur $? 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 asli (executable), $? diatur ke True saat $LASTEXITCODE adalah 0, dan diatur ke False saat $LASTEXITCODE adalah nilai lain.
Nota
Hingga PowerShell 7, membungkus pernyataan di dalam tanda kurung (...), sintaks subekspresi $(...), atau ekspresi array @(...) selalu mengatur ulang $? ke True. Misalnya, (Write-Error) menunjukkan $? 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 dalam sesi.
$_
Sama seperti $PSItem. Memuat objek saat ini di dalam objek alur kerja. 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 fungsi, skrip, atau blok skrip. Saat membuat fungsi, Anda dapat mendeklarasikan parameter dengan kata kunci param atau dengan menambahkan daftar parameter yang dipisahkan koma dalam tanda kurung setelah nama fungsi.
Dalam tindakan peristiwa, variabel $args berisi objek yang mewakili argumen peristiwa peristiwa yang sedang diproses. Variabel ini hanya diisi dalam blok Action perintah pendaftaran peristiwa. Nilai variabel ini juga dapat ditemukan di properti
$ConsoleFileName
Berisi jalur file konsol (.psc1) yang terakhir digunakan dalam sesi. Variabel ini diisi saat Anda memulai PowerShell dengan parameter
Saat Anda menggunakan cmdlet Export-Console tanpa parameter, cmdlet tersebut 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
Mengandung kumpulan objek kesalahan yang mewakili kesalahan terbaru. Kesalahan terbaru adalah objek kesalahan pertama dalam array $Error[0].
Untuk mencegah kesalahan ditambahkan ke array $Error, gunakan parameter ErrorAction umum dengan nilai Abaikan. Untuk informasi selengkapnya, lihat about_CommonParameters.
$Event
Berisi objek PSEventArgs yang mewakili peristiwa yang sedang diproses. Variabel ini hanya diisi dalam blok Action perintah pendaftaran peristiwa, seperti Register-ObjectEvent. Nilai variabel ini adalah objek yang sama dengan yang dikembalikan cmdlet Get-Event. Anda dapat menggunakan properti Event variabel, seperti $Event.TimeGenerated, dalam Action blokir skrip.
$EventArgs
Berisi objek yang mewakili argumen peristiwa pertama yang berasal dari EventArgs peristiwa yang sedang diproses. Variabel ini hanya diisi dalam blok Action perintah pendaftaran peristiwa. Nilai variabel ini juga dapat ditemukan di properti
$EventSubscriber
Berisi objek PSEventSubscriber yang mewakili subskriber acara yang sedang diproses. Variabel ini hanya diisi dalam blok Action perintah pendaftaran peristiwa. Nilai variabel ini adalah objek yang sama dengan yang dikembalikan cmdlet Get-EventSubscriber.
$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 perulangan foreach berjalan; ini dihapus setelah perulangan selesai.
Enumerator berisi properti dan metode yang dapat Anda gunakan untuk mengambil nilai perulangan dan mengubah iterasi perulangan saat ini. Untuk informasi lebih lanjut, lihat Menggunakan Enumerator.
$HOME
Berisi jalur lengkap direktori beranda pengguna. Pada Windows, variabel ini menggunakan nilai variabel lingkungan Windows "$Env:USERPROFILE", biasanya C:\Users\<UserName>. Pada Unix, variabel ini menggunakan nilai variabel lingkungan HOME.
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 aplikasi host saat ini untuk PowerShell.
Anda dapat menggunakan variabel ini untuk mewakili host saat ini dalam perintah atau untuk menampilkan atau mengubah properti host, seperti $Host.Version atau $Host.CurrentCulture, atau $Host.UI.RawUI.BackGroundColor = "Red".
Nota
Pengaturan warna di $Host.PrivateData telah digantikan oleh variabel preferensi $PSStyle. Untuk informasi selengkapnya, lihat about_ANSI_Terminals.
$input
Berisi enumerator yang menghitung semua input yang diteruskan ke fungsi.
Variabel $input hanya tersedia untuk fungsi, blokir skrip (yang merupakan fungsi yang tidak disebutkan namanya), dan file skrip (yang disimpan blokir skrip).
Dalam fungsi tanpa blok
begin,process, atauend, variabel$inputmenghitung koleksi semua input ke fungsi.Di blok
begin, variabel$inputtidak berisi data.Di blok
process, variabel$inputberisi objek saat ini dalam alur.Di blok
end, variabel$inputmenghitung pengumpulan semua input ke fungsi.Nota
Anda tidak dapat menggunakan variabel di
$inputdalamprocessblok danendblok dalam fungsi atau blok skrip yang sama.
Karena $input adalah enumerator, mengakses salah satu propertinya menyebabkan $input tidak lagi tersedia. Anda dapat menyimpan $input dalam variabel lain untuk menggunakan kembali properti $input.
Enumerator berisi properti dan metode yang dapat Anda gunakan untuk mengambil nilai perulangan dan mengubah iterasi perulangan saat ini. Untuk informasi lebih lanjut, lihat Menggunakan Enumerator.
Variabel $input juga tersedia untuk perintah yang ditentukan oleh parameter -Commandpwsh saat dipanggil dari baris perintah. Contoh berikut dijalankan dari shell Perintah Windows.
echo Hello | pwsh -Command """$input World!"""
$IsCoreCLR
Berisi $true jika sesi saat ini berjalan pada .NET Core Runtime (CoreCLR). Jika tidak, mengandung $false.
$IsLinux
Berisi $true jika sesi saat ini berjalan pada sistem operasi Linux.
Jika tidak, mengandung $false.
$IsMacOS
Berisi $true jika sesi saat ini berjalan pada sistem operasi macOS.
Jika tidak, mengandung $false.
$IsWindows
Berisi $true jika sesi saat ini berjalan pada sistem operasi Windows. Jika tidak, mengandung $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 kata kunci exit digunakan:
Saat skrip menggunakan kata kunci
exit:$LASTEXITCODEdiatur ke nilai yang ditentukan oleh kata kunciexit. Untuk informasi selengkapnya, lihat tentang_Kata_Kunci_Bahasa.Ketika skrip dipanggil secara langsung, seperti
./Test.ps1, atau dengan operator panggilan (&) seperti& ./Test.ps1:Nilai
$LASTEXITCODEtidak diubah kecuali:- Skrip memanggil skrip lain yang menggunakan kata kunci
exit - Skrip memanggil perintah asli
- Skrip menggunakan kata kunci
exit
- Skrip memanggil skrip lain yang menggunakan kata kunci
Saat skrip dipanggil dengan
menggunakan parameter File , diatur ke: -
1jika skrip dihentikan karena pengecualian - Nilai yang ditentukan oleh kata kunci
exit, jika digunakan dalam skrip -
0jika skrip berhasil diselesaikan
-
Saat skrip dipanggil dengan
pwshmenggunakan Perintah parameter,$LASTEXITCODEdiatur ke:-
1jika skrip dihentikan karena pengecualian atau jika hasil perintah terakhir diatur$?ke$false -
0jika skrip berhasil diselesaikan dan perintah terakhir mengatur hasil dari$?ke$true
-
Untuk informasi selengkapnya tentang parameter File dan Command, lihat about_Pwsh.
$Matches
Variabel $Matches berfungsi dengan operator -match dan -notmatch. Saat Anda mengirimkan input skalar $Matches juga dapat diisi dengan tangkapan saat Anda menggunakan ekspresi reguler dengan operator -match.
Untuk informasi selengkapnya tentang operator -match, lihat about_Comparison_Operators. Untuk informasi selengkapnya tentang ekspresi reguler, lihat about_Regular_Expressions.
Variabel $Matches juga berfungsi dalam pernyataan switch dengan parameter -Regex. Ini diisi dengan cara yang sama seperti operator -match dan -notmatch. Untuk informasi selengkapnya tentang pernyataan switch, lihat about_Switch.
Nota
Ketika $Matches diisi dalam sesi, $Matches mempertahankan nilai yang cocok hingga nilai tersebut ditimpa oleh kecocokan lain. Jika -match digunakan lagi dan tidak ada kecocokan yang ditemukan, itu tidak mengatur ulang $Matches ke $null. Nilai yang dicocokkan sebelumnya disimpan dalam $Matches hingga kecocokan lain ditemukan.
$MyInvocation
Berisi informasi tentang perintah saat ini, seperti nama, parameter, nilai parameter, dan informasi tentang bagaimana perintah dimulai, dipanggil, atau dipanggil, seperti nama skrip yang memanggil perintah saat ini.
$MyInvocation hanya diisi untuk skrip, fungsi, dan blokir skrip. Anda dapat menggunakan informasi dalam objek System.Management.Automation.InvocationInfo yang $MyInvocation kembalikan dalam skrip saat ini, seperti nama fungsi ($MyInvocation.MyCommand.Name) untuk mengidentifikasi perintah saat ini.
Ini berguna untuk menemukan nama skrip saat ini.
Dimulai di PowerShell 3.0, MyInvocation memiliki properti baru berikut ini.
- PSScriptRoot - Berisi jalur lengkap ke skrip yang memanggil perintah saat ini. Nilai properti ini hanya diisi ketika pemanggil adalah skrip.
- PSCommandPath - Berisi jalur lengkap dan nama file skrip yang memanggil perintah saat ini. Nilai properti ini hanya diisi ketika pemanggil adalah skrip.
Tidak seperti variabel otomatis $PSScriptRoot dan $PSCommandPath, PSScriptRoot dan properti PSCommandPath dari variabel otomatis $MyInvocation berisi informasi tentang skrip pemanggil atau panggilan, bukan skrip saat ini.
$NestedPromptLevel
Berisi tingkatan prompt saat ini. Nilai 0 menunjukkan tingkat permintaan asli. Nilainya dinaikkan saat Anda memasuki tingkat berlapis dan diturunkan 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 perintah saat ini, menyimpan konteks eksekusi, dan menaikkan nilai variabel $NestedPromptLevel. Untuk membuat perintah berlapis tambahan (hingga 128 tingkat) atau untuk kembali ke prompt perintah asli, selesaikan perintah, atau ketik exit.
Variabel $NestedPromptLevel membantu Anda melacak tingkat perintah. Anda dapat membuat prompt perintah PowerShell alternatif yang menyertakan nilai ini sehingga selalu terlihat.
$null
PowerShell memperlakukan $null sebagai objek dengan nilai, atau tempat penampung, sehingga Anda dapat menggunakan $null untuk mewakili nilai kosong dalam kumpulan nilai.
Misalnya, saat $null disertakan dalam koleksi, itu dihitung sebagai salah satu objek.
$a = "one", $null, "three"
$a.Count
3
Jika Anda menyalurkan variabel $null ke cmdlet ForEach-Object, 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 parameter $null mengambil alih nilai parameter default.
Namun, karena PowerShell memperlakukan variabel $null 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 sesi PowerShell saat ini.
$PROFILE
Berisi jalur lengkap profil PowerShell untuk pengguna saat ini dan aplikasi host saat ini. 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 saat ini. Variabel ini hanya memiliki nilai dalam cakupan di mana parameter dideklarasikan, seperti skrip atau fungsi. Anda dapat menggunakannya untuk menampilkan atau mengubah nilai parameter saat ini atau untuk meneruskan nilai parameter ke skrip atau fungsi lain.
Dalam contoh ini, fungsi Test2 meneruskan $PSBoundParameters ke fungsi Test1.
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
Untuk informasi selengkapnya tentang variabel otomatis $PSCmdlet, 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 runspace PowerShell saat ini (sesi). Jika kultur diubah di runspace PowerShell, nilai $PSCulture untuk runspace tersebut 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 dari properti Nama .
$PSDebugContext
Saat debugging, variabel ini berisi informasi tentang lingkungan debugging. Jika tidak, ini berisi nilai null. Akibatnya, Anda dapat menggunakannya untuk menentukan apakah debugger memiliki kontrol. Saat diisi, objek PsDebugContext mengandung properti Breakpoints dan InvocationInfo. Properti
$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 $_. Memuat objek saat ini di dalam objek alur kerja. 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 mencakup properti yang dapat dikonfigurasi pengguna, ApplicationArguments, yang secara default, hanya berisi $PSVersionTable dari sesi asal. Untuk menambahkan data ke properti ApplicationArguments, gunakan parameter ApplicationArguments dari cmdlet New-PSSessionOption.
Penting
Karena properti ini berisi data yang secara eksplisit disediakan oleh klien, menggunakan ini untuk keputusan keamanan dapat memungkinkan penyerang melewati kontrol otorisasi. Jangan pernah menggunakan data ini untuk keputusan kepercayaan. Validasi semua input pengguna saat digunakan untuk logika aplikasi lain.
$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 dari sistem System.Globalization.CultureInfo.CurrentUICulture.Name. Untuk mendapatkan objek System.Globalization.CultureInfo untuk sistem, gunakan cmdlet Get-UICulture.
$PSVersionTable
Berisi tabel hash yang hanya dapat dibaca yang menampilkan detail tentang versi PowerShell yang sedang berjalan pada sesi saat ini. 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 dengan fitur lengkap. Properti ini memiliki nilai
Coreuntuk PowerShell 6 dan yang lebih tinggi serta Windows PowerShell 5.1 pada versi footprint-reduksi 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 pada Linux dan macOS adalah Unix. Lihat
$IsMacOSdan$IsLinux. - PSCompatibleVersions - Versi PowerShell yang kompatibel dengan versi saat ini
- PSRemotingProtocolVersion - Versi protokol manajemen jarak jauh PowerShell.
- SerializationVersion - Versi metode serialisasi
- WSManStackVersion - Nomor versi tumpukan WS-Management
$PWD
Berisi objek jalur yang mewakili jalur lengkap lokasi direktori saat ini pada runspace PowerShell saat ini.
Nota
PowerShell mendukung beberapa runspace per proses. Setiap runspace memiliki direktori sendiri saat ini. Ini tidak sama dengan direktori proses saat ini: [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 Pengirim dari objek PSEventArgs yang Get-Event kembalikan.
$ShellId
Berisi pengenal dari shell saat ini.
$StackTrace
Berisi pelacakan tumpukan untuk kesalahan terbaru.
$switch
Berisi enumerator dan bukan nilai yang dihasilkan dari pernyataan switch. Variabel $switch hanya ada saat pernyataan switch berjalan; ini dihapus ketika pernyataan switch menyelesaikan eksekusi. Untuk informasi selengkapnya, lihat about_Switch.
Enumerator berisi properti dan metode yang dapat Anda gunakan untuk mengambil nilai perulangan dan mengubah iterasi perulangan saat ini. Untuk informasi lebih lanjut, 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 blokir 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, variabel $this 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 blokir skrip sebagai delegasi untuk penanganan aktivitas. Dalam skenario ini, $this mewakili objek yang berasal dari peristiwa, yang dikenal sebagai pengirim peristiwa.
$true
Berisi Benar. 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 berisi.
Enumerator berisi properti dan metode yang dapat Anda gunakan untuk memajukan atau mengatur ulang iterasi, atau mengambil nilai iterasi. Memanipulasi enumerator secara langsung tidak dianggap sebagai praktik terbaik.
Dalam perulangan, kata kunci kontrol alur break dan continue lebih disarankan.
Dalam fungsi yang menerima input alur, praktik terbaik adalah menggunakan parameter dengan atribut ValueFromPipeline atau ValueFromPipelineByPropertyName.
Untuk informasi selengkapnya, lihat about_Functions_Advanced_Parameters.
PindahBerikutnya
Metode moveNext True jika enumerator berhasil dimajukan, False jika enumerator telah melewati akhir koleksi.
Nota
Nilai Boolean yang dikembalikan oleh MoveNext dikirim ke aliran output.
Anda dapat menekan output dengan mengubah tipe data menjadi [void] atau mengalihkannya ke Out-Null.
$input.MoveNext() | Out-Null
[void]$input.MoveNext()
Reset
Metode Reset mengatur enumerator ke posisi awalnya, yang sebelum elemen pertama dalam koleksi.
Current
Properti Current mendapatkan elemen dalam koleksi, atau alur, pada posisi enumerator saat ini.
Properti Current terus mengembalikan properti yang sama hingga MoveNext dipanggil.
Examples
Contoh 1: Menggunakan variabel $input
Dalam contoh berikut, mengakses variabel $input mengosongkan variabel tersebut sampai waktu berikutnya blok proses dijalankan. Menggunakan metode Reset mengatur ulang variabel $input ke nilai alur saat ini.
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 variabel $input meskipun 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 proses, variabel $input mewakili semua nilai yang disalurkan ke dalam fungsi.
- Mengakses variabel
$inputmenghapus semua nilai. - Metode Reset mengatur ulang seluruh koleksi.
- Properti Current tidak pernah diisi.
- Metode MoveNext mengembalikan false karena koleksi tidak dapat dimajukan.
- Pemanggilan MoveNext menghapus variabel
$input.
- Pemanggilan MoveNext menghapus variabel
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 propertiCurrent dari $input.
Dengan properti Current, nilai alur saat ini dapat diakses beberapa kali tanpa menggunakan metode Reset. 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
Tidak seperti variabel $input, variabel $foreach selalu mewakili semua item dalam koleksi saat diakses secara langsung. Gunakan properti
Nota
Setiap 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 Reset mengatur ulang elemen saat ini dalam koleksi. Contoh berikut mengulang melalui dua elemen pertama dua kali karena metode Reset dipanggil. Setelah dua perulangan pertama, pernyataan if 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 variabel $foreach. Contoh berikut menunjukkan semua konsep enumerator.
Nota
Perhatikan bagaimana kasus NotEvaluated tidak pernah dijalankan, meskipun tidak ada statemen break 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