Bagikan melalui


about_Language_Modes

Deskripsi singkat

Menjelaskan mode bahasa dan efeknya pada sesi PowerShell.

Deskripsi panjang

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

PowerShell mendukung mode bahasa berikut:

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

Apa itu mode bahasa?

Mode bahasa menentukan elemen bahasa yang diizinkan dalam sesi.

Mode bahasa adalah properti 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. Sesi dibuat menggunakan konfigurasi sesi pada komputer target. Mode bahasa yang diatur dalam konfigurasi sesi menentukan mode bahasa sesi. Untuk menentukan konfigurasi sesi PSSession, gunakan parameter ConfigurationName cmdlet yang membuat sesi.

Dimulai di PowerShell 7.3, Anda dapat menjalankan pwsh dengan parameter ConfigurationFile. Ini memungkinkan Anda memulai PowerShell menggunakan konfigurasi tertentu.

Menemukan mode bahasa sesi

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

Misalnya:

$ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage

Namun, dalam sesi dengan mode RestrictedLanguage dan NoLanguage, Anda tidak dapat menggunakan operator akses anggota (.) untuk mendapatkan nilai properti. Sebaliknya, pesan kesalahan mengungkapkan mode bahasa.

Saat Anda mengakses $ExecutionContext.SessionState.LanguageMode 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 mengakses $ExecutionContext.SessionState.LanguageMode dalam NoLanguage sesi, PowerShell mengembalikan pesan kesalahan ScriptsNotAllowed .

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

Menemukan mode bahasa konfigurasi sesi

Saat konfigurasi sesi dibuat 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.

Mengatur mode bahasa

Mode bahasa dalam sesi PowerShell dapat diatur melalui variabel $ExecutionContext bawaan.

$ExecutionContext.SessionState.LanguageMode = "ConstrainedLanguage"

Namun, melakukan ini hanya berguna untuk bereksperimen dengan mode bahasa. Mode bahasa dimaksudkan untuk memberikan keamanan tambahan ke sesi PowerShell untuk konteks tertentu.

Mode bahasa diatur saat Anda menggunakan kebijakan kontrol aplikasi sistem atau membuat konfigurasi sesi.

Menggunakan kebijakan kontrol aplikasi sistem

PowerShell secara otomatis berjalan dalam mode ConstrainedLanguage saat berjalan di bawah kebijakan kontrol aplikasi sistem. Kebijakan kontrol aplikasi yang terdeteksi adalah AppLocker dan Windows Defender Application Control (WDAC) pada platform Windows.

PowerShell menerapkan pembatasan lain selain mode bahasa saat mendeteksi kebijakan kontrol aplikasi. Misalnya, ada batasan tambahan untuk sumber titik dan impor modul berdasarkan kebijakan.

Saat sesi PowerShell dimulai di bawah kebijakan, sesi tersebut berjalan dalam mode ConstrainedLanguage. Dimulai di PowerShell 7.4, tampilan banner start up menyertakan pesan yang menunjukkan bahwa spanduk berjalan dalam mode tersebut. Ini memungkinkan pengguna untuk memiliki pengalaman shell interaktif yang dapat digunakan, menjalankan cmdlet dan perintah asli, serta akses ke elemen bahasa dasar. Tetapi pengguna tidak dapat mengakses API PowerShell, .NET, atau COM yang dapat disalahgunakan oleh aktor jahat.

Modul berbasis skrip atau skrip apa pun yang dijalankan dalam sesi ini berjalan dalam mode ConstrainedLanguage. Namun, modul berbasis skrip atau skrip apa pun yang diizinkan oleh kebijakan berjalan dalam mode FullLanguage tanpa batasan apa pun. Dengan cara ini, sistem yang dikunci oleh kebijakan dapat memiliki skrip yang dipercaya oleh kebijakan dan berjalan dengan beberapa batasan.

Menggunakan konfigurasi sesi

PowerShell jarak jauh secara opsional mendukung pembuatan konfigurasi sesi kustom. Anda dapat mengatur mode bahasa yang Anda inginkan untuk konfigurasi kustom tersebut. Konfigurasi PowerShell Just Enough Administration (JEA) menggunakan mode NoLanguage untuk membatasi sesi hanya untuk pemanggilan perintah. Dengan JEA, sesi jarak jauh dapat dibatasi untuk pengguna tertentu. Pengguna JEA terbatas untuk menjalankan serangkaian perintah yang ditentukan dan tidak dapat langsung mengakses API, sistem file, atau sumber daya sistem lainnya.

Untuk informasi selengkapnya, lihat konfigurasi Sesi JEA dan New-PSSessionConfigurationFile.

Fitur dan batasan mode bahasa

Bagian ini menjelaskan mode bahasa dalam sesi PowerShell.

mode FullLanguage

Mode FullLanguage mengizinkan semua elemen bahasa dalam sesi. FullLanguage adalah mode bahasa default untuk sesi default pada semua versi Windows.

mode RestrictedLanguage

Dalam RestrictedLanguage mode, pengguna dapat menjalankan perintah (cmdlet, fungsi, perintah CIM, dan alur kerja), tetapi tidak dapat menggunakan blokir skrip. Mode ini juga digunakan untuk memproses manifes modul yang dimuat oleh Import-Module.

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

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

  • $PSCulture
  • $PSUICulture
  • $true
  • $false
  • $null

Manifes modul dimuat dalam mode RestrictedLanguage dan dapat menggunakan variabel tambahan ini:

  • $PSScriptRoot
  • $PSEdition
  • $EnabledExperimentalFeatures
  • Variabel lingkungan apa pun, seperti $env:TEMP

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.

mode ConstrainedLanguage

mode ConstrainedLanguage dirancang untuk memungkinkan elemen bahasa dasar seperti perulangan, kondisi, perluasan string, dan akses ke properti objek. Pembatasan mencegah operasi yang dapat disalahgunakan oleh aktor jahat.

Mode ConstrainedLanguage mengizinkan semua cmdlet dan subset elemen bahasa PowerShell, tetapi membatasi jenis objek yang dapat digunakan.

Fitur mode ConstrainedLanguage adalah sebagai berikut:

  • Semua cmdlet dalam modul Windows berfungsi penuh dan memiliki akses lengkap ke sumber daya sistem, kecuali sebagaimana 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.
  • Cmdlet New-Object hanya dapat digunakan pada jenis yang diizinkan (tercantum di bawah).
  • Hanya jenis yang diizinkan 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 ke jenis hanya berfungsi ketika jenis yang dihasilkan adalah jenis yang diizinkan.
  • Metode ToString() dan metode .NET dari jenis yang diizinkan dapat dipanggil.
  • Pengguna bisa mendapatkan semua properti dari jenis yang diizinkan. Pengguna dapat mengatur nilai properti hanya pada jenis yang diizinkan.

Penting

Anda harus menggunakan ConstrainedLanguage mode dalam mode Penguncian Sistem dengan Kontrol Aplikasi untuk Bisnis untuk memastikan bahwa ConstrainedLanguage mode tidak dapat dilewati. Untuk informasi selengkapnya tentang cara PowerShell mendukung AppLocker dan App Control, lihat Menggunakan Kontrol Aplikasi untuk mengamankan PowerShell.

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

Jenis yang diperbolehkan:

  • [adsi] (Khusus Windows)
  • [adsisearcher] (Khusus Windows)
  • [Alias]
  • [AllowEmptyCollection]
  • [AllowEmptyString]
  • [AllowNull]
  • [ArgumentCompleter]
  • [ArgumentCompletions]
  • [array]
  • [bigint]
  • [bool]
  • [byte]
  • [char]
  • [cimclass]
  • [cimconverter]
  • [ciminstance]
  • [CimSession]
  • [cimtype]
  • [CmdletBinding]
  • [cultureinfo]
  • [datetime]
  • [decimal]
  • [double]
  • [DscLocalConfigurationManager]
  • [DscProperty]
  • [DscResource]
  • [ExperimentAction]
  • [Experimental]
  • [ExperimentalFeature]
  • [float]
  • [guid]
  • [hashtable]
  • [int]
  • [int16]
  • [int32]
  • [int64]
  • [ipaddress]
  • [IPEndpoint]
  • [long]
  • [mailaddress]
  • [Microsoft.PowerShell.Commands.ModuleSpecification]
  • [NoRunspaceAffinity]
  • [NullString]
  • [Object[]]
  • [ObjectSecurity]
  • [ordered]
  • [OutputType]
  • [Parameter]
  • [PhysicalAddress]
  • [pscredential]
  • [pscustomobject]
  • [PSDefaultValue]
  • [pslistmodifier]
  • [psobject]
  • [psprimitivedictionary]
  • [PSTypeNameAttribute]
  • [regex]
  • [sbyte]
  • [securestring]
  • [semver]
  • [short]
  • [single]
  • [string]
  • [SupportsWildcards]
  • [switch]
  • [timespan]
  • [uint]
  • [uint16]
  • [uint32]
  • [uint64]
  • [ulong]
  • [uri]
  • [ushort]
  • [ValidateCount]
  • [ValidateDrive]
  • [ValidateLength]
  • [ValidateNotNull]
  • [ValidateNotNullOrEmpty]
  • [ValidateNotNullOrWhiteSpace]
  • [ValidatePattern]
  • [ValidateRange]
  • [ValidateScript]
  • [ValidateSet]
  • [ValidateTrustedData]
  • [ValidateUserDrive]
  • [version]
  • [void]
  • [WildcardPattern]
  • [wmi] (Khusus Windows)
  • [wmiclass] (Khusus Windows)
  • [wmisearcher] (Khusus Windows)
  • [X500DistinguishedName]
  • [X509Certificate]
  • [xml]

Hanya jenis objek COM berikut yang diizinkan:

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

Kasus khusus:

  • [ref] - Mentransmisikan objek ke jenis [ref] atau [Management.Automation.PSReference] tidak diizinkan. Penggunaan lain diizinkan.

mode NoLanguage

Mode NoLanguage PowerShell menonaktifkan bahasa pembuatan skrip PowerShell sepenuhnya. Anda tidak dapat menjalankan skrip atau menggunakan variabel. Anda hanya dapat menjalankan perintah dan cmdlet asli.

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

Lihat juga