Bagikan melalui


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:

  1. Hanya berfungsi secara lokal pada komputer Windows
  2. Memerlukan Windows PowerShell 5.1
  3. Beroperasi pada parameter cmdlet berseri dan mengembalikan nilai, bukan pada objek langsung
  4. 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.

Lihat juga