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 untuk dan dibuat dan dikelola oleh PowerShell.
Deskripsi panjang
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
$$
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 di dalam tanda kurung (...), sintaks subekspresi $(...), atau ekspresi array @(...) selalu mengatur ulang $? 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. Menyimpan objek saat ini di dalam objek pipeline. 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 perulangan saat ini. 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 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".
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, ,processatauendblok,$inputvariabel menghitung koleksi semua input ke fungsi.beginDalam blok,$inputvariabel tidak berisi data.Di blok
process, variabel$inputberisi objek saat ini dalam alur.endDalam blok ,$inputvariabel menghitung pengumpulan semua input ke fungsi.Catatan
Anda tidak dapat menggunakan variabel di
$inputdalamprocessblok danendblok 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 perulangan saat ini. 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 sesi saat ini berjalan pada .NET Core Runtime (CoreCLR). Jika tidak, berisi $false.
$IsLinux
Berisi $true jika sesi saat ini berjalan pada sistem operasi Linux.
Jika tidak, berisi $false.
$IsMacOS
Berisi $true jika sesi saat ini berjalan pada sistem operasi macOS.
Jika tidak, berisi $false.
$IsWindows
Berisi $true jika sesi saat ini 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
exitkata kunci:$LASTEXITCODEdiatur ke nilai yang ditentukan olehexitkata kunci. Untuk informasi selengkapnya, lihat about_Language_Keywords.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
exitkata kunci - Skrip memanggil perintah asli
- Skrip menggunakan
exitkata kunci
- Skrip memanggil skrip lain yang menggunakan
Saat skrip dipanggil dengan
pwshmenggunakan parameter File ,$LASTEXITCODEdiatur ke:-
1jika skrip dihentikan karena pengecualian - Nilai yang ditentukan oleh
exitkata kunci, jika digunakan dalam skrip -
0jika skrip berhasil diselesaikan
-
Saat skrip dipanggil dengan
pwshmenggunakan parameter Perintah ,$LASTEXITCODEdiatur ke:-
1jika skrip dihentikan karena pengecualian atau jika hasil perintah terakhir diatur$?ke$false -
0jika 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 -match , dan salah satu mendeteksi kecocokan-notmatch, 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 mengatur ulang $Matches ke $null. Nilai yang dicocokkan sebelumnya disimpan di $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 blok skrip, fungsi, dan 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, properti PSScriptRoot dan PSCommandPath dari variabel otomatis $MyInvocation berisi informasi tentang skrip yang memanggil atau dipanggil, bukan skrip saat ini.
$NestedPromptLevel
Berisi tingkatan prompt saat ini. 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 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 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 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 .
$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
Mulai dari PowerShell 7, $PSCulture mencerminkan budaya runspace PowerShell saat ini (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 $_. Menyimpan objek saat ini di dalam objek pipeline. 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 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 berfungsi lengkap. Properti ini memiliki nilai
Coreuntuk 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
$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.
Catatan
PowerShell mendukung beberapa runspace per proses. Setiap runspace memiliki direktori saat ini sendiri . 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 PSEventArgs Pengirim objek yang Get-Event mengembalikan.
$ShellId
Berisi identifikasi shell saat ini.
$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 perulangan saat ini. 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 mengatur ulang 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 kumpulan, atau pipeline, 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 $input variabel akan menghapus variabel hingga lain kali 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 $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.
-
$inputMengakses 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
$inputvariabel.
-
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
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
$input Tidak seperti variabel, $foreach variabel selalu mewakili semua item dalam koleksi saat diakses secara langsung. Gunakan properti
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 Reset mengatur ulang elemen saat ini 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