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 dalam proses Windows PowerShell 5.1 latar belakang. Proses ini dibuat ketika fitur Kompatibilitas mengimpor modul pertama. Proses ditutup ketika modul terakhir tersebut 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. Ini 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 Inti PowerShell 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 mencantumkan modul tambahan yang tidak boleh dikloning oleh 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. Mengharuskan Windows PowerShell 5.1
  3. Beroperasi pada parameter cmdlet berseri dan mengembalikan nilai, bukan pada objek langsung
  4. Semua modul yang diimpor ke sesi jarak jauh Windows PowerShell berbagi runspace yang sama.

Kata Kunci

about_Windows_PowerShell_Compatibility

Lihat juga