about_Language_Modes

Deskripsi singkat

Menjelaskan mode bahasa dan efeknya pada sesi PowerShell.

Deskripsi panjang

Mode bahasa sesi PowerShell menentukan, sebagian, elemen bahasa PowerShell mana yang dapat digunakan dalam sesi.

PowerShell mendukung mode bahasa berikut:

  • FullLanguage
  • ConstrainedLanguage (diperkenalkan di PowerShell 3.0)
  • RestrictedLanguage
  • NoLanguage

Apa itu mode bahasa?

Mode bahasa menentukan elemen bahasa yang diizinkan dalam sesi.

Mode bahasa sebenarnya adalah properti dari konfigurasi sesi (atau "titik akhir") yang digunakan untuk membuat sesi. Semua sesi yang menggunakan konfigurasi sesi tertentu memiliki mode bahasa konfigurasi sesi.

Semua sesi PowerShell memiliki mode bahasa, termasuk PSSessions yang Anda buat dengan menggunakan New-PSSession cmdlet, sesi sementara yang menggunakan parameter ComputerName, dan sesi default yang muncul saat Anda memulai PowerShell.

Sesi jarak jauh dibuat dengan menggunakan konfigurasi sesi pada komputer jarak jauh. Mode bahasa yang diatur dalam konfigurasi sesi menentukan mode bahasa sesi. Untuk menentukan konfigurasi sesi PSSession, gunakan parameter ConfigurationName cmdlet yang membuat sesi.

Mode bahasa

Bagian ini menjelaskan mode bahasa di sesi PowerShell.

Bahasa lengkap (FullLanguage)

Mode ini FullLanguage mengizinkan semua elemen bahasa dalam sesi. FullLanguageadalah mode bahasa default untuk sesi default pada semua versi Windows kecuali untuk Windows RT.

Bahasa terbatas (RestrictedLanguage)

Dalam RestrictedLanguage mode, pengguna dapat menjalankan perintah (cmdlet, fungsi, perintah CIM, dan alur kerja) tetapi tidak diizinkan untuk menggunakan blok skrip.

Dimulai di PowerShell 7.2, New-Object cmdlet dinonaktifkan dalam RestrictedLanguage mode saat penguncian sistem dikonfigurasi.

Secara default, hanya variabel berikut yang diizinkan dalam RestrictedLanguage mode:

  • $PSCulture
  • $PSUICulture
  • $True
  • $False
  • $Null

Manifes modul, yang menggunakan RestrictedLanguage mode, mengizinkan variabel tambahan berikut juga:

  • $PSScriptRoot
  • $PSEdition
  • $EnabledExperimentalFeatures

Hanya operator perbandingan berikut yang diizinkan:

  • -eq (sama dengan)
  • -gt (lebih besar dari)
  • -lt (kurang dari)

Pernyataan penugasan, referensi properti, dan panggilan metode tidak diizinkan.

Tidak ada bahasa (NoLanguage)

NoLanguage mode hanya dapat digunakan melalui API. NoLanguage mode berarti tidak ada teks skrip dari formulir apa pun yang diizinkan. Ini menghalangi penggunaan metode AddScript() yang mengirim fragmen skrip PowerShell untuk diurai dan dijalankan. Anda hanya dapat menggunakan AddCommand() dan AddParameter() yang tidak melalui parser.

Dimulai di PowerShell 7.2, New-Object cmdlet dinonaktifkan dalam NoLanguage mode saat penguncian sistem dikonfigurasi.

Bahasa yang dibatasi (Bahasa Yang Dibatasi)

Mode ini ConstrainedLanguage mengizinkan semua cmdlet dan semua elemen bahasa PowerShell, tetapi membatasi jenis yang diizinkan.

ConstrainedLanguagemode ini dirancang untuk mendukung User Mode Code Integrity (UMCI) pada Windows RT. Ini adalah satu-satunya mode bahasa yang didukung pada Windows RT, tetapi tersedia di semua sistem yang didukung.

UMCI melindungi perangkat ARM dengan hanya mengizinkan aplikasi bersertifikat Microsoft dan bersertifikat Microsoft untuk diinstal pada perangkat berbasis Windows RT. ConstrainedLanguage mode mencegah pengguna menggunakan PowerShell untuk menghindari atau melanggar UMCI.

Fitur ConstrainedLanguage mode adalah sebagai berikut:

  • Semua cmdlet dalam modul Windows, dan cmdlet lain yang disetujui UMCI, berfungsi penuh dan memiliki akses lengkap ke sumber daya sistem, kecuali seperti yang disebutkan.

  • Semua elemen bahasa skrip PowerShell diizinkan.

  • Semua modul yang disertakan dalam Windows dapat diimpor dan semua perintah yang dijalankan ekspor modul dalam sesi.

  • Cmdlet Add-Type dapat memuat rakitan yang ditandatangani, tetapi tidak dapat memuat kode C# arbitrer atau API Win32.

  • New-Object Cmdlet hanya dapat digunakan pada jenis yang diizinkan (tercantum di bawah).

  • Hanya jenis yang diizinkan (tercantum di bawah) yang dapat digunakan di PowerShell. Jenis lain tidak diizinkan.

  • Konversi jenis diizinkan, tetapi hanya ketika hasilnya adalah jenis yang diizinkan.

  • Parameter cmdlet yang mengonversi input string menjadi jenis hanya berfungsi ketika jenis yang dihasilkan adalah jenis yang diizinkan.

  • Metode ToString() dan metode .NET dari jenis yang diizinkan (tercantum di bawah) dapat dipanggil. Metode lain tidak dapat dipanggil.

  • Pengguna bisa mendapatkan semua properti dari jenis yang diizinkan. Pengguna hanya dapat mengatur nilai properti pada jenis Core. Hanya objek COM berikut yang diizinkan:

    • Scripting.Dictionary
    • Scripting.FileSystemObject
    • VBScript.RegExp

Jenis berikut diizinkan dalam ConstrainedLanguage mode . Pengguna bisa mendapatkan properti, memanggil metode, dan mengonversi objek ke jenis ini.

Tipe yang Diperbolehkan:

  • [AliasAttribute]
  • [AllowEmptyCollectionAttribute]
  • [AllowEmptyStringAttribute]
  • [AllowNullAttribute]
  • [Array]
  • [Bool]
  • [byte]
  • [char]
  • [CmdletBindingAttribute]
  • [DateTime]
  • [decimal]
  • [DirectoryEntry]
  • [DirectorySearcher]
  • [double]
  • [float]
  • [Guid]
  • [Hashtable]
  • [int]
  • [Int16]
  • [long]
  • [ManagementClass]
  • [ManagementObject]
  • [ManagementObjectSearcher]
  • [NullString]
  • [OutputTypeAttribute]
  • [ParameterAttribute]
  • [PSCredential]
  • [PSDefaultValueAttribute]
  • [PSListModifier]
  • [PSObject]
  • [PSPrimitiveDictionary]
  • [PSReference]
  • [PSTypeNameAttribute]
  • [Regex]
  • [SByte]
  • [String]
  • [SupportsWildcardsAttribute]
  • [SwitchParameter]
  • [System.Globalization.CultureInfo]
  • [System.Net.IPAddress]
  • [System.Net.Mail.MailAddress]
  • [System.Numerics.BigInteger]
  • [System.Security.SecureString]
  • [TimeSpan]
  • [UInt16]
  • [UInt32]
  • [UInt64]

Menemukan mode bahasa konfigurasi sesi

Saat konfigurasi sesi dibuat dengan menggunakan file konfigurasi sesi, konfigurasi sesi memiliki properti LanguageMode. Anda dapat menemukan mode bahasa dengan mendapatkan nilai properti LanguageMode.

(Get-PSSessionConfiguration -Name Test).LanguageMode
FullLanguage

Pada konfigurasi sesi lain, Anda dapat menemukan mode bahasa secara tidak langsung dengan menemukan mode bahasa sesi yang dibuat menggunakan konfigurasi sesi.

Catatan

Konfigurasi sesi adalah fitur akses jauh PowerShell berbasis WSMan. Mereka hanya digunakan ketika Anda menggunakan New-PSSessioncmdlet , , Invoke-Commandatau Enter-PSSession untuk terhubung ke komputer Windows jarak jauh. Get-PSSessionConfiguration Cmdlet hanya tersedia di komputer Windows.

Menemukan mode bahasa sesi

Anda dapat menemukan mode bahasa dari sesi FullLanguage atau ConstrainedLanguage dengan mendapatkan nilai properti LanguageMode dari status sesi.

Contohnya:

$ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage

Namun, dalam sesi dengan RestrictedLanguage mode dan NoLanguage , Anda tidak dapat menggunakan metode titik untuk mendapatkan nilai properti. Sebaliknya, pesan kesalahan mengungkapkan mode bahasa.

Saat Anda menjalankan $ExecutionContext.SessionState.LanguageMode perintah dalam RestrictedLanguage sesi, PowerShell mengembalikan pesan kesalahan PropertyReferenceNotSupportedInDataSection dan VariableReferenceNotSupportedInDataSection .

  • PropertyReferenceNotSupportedInDataSection: Referensi properti tidak diizinkan dalam mode bahasa terbatas atau bagian Data.
  • VariableReferenceNotSupportedInDataSection: Variabel yang tidak dapat direferensikan dalam mode bahasa terbatas atau bagian Data sedang direferensikan.

Saat Anda menjalankan $ExecutionContext.SessionState.LanguageMode perintah dalam NoLanguage sesi, PowerShell mengembalikan pesan kesalahan ScriptsNotAllowed .

  • ScriptsNotAllowed: Sintaks tidak didukung oleh runspace ini. Ini mungkin karena dalam mode tanpa bahasa.

Lihat juga