Aracılığıyla paylaş


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 pwsh parametresiyle çalıştırabilirsiniz. Bu, PowerShell'i belirli bir yapılandırma kullanarak başlatmanıza olanak tanır.

Oturumun dil modunu bulma

Oturum durumunun FullLanguage özelliğinin değerini alarak bir ConstrainedLanguage veya oturumunun dil modunu bulabilirsiniz.

Mesela:

$ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage

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

Bir oturuma eriştiğinizde$ExecutionContext.SessionState.LanguageMode, PowerShell RestrictedLanguage ve VariableReferenceNotSupportedInDataSection hata iletilerini döndürür.

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

Bir $ExecutionContext.SessionState.LanguageMode oturuma eriştiğinizde NoLanguage PowerShell, ScriptsNotAllowed hata iletisini döndürür.

  • 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 bir LanguageMode özelliği vardır. dil modunu, LanguageMode özelliğinin değerini alarak 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şkeni 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, bir sistem uygulaması denetim ilkesi altında çalışırken otomatik olarak ConstrainedLanguage modunda çalışır. 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 ConstrainedLanguage modunda çalışır. 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 ConstrainedLanguage modunda çalışır. Ancak, ilke tarafından izin verilen herhangi bir betik veya betik tabanlı modül herhangi bir kısıtlama olmadan FullLanguage modunda ç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 Yeterli Yönetim (JEA) yapılandırmaları, oturumları yalnızca komut çağrılarıyla kısıtlamak için NoLanguage modunu kullanır. 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. new-PSSessionConfigurationFile JEA Oturumu yapılandırmaları.

Dil modu özellikleri ve sınırlamaları

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

FullLanguage modu

FullLanguage modu 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 engellemelerini kullanamaz. Bu mod, Import-Moduletarafından yüklenen modül bildirimlerini işlemek için de kullanılır.

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

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

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

Modül bildirimleri RestrictedLanguage modunda 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.

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

ConstrainedLanguage modunun ö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'i imzalı derlemeleri yükleyebilir, ancak rastgele C# kodu veya Win32 API'lerini yükleyemez.
  • New-Object cmdlet'i 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.
  • ToString() yöntemi 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.

Önemli

Modun atlanamadığından emin olmak ConstrainedLanguage için modu İş İçin Uygulama Denetimi ile Sistem Kilitleme modunda kullanmanız ConstrainedLanguage gerekir. PowerShell'in AppLocker ve Uygulama Denetimi'ni nasıl desteklediği hakkında daha fazla bilgi için bkz . PowerShell'in güvenliğini sağlamak için Uygulama Denetimi'ni kullanma.

Aşağıdaki .NET türlerine ConstrainedLanguage modunda 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] (Yalnızca Windows)
  • [adsisearcher] (Yalnızca 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] (Yalnızca Windows)
  • [wmiclass] (Yalnızca Windows)
  • [wmisearcher] (Yalnızca Windows)
  • [X500DistinguishedName]
  • [X509Certificate]
  • [xml]

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

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

Özel durumlar:

  • [ref] - Bir nesnenin yazılması [ref] veya [Management.Automation.PSReference] izin verilmemesi. Diğer kullanımlara izin verilir.

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 başlayarak, sistem kilitleme yapılandırıldığında New-Object cmdlet'i NoLanguage modunda devre dışı bırakılır.

Ayrıca bakınız