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 RestrictedLanguageNoLanguage 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 Rendszergazda istration (JEA) konfigurációi a munkamenetek csak parancshívásokra való korlátozására használhatókNoLanguage. 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 Mó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 Mó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-Modulejegyzé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 Mó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 Mó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.

Lásd még