Megosztás a következőn keresztül:


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 futtathat pwsh a ConfigurationFile paraméterrel. Ez lehetővé teszi, hogy a PowerShellt egy adott konfigurációval indítsa el.

Munkamenet nyelvi módjának megkeresése

Egy FullLanguage vagy ConstrainedLanguage munkamenet nyelvi módját a munkamenet állapotának LanguageMode tulajdonságának beolvasásával találja meg.

Például:

$ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage

A RestrictedLanguage és NoLanguage módú munkamenetekben azonban nem használhatja a taghozzáférés operátort (.) tulajdonságértékek lekéréséhez. Ehelyett a hibaüzenet a nyelvi módot mutatja.

Amikor egy munkamenetben fér hozzá$ExecutionContext.SessionState.LanguageMode, a PowerShell visszaadja a PropertyReferenceNotSupportedInDataSection és a VariableReferenceNotSupportedInDataSection hibaüzeneteket.RestrictedLanguage

  • PropertyReferenceNotSupportedInDataSection: A tulajdonsághivatkozások korlátozott nyelvi módban vagy adatszakaszban nem engedélyezettek.
  • VariableReferenceNotSupportedInDataSection: Olyan változóra hivatkozik, amely nem hivatkozható korlátozott nyelvi módban vagy adatszakaszban.

Amikor egy munkamenetben NoLanguage fér hozzá$ExecutionContext.SessionState.LanguageMode, a 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 munkamenet-konfigurációs fájllal jön létre, a munkamenet-konfiguráció rendelkezik egy LanguageMode tulajdonságtal. 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 nyelvi módja a beépített $ExecutionContext 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 ConstrainedLanguage módban fut, 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, ConstrainedLanguage módban fut. 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 ConstrainedLanguage módban futnak. A szabályzat által engedélyezett szkriptek vagy szkriptalapú modulok azonban korlátozás nélkül futnak FullLanguage módban. Í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 NoLanguage módot használnak a munkamenetek csak parancshívásokra való korlátozására. 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-munkamenet-konfigurá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 az alapértelmezett munkamenetekhez a Windows összes verziójában.

RestrictedLanguage mód

RestrictedLanguage módban a felhasználók parancsokat (parancsmagokat, függvényeket, CIM-parancsokat és munkafolyamatokat) futtathatnak, de nem használhatnak szkriptblokkokat. Ez a mód a Import-Moduleáltal betöltött modulok jegyzékfájljainak 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 RestrictedLanguage módban töltődnek be, é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 mód úgy lett kialakítva, hogy lehetővé tegye az olyan alapvető nyelvi elemeket, mint a hurkok, a feltételes beállítások, 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 engedélyezi az összes parancsmagot és a PowerShell nyelvi elemeinek egy részét, de korlátozza a használható objektumtípusokat.

A ConstrainedLanguage mód funkciói 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 tud tetszőleges C#-kódot vagy Win32 API-kat betölteni.
  • A New-Object parancsmag csak engedélyezett (alább felsorolt) típusok esetén használható.
  • 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.
  • A ToString() metódus és az engedélyezett típusok .NET-metódusai hívhatók meg.
  • 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.

Az alábbi .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] (csak Windows rendszeren)
  • [adsisearcher] (csak Windows rendszeren)
  • [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] (csak Windows rendszeren)
  • [wmiclass] (csak Windows rendszeren)
  • [wmisearcher] (csak Windows rendszeren)
  • [X500DistinguishedName]
  • [X509Certificate]
  • [xml]

Csak a következő COM-objektumtípusok engedélyezettek:

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

Különleges esetek:

  • [ref]- Objektum beírására vagy [Management.Automation.PSReference] beírására [ref] történő megadása nem engedélyezett. Más felhasználási módok is engedélyezettek.

NoLanguage mód

A PowerShell NoLanguage mód 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: