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:
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.