about_Language_Modes
Dil modlarını ve bunların PowerShell oturumları üzerindeki etkisini açıklar.
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, 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 ConfigurationFilepwsh
çalıştırabilirsiniz. Bu, PowerShell'i belirli bir yapılandırma kullanarak başlatmanıza olanak tanır.
Oturum durumunun LanguageModeFullLanguage
alarak veya ConstrainedLanguage
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 (NoLanguage
) kullanamazsınız..
Bunun yerine, hata iletisi dil modunu gösterir.
Komutu bir oturumda çalıştırdığınızda$ExecutionContext.SessionState.LanguageMode
, PowerShell PropertyReferenceNotSupportedInDataSection ve RestrictedLanguage
hata iletilerini döndürür.
- 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, ScriptsNotAllowedNoLanguage.
- ScriptsNotAllowed: Söz dizimi bu çalışma alanı tarafından desteklenmez. Bunun nedeni dilsiz modda olması olabilir.
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.
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.
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.
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 modu kullanır NoLanguage
. 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.
Bu bölümde PowerShell oturumlarındaki dil modları açıklanmaktadır.
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.
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-Module
yü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 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
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.
PowerShell geri bildirimi
PowerShell, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin: