about_Language_Modes

Kısa açıklama

Dil modlarını ve bunların PowerShell oturumları üzerindeki etkisini açıklar.

Uzun açıklama

PowerShell oturumunun dil modu, oturumda PowerShell dilinin hangi öğelerinin kullanılabileceğini belirler.

PowerShell aşağıdaki dil modlarını destekler:

  • FullLanguage
  • RestrictedLanguage
  • ConstrainedLanguage (PowerShell 3.0'da kullanıma sunulmuştur)
  • NoLanguage

Dil modu nedir?

Dil modu, oturumda izin verilen dil öğelerini belirler.

Dil modu, oturumu oluşturmak için kullanılan oturum yapılandırmasının (veya "uç noktanın") bir özelliğidir. Belirli bir oturum yapılandırmasını kullanan tüm oturumlar, oturum yapılandırmasının dil moduna sahiptir.

Tüm PowerShell oturumlarının dil modu vardır. Oturumlar, hedef bilgisayardaki oturum yapılandırmaları kullanılarak oluşturulur. Oturum yapılandırmasında ayarlanan dil modu, oturumun dil modunu belirler. PSSession oturum yapılandırmasını belirtmek için, oturum oluşturan cmdlet'lerin ConfigurationName parametresini kullanın.

PowerShell 7.3'te başlayarak ConfigurationFile parametresiyle çalıştırabilirsinizpwsh. Bu, PowerShell'i belirli bir yapılandırma kullanarak başlatmanıza olanak tanır.

Oturumun dil modunu bulma

Oturum durumunun LanguageMode özelliğinin değerini alarak veya FullLanguageConstrainedLanguage oturumunun dil modunu bulabilirsiniz.

Örneğin:

$ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage

Ancak ve modlarıyla yapılan oturumlarda RestrictedLanguage özellik değerlerini almak için üye erişim işlecini (.) kullanamazsınız.NoLanguage Bunun yerine, hata iletisi dil modunu gösterir.

Komutu bir oturumda çalıştırdığınızda$ExecutionContext.SessionState.LanguageMode, PowerShell PropertyReferenceNotSupportedInDataSection ve VariableReferenceNotSupportedInDataSection hata iletilerini döndürür.RestrictedLanguage

  • PropertyReferenceNotSupportedInDataSection: Kısıtlı dil modunda veya Veri bölümünde özellik başvurularına izin verilmez.
  • VariableReferenceNotSupportedInDataSection: Kısıtlanmış dil modunda veya Veri bölümünde başvurulamayan bir değişkene başvurulmakta.

Komutu bir oturumda çalıştırdığınızda $ExecutionContext.SessionState.LanguageMode PowerShell, ScriptsNotAllowed hata iletisini döndürür.NoLanguage

  • ScriptsNotAllowed: Söz dizimi bu çalışma alanı tarafından desteklenmez. Bunun nedeni dilsiz modda olması olabilir.

Oturum yapılandırmasının dil modunu bulma

Oturum yapılandırma dosyası kullanılarak bir oturum yapılandırması oluşturulduğunda, oturum yapılandırmasının LanguageMode özelliği vardır. LanguageMode özelliğinin değerini alarak dil modunu bulabilirsiniz.

(Get-PSSessionConfiguration -Name Test).LanguageMode
FullLanguage

Diğer oturum yapılandırmalarında, oturum yapılandırması kullanılarak oluşturulan bir oturumun dil modunu bularak dil modunu dolaylı olarak bulabilirsiniz.

Dil modunu ayarlama

PowerShell oturumundaki dil modu yerleşik $ExecutionContext değişken aracılığıyla ayarlanabilir.

$ExecutionContext.SessionState.LanguageMode = "ConstrainedLanguage"

Ancak, bunu yapmak yalnızca dil modlarıyla deneme yapmak için yararlıdır. Dil modları, belirli bağlamlar için PowerShell oturumlarına ek güvenlik sağlamaya yöneliktir.

Dil modları, bir sistem uygulaması denetim ilkesi kullandığınızda veya oturum yapılandırması oluşturduğunuzda ayarlanır.

Sistem uygulaması denetim ilkesi kullanma

PowerShell, sistem uygulaması denetim ilkesi altında çalışırken otomatik olarak modda çalışır ConstrainedLanguage . Algılanan uygulama denetimi ilkeleri, Windows platformlarında AppLocker ve Windows Defender Uygulama Denetimi (WDAC) şeklindedir.

PowerShell, bir uygulama denetim ilkesi algıladığında dil modlarının yanı sıra başka kısıtlamalar da uygular. Örneğin, bir ilke altında nokta kaynak oluşturma ve modül içeri aktarmaya yönelik ek kısıtlamalar vardır.

PowerShell oturumu bir ilke altında başlatıldığında modda çalışır ConstrainedLanguage . PowerShell 7.4 sürümünden başlayarak, başlangıç başlığı ekranında bu modda çalıştığını belirten bir ileti bulunur. Bu, kullanıcıların cmdlet'leri ve yerel komutları çalıştırarak kullanılabilir bir etkileşimli kabuk deneyimine sahip olmasını ve temel dil öğelerine erişmesini sağlar. Ancak kullanıcı kötü amaçlı bir aktör tarafından kötüye kullanılabilecek PowerShell, .NET veya COM API'lerine erişemez.

Bu oturumda yürütülen tüm betikler veya betik tabanlı modüller modda ConstrainedLanguage çalışır. Ancak, ilke tarafından izin verilen tüm betikler veya betik tabanlı modüller herhangi bir kısıtlama olmadan modda FullLanguage çalışır. Bu şekilde, ilke tarafından kilitlenen bir sistemde ilke tarafından güvenilen ve birkaç kısıtlamayla çalıştırılan betikler olabilir.

Oturum yapılandırması kullanma

PowerShell uzaktan iletişim isteğe bağlı olarak özel oturum yapılandırmaları oluşturmayı destekler. Bu özel yapılandırma için istediğiniz dil modunu ayarlayabilirsiniz. PowerShell Just Enough Yönetici istration (JEA) yapılandırmaları, oturumları yalnızca komut çağrılarıyla kısıtlamak için modu kullanırNoLanguage. JEA ile uzak oturum belirli kullanıcılarla sınırlandırılabilir. JEA kullanıcıları tanımlı bir komut kümesi çalıştırmakla sınırlıdır ve API'lere, dosya sistemine veya diğer sistem kaynaklarına doğrudan erişemez.

Daha fazla bilgi için bkz . JEA Oturum yapılandırmaları ve New-PSSessionConfigurationFile.

Dil modu özellikleri ve sınırlamaları

Bu bölümde PowerShell oturumlarındaki dil modları açıklanmaktadır.

FullLanguage Modu

Mod, FullLanguage oturumdaki tüm dil öğelerine izin verir. FullLanguage , Windows'un tüm sürümlerindeki varsayılan oturumlar için varsayılan dil modudur.

RestrictedLanguage Modu

Modda RestrictedLanguage kullanıcılar komutları (cmdlet'ler, işlevler, CIM komutları ve iş akışları) çalıştırabilir ancak betik bloklarını kullanamaz. Bu mod, tarafından Import-Moduleyüklenen modül bildirimlerini işlemek için de kullanılır.

PowerShell 7.2 sürümünden New-Object başlayarak, sistem kilitleme yapılandırıldığında cmdlet modda RestrictedLanguage devre dışı bırakılır.

Varsayılan olarak, modda yalnızca aşağıdaki değişkenlere izin verilir RestrictedLanguage :

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

Modül bildirimleri modda RestrictedLanguage yüklenir ve şu ek değişkenleri kullanabilir:

  • $PSScriptRoot
  • $PSEdition
  • $EnabledExperimentalFeatures
  • Herhangi bir ortam değişkeni, örneğin $ENV:TEMP

Yalnızca aşağıdaki karşılaştırma işleçlerine izin verilir:

  • -eq (eşittir)
  • -gt (büyüktür)
  • -lt (küçüktür)

Atama deyimleri, özellik başvuruları ve yöntem çağrılarına izin verilmez.

ConstrainedLanguage Modu

ConstrainedLanguage modu döngüler, koşullular, dize genişletme ve nesne özelliklerine erişim gibi temel dil öğelerine izin verecek şekilde tasarlanmıştır. Kısıtlamalar kötü amaçlı bir aktör tarafından kötüye kullanılabilecek işlemleri engeller.

Mod ConstrainedLanguage tüm cmdlet'lere ve PowerShell dil öğelerinin bir alt kümesine izin verir, ancak kullanılabilecek nesne türlerini sınırlar.

Modun ConstrainedLanguage özellikleri şunlardır:

  • Windows modüllerindeki tüm cmdlet'ler tamamen işlevseldir ve belirtildiği gibi sistem kaynaklarına tam erişime sahiptir.
  • PowerShell betik dilinin tüm öğelerine izin verilir.
  • Windows'a dahil olan tüm modüller içeri aktarılabilir ve modüllerin dışarı aktarmış olduğu tüm komutlar oturumda çalıştırılabilir.
  • Add-Type Cmdlet imzalı derlemeleri yükleyebilir, ancak rastgele C# kodu veya Win32 API'lerini yükleyemez.
  • New-Object Cmdlet yalnızca izin verilen türlerde kullanılabilir (aşağıda listelenmiştir).
  • PowerShell'de yalnızca izin verilen türler kullanılabilir. Diğer türlere izin verilmez. Tür dönüştürmeye izin verilir, ancak yalnızca sonuç izin verilen bir tür olduğunda.
  • Dize girişini türlere dönüştüren cmdlet parametreleri yalnızca sonuç türü izin verilen bir tür olduğunda çalışır.
  • yöntemi ToString() ve izin verilen türlerin .NET yöntemleri çağrılabilir.
  • Kullanıcılar izin verilen türlerin tüm özelliklerini alabilir. Kullanıcılar özelliklerin değerlerini yalnızca izin verilen türlerde ayarlayabilir.

Aşağıdaki .NET türlerine modda ConstrainedLanguage izin verilir. Kullanıcılar özellikleri alabilir, yöntemleri çağırabilir ve nesneleri bu türlere dönüştürebilir.

İzin Verilen Türler:

  • [adsi]
  • [adsisearcher]
  • [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]
  • [ref]
  • [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]
  • [wmiclass]
  • [wmisearcher]
  • [X500DistinguishedName]
  • [X509Certificate]
  • [xml]

Yalnızca aşağıdaki COM nesne türlerine izin verilir:

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

NoLanguage Modu

PowerShell NoLanguage modu, PowerShell betik dilini tamamen devre dışı bırakır. Betik çalıştıramaz veya değişken kullanamazsınız. Yalnızca yerel komutları ve cmdlet'leri çalıştırabilirsiniz.

PowerShell 7.2 sürümünden New-Object başlayarak, sistem kilitleme yapılandırıldığında cmdlet modda NoLanguage devre dışı bırakılır.

Ayrıca bkz.