about_Language_Modes
Rövid leírás
Ismerteti a nyelvi módokat és azok PowerShell-munkamenetekre gyakorolt hatását.
Hosszú leírás
A PowerShell-munkamenet nyelvi módja határozza meg, hogy a PowerShell-nyelv mely elemei használhatók a munkamenetben.
A PowerShell a következő nyelvi módokat támogatja:
FullLanguage
RestrictedLanguage
ConstrainedLanguage
(a PowerShell 3.0-ban bevezetett)NoLanguage
Mi az a nyelvi mód?
A nyelvi mód határozza meg a munkamenetben engedélyezett nyelvi elemeket.
A nyelvi mód a munkamenet létrehozásához használt munkamenet-konfiguráció (vagy "végpont") tulajdonsága. Az adott munkamenet-konfigurációt használó összes munkamenet rendelkezik a munkamenet-konfiguráció nyelvi módjával.
Minden PowerShell-munkamenet rendelkezik nyelvi móddal. A munkamenetek a célszámítógép munkamenet-konfigurációi alapján jönnek létre. A munkamenet-konfigurációban beállított nyelvi mód határozza meg a munkamenet nyelvi módját. A PSSession munkamenet-konfigurációjának megadásához használja a munkamenetet létrehozó parancsmagok ConfigurationName paraméterét.
A PowerShell 7.3-tól kezdve a ConfigurationFile paraméterrel futtathatópwsh
. Ez lehetővé teszi, hogy a PowerShellt egy adott konfigurációval indítsa el.
Munkamenet nyelvi módjának megkeresése
Egy vagy ConstrainedLanguage
több munkamenet nyelvi módját FullLanguage
a munkamenet-állapot LanguageMode tulajdonságának értékének lekérésével találja meg.
Példa:
$ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage
A munkamenetek során RestrictedLanguage
NoLanguage
azonban nem használhatja a taghozzáférés-operátort (.
) a tulajdonságértékek lekéréséhez.
Ehelyett a hibaüzenet a nyelvi módot mutatja.
Amikor egy RestrictedLanguage
munkamenetben futtatja a parancsot, a $ExecutionContext.SessionState.LanguageMode
PowerShell visszaadja a PropertyReferenceNotSupportedInDataSection és a VariableReferenceNotSupportedInDataSection hibaüzeneteket.
- PropertyReferenceNotSupportedInDataSection: A tulajdonsághivatkozások nem engedélyezettek korlátozott nyelvi módban vagy adatszakaszban.
- VariableReferenceNotSupportedInDataSection: A rendszer egy olyan változóra hivatkozik, amely nem hivatkozható korlátozott nyelvi módban vagy adatszakaszban.
Amikor egy munkamenetben NoLanguage futtatja a parancsot, a $ExecutionContext.SessionState.LanguageMode
PowerShell a ScriptsNotAllowed hibaüzenetet adja vissza.
- ScriptsNotAllowed: Ez a futtatótér nem támogatja a szintaxist. Ennek az lehet az oka, hogy nincs nyelvi módban.
Munkamenet-konfiguráció nyelvi módjának megkeresése
Amikor munkamenetkonfigurációt hoz létre egy munkamenetkonfigurációs fájl használatával, a munkamenet-konfiguráció languageMode tulajdonságú. A nyelvi módot a LanguageMode tulajdonság értékének lekérésével találja meg.
(Get-PSSessionConfiguration -Name Test).LanguageMode
FullLanguage
Más munkamenetkonfigurációkban a nyelvi módot közvetetten is megtalálhatja a munkamenet-konfigurációval létrehozott munkamenet nyelvi módjának megkeresésével.
A nyelvi mód beállítása
A PowerShell-munkamenetek $ExecutionContext
nyelvi módja a beépített változón keresztül állítható be.
$ExecutionContext.SessionState.LanguageMode = "ConstrainedLanguage"
Ez azonban csak a nyelvi módok kipróbálásához hasznos. A nyelvi módok célja a PowerShell-munkamenetek biztonságának biztosítása adott környezetekhez.
A nyelvi módok akkor vannak beállítva, ha rendszeralkalmazás-vezérlési szabályzatot használ, vagy munkamenet-konfigurációt hoz létre.
Rendszeralkalmazás-vezérlési szabályzat használata
A PowerShell automatikusan módban fut ConstrainedLanguage
, amikor egy rendszeralkalmazás-vezérlési szabályzat alatt fut. Az észlelt alkalmazásvezérlési szabályzatok az AppLocker és a Windows Defender alkalmazásvezérlő (WDAC) Windows-platformokon.
A PowerShell a nyelvi módokon kívül más korlátozásokat is alkalmaz, ha alkalmazásvezérlési szabályzatot észlel. Például további korlátozások vonatkoznak a dot-sourcing és a modulimportálásra egy szabályzat alapján.
Amikor egy PowerShell-munkamenet egy szabályzat alatt indul el, az módban fut ConstrainedLanguage
. A PowerShell 7.4-től kezdődően az indítási szalagcím megjelenítése tartalmaz egy üzenetet, amely jelzi, hogy az adott módban fut. Ez lehetővé teszi a felhasználók számára, hogy használható interaktív felülettel, parancsmagok és natív parancsok futtatásával, valamint az alapvető nyelvi elemekhez való hozzáféréssel rendelkezzenek. A felhasználó azonban nem fér hozzá a PowerShell-, .NET- vagy COM API-khoz, amelyeket egy rosszindulatú szereplő visszaélhet.
Az ebben a munkamenetben végrehajtott szkriptek vagy szkriptalapú modulok módban futnak ConstrainedLanguage
. A szabályzat által engedélyezett szkriptek vagy szkriptalapú modulok azonban korlátozások nélkül futnak FullLanguage
. Így a szabályzat által zárolt rendszerek olyan szkriptekkel rendelkezhetnek, amelyeket a szabályzat megbízhatónak talál, és amelyek néhány korlátozással futnak.
Munkamenet-konfiguráció használata
A PowerShell-újraegyezés opcionálisan támogatja az egyéni munkamenet-konfigurációk létrehozását.
Az egyéni konfigurációhoz megadhatja a kívánt nyelvi módot.
A PowerShell Just Enough Administration (JEA) konfigurációi a munkamenetek csak parancshívásokra való korlátozására használhatók NoLanguage
. A JEA használatával a távoli munkamenet adott felhasználókra korlátozható. A JEA-felhasználók meghatározott parancskészletek futtatására korlátozódnak, és nem férnek hozzá közvetlenül az API-khoz, a fájlrendszerhez vagy más rendszererőforrásokhoz.
További információ: JEA-munkamenetkonfigurációk és New-PSSessionConfigurationFile.
Nyelvi mód funkciói és korlátozásai
Ez a szakasz a PowerShell-munkamenetek nyelvi módokat ismerteti.
FullLanguage üzemmód
A FullLanguage
mód lehetővé teszi a munkamenet összes nyelvi elemének használatát.
FullLanguage
Az alapértelmezett nyelvi mód a Windows összes verziójában futó alapértelmezett munkamenetekhez.
RestrictedLanguage üzemmód
Módban RestrictedLanguage
a felhasználók parancsokat (parancsmagokat, függvényeket, CIM-parancsokat és munkafolyamatokat) futtathatnak, de nem használhatnak szkriptblokkokat. Ez a mód a modulok által betöltött Import-Module
jegyzékek feldolgozására is használható.
A PowerShell 7.2-től kezdve a New-Object
parancsmag le van tiltva RestrictedLanguage
módban a rendszerzárolás konfigurálásakor.
Alapértelmezés szerint csak a következő változók engedélyezettek RestrictedLanguage
módban:
$PSCulture
$PSUICulture
$True
$False
$Null
A moduljegyzékek betölthetők RestrictedLanguage
módban, és a következő további változókat használhatják:
$PSScriptRoot
$PSEdition
$EnabledExperimentalFeatures
- Bármilyen környezeti változó, például
$ENV:TEMP
Csak a következő összehasonlító operátorok engedélyezettek:
-eq
(egyenlő)-gt
(nagyobb, mint)-lt
(kisebb, mint)
Hozzárendelési utasítások, tulajdonsághivatkozások és metódushívások nem engedélyezettek.
ConstrainedLanguage üzemmód
ConstrainedLanguage
A mód úgy lett kialakítva, hogy lehetővé tegye az olyan alapvető nyelvi elemeket, mint a hurkok, a feltételes elemek, a sztringek bővítése és az objektumtulajdonságokhoz való hozzáférés. A korlátozások megakadályozzák azokat a műveleteket, amelyeket egy rosszindulatú szereplő visszaélhet.
A ConstrainedLanguage
mód lehetővé teszi az összes parancsmag és a PowerShell nyelvi elemeinek egy részét, de korlátozza a használható objektumtípusokat.
A mód funkciói ConstrainedLanguage
a következők:
- A Windows-modulok összes parancsmagja teljesen működőképes, és teljes hozzáféréssel rendelkezik a rendszererőforrásokhoz, kivéve a fent leírtakat.
- A PowerShell-szkriptnyelv minden eleme engedélyezett.
- A Windowsban található összes modul importálható, és a modulok által exportált összes parancs futtatható a munkamenetben.
- A
Add-Type
parancsmag képes betölteni az aláírt szerelvényeket, de nem tölt be tetszőleges C# kódot vagy Win32 API-kat. - A
New-Object
parancsmag csak engedélyezett típusok esetén használható (alább látható). - A PowerShellben csak engedélyezett típusok használhatók. Más típusok nem engedélyezettek. A típusátalakítás engedélyezett, de csak akkor, ha az eredmény engedélyezett típus.
- A sztringbemenetet típussá konvertáló parancsmagparaméterek csak akkor működnek, ha az eredményül kapott típus engedélyezett típus.
- Az
ToString()
engedélyezett típusok metódusa és .NET metódusai meghívhatók. - A felhasználók az engedélyezett típusok összes tulajdonságát lekérhetik. A felhasználók csak az engedélyezett típusok esetében állíthatják be a tulajdonságok értékeit.
A következő .NET-típusok engedélyezettek ConstrainedLanguage
módban. A felhasználók tulajdonságokat szerezhetnek be, metódusokat hívhatnak meg, és objektumokat konvertálhatnak ezekre a típusokra.
Engedélyezett típusok:
[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]
Csak a következő COM-objektumtípusok engedélyezettek:
Scripting.Dictionary
Scripting.FileSystemObject
VBScript.RegExp
NoLanguage üzemmód
A PowerShell mód NoLanguage
teljesen letiltja a PowerShell-szkriptnyelvet.
Nem futtathat szkripteket, és nem használhat változókat. Csak natív parancsokat és parancsmagokat futtathat.
A PowerShell 7.2-től kezdve a New-Object
parancsmag le van tiltva NoLanguage
módban a rendszerzárolás konfigurálásakor.