about_Windows_PowerShell_Compatibility
Deskripsi singkat
Menjelaskan fungsionalitas Kompatibilitas Windows PowerShell untuk PowerShell 7.
Deskripsi panjang
Kecuali manifes modul menunjukkan bahwa modul kompatibel dengan PowerShell Core, modul dalam folder dimuat %windir%\system32\WindowsPowerShell\v1.0\Modules
dalam proses Windows PowerShell 5.1 latar belakang oleh fitur Kompatibilitas Windows PowerShell.
Menggunakan fitur Kompatibilitas
Saat modul pertama diimpor menggunakan fitur Kompatibilitas Windows PowerShell, PowerShell membuat sesi jarak jauh bernama WinPSCompatSession
yang berjalan di latar belakang proses Windows PowerShell 5.1. PowerShell membuat proses ini saat fitur Kompatibilitas mengimpor modul pertama. Proses ditutup ketika modul terakhir dihapus (menggunakan Remove-Module
) atau ketika proses PowerShell keluar.
Modul yang dimuat dalam WinPSCompatSession
sesi digunakan melalui jarak jauh implisit dan tercermin ke dalam sesi PowerShell saat ini. Ini adalah metode transportasi yang sama yang digunakan untuk pekerjaan PowerShell.
Saat modul diimpor ke sesi WinPSCompatSession
, jarak jauh implisit menghasilkan modul proksi di direktori pengguna $env:Temp
dan mengimpor modul proksi ini ke sesi PowerShell saat ini. Modul proksi memungkinkan PowerShell mendeteksi bahwa modul dimuat menggunakan fungsionalitas Kompatibilitas Windows PowerShell.
Setelah sesi dibuat, sesi dapat digunakan untuk operasi yang tidak berfungsi dengan benar pada objek yang dideserialisasi. Seluruh alur dijalankan di Windows PowerShell dan hanya hasil akhir yang dikembalikan. Contohnya:
$s = Get-PSSession -Name WinPSCompatSession
Invoke-Command -Session $s -ScriptBlock {
"Running in Windows PowerShell version $($PSVersionTable.PSVersion)"
}
Fitur Kompatibilitas dapat dipanggil dengan dua cara:
Secara eksplisit dengan mengimpor modul menggunakan parameter UseWindowsPowerShell
Import-Module -Name ScheduledTasks -UseWindowsPowerShell
Secara implisit dengan mengimpor modul Windows PowerShell berdasarkan nama modul, jalur, atau pengisian otomatis melalui penemuan perintah.
Import-Module -Name ServerManager Get-AppLockerPolicy -Local
Jika belum dimuat, modul AppLocker dimuat otomatis saat Anda menjalankan
Get-AppLockerPolicy
.
Kompatibilitas Windows PowerShell memblokir pemuatan modul yang tercantum dalam WindowsPowerShellCompatibilityModuleDenyList
pengaturan dalam file konfigurasi PowerShell.
Nilai default pengaturan ini adalah:
"WindowsPowerShellCompatibilityModuleDenyList": [
"PSScheduledJob","BestPractices","UpdateServices"
]
Mengelola pemuatan modul implisit
Untuk menonaktifkan perilaku implisit fitur Kompatibilitas Windows PowerShell, gunakan DisableImplicitWinCompat
pengaturan dalam file konfigurasi PowerShell. Pengaturan ini dapat ditambahkan ke powershell.config.json
file. Untuk informasi selengkapnya, lihat about_PowerShell_Config.
Contoh ini menunjukkan cara membuat file konfigurasi yang menonaktifkan fitur pemuatan modul implisit kompatibilitas Windows PowerShell.
$ConfigPath = "$PSHOME\DisableWinCompat.powershell.config.json"
$ConfigJSON = ConvertTo-Json -InputObject @{
"DisableImplicitWinCompat" = $true
"Microsoft.PowerShell:ExecutionPolicy" = "RemoteSigned"
}
$ConfigJSON | Out-File -Force $ConfigPath
pwsh -settingsFile $ConfigPath
Untuk informasi terbaru selengkapnya tentang kompatibilitas modul, lihat daftar kompatibilitas modul PowerShell 7.
Mengelola clobbering cmdlet
Fitur Kompatibilitas Windows PowerShell menggunakan jarak jauh implisit untuk memuat modul dalam mode kompatibilitas. Hasilnya adalah bahwa perintah yang diekspor oleh modul lebih diutamakan daripada perintah dengan nama yang sama dalam sesi PowerShell 7 saat ini. Dalam rilis PowerShell 7.0.0, ini termasuk modul inti yang dikirim dengan PowerShell.
Di PowerShell 7.1, perilaku diubah sehingga modul PowerShell inti berikut tidak dikloning:
- Microsoft.PowerShell.ConsoleHost
- Microsoft.PowerShell.Diagnostics
- Microsoft.PowerShell.Host
- Microsoft.PowerShell.Management
- Microsoft.PowerShell.Security
- Microsoft.PowerShell.Utility
- Microsoft.WSMan.Management
PowerShell 7.1 juga menambahkan kemampuan untuk mengecualikan lebih banyak modul dari clobbering dengan mode kompatibilitas.
Anda dapat menambahkan pengaturan ke WindowsPowerShellCompatibilityNoClobberModuleList
file konfigurasi PowerShell. Nilai pengaturan ini adalah daftar nama modul yang dipisahkan koma. Nilai default pengaturan ini adalah:
"WindowsPowerShellCompatibilityNoClobberModuleList": [ ]
Batasan
Fungsionalitas Kompatibilitas Windows PowerShell:
- Hanya berfungsi secara lokal pada komputer Windows
- Memerlukan Windows PowerShell 5.1
- Beroperasi pada parameter cmdlet berseri dan mengembalikan nilai, bukan pada objek langsung
- Berbagi satu runspace untuk semua modul yang diimpor ke sesi jarak jauh Windows PowerShell
File sementara
Fitur Kompatibilitas Windows PowerShell menggunakan jarak jauh implisit untuk membuat modul Windows PowerShell 5.1 tersedia di PowerShell 7. Jarak jauh implisit membuat file sementara di $env:Temp
direktori. Setiap modul yang diproksikan disimpan dalam folder terpisah dengan konvensi penamaan berikut:
-
remoteIpMoProxy_<ModuleName>_<ModuleVersion>_localhost_<SessionGuid>
.
PowerShell menghapus file sementara saat Anda menghapus modul terakhir yang diproksi dari sesi atau menutup sesi.