Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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:
FullLanguageRestrictedLanguage-
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 RestrictedLanguage és a VariableReferenceNotSupportedInDataSection hibaüzeneteket.
- 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 $ExecutionContext.SessionState.LanguageMode fér hozzáNoLanguage, 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-Typeparancsmag 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-Objectparancsmag 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.DictionaryScripting.FileSystemObjectVBScript.RegExp
Különleges esetek:
-
[ref]- Objektum beírására vagy[ref]beírására[Management.Automation.PSReference]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.