Dela via


Om språklägen

KORT BESKRIVNING

Förklarar språklägen och deras effekt på PowerShell-sessioner.

LÅNG BESKRIVNING

Språkläget för en PowerShell-session avgör delvis vilka element i PowerShell-språket som kan användas i sessionen.

PowerShell stöder följande språklägen:

  • FullLanguage
  • ConstrainedLanguage (introducerades i PowerShell 3.0)
  • RestrictedLanguage
  • NoLanguage

VAD ÄR ETT SPRÅKLÄGE?

Språkläget avgör vilka språkelement som tillåts i sessionen.

Språkläget är i själva verket en egenskap för sessionskonfigurationen (eller "slutpunkten") som används för att skapa sessionen. Alla sessioner som använder en viss sessionskonfiguration har språkläget för sessionskonfigurationen.

Alla PowerShell-sessioner har ett språkläge, inklusive PSSessioner som du skapar med hjälp av cmdleten New-PSSession , tillfälliga sessioner som använder parametern ComputerName och de standardsessioner som visas när du startar PowerShell.

Fjärrsessioner skapas med hjälp av sessionskonfigurationerna på fjärrdatorn. Språkläget som anges i sessionskonfigurationen avgör språkläget för sessionen. Om du vill ange sessionskonfigurationen för en PSSession använder du parametern ConfigurationName för cmdletar som skapar en session.

SPRÅKLÄGEN

I det här avsnittet beskrivs språklägena i PowerShell-sessioner.

FULLSTÄNDIGT SPRÅK (FullLanguage)

Läget FullLanguage tillåter alla språkelement i sessionen. FullLanguage är standardspråkläget för standardsessioner i alla versioner av Windows förutom Windows RT.

RESTRICTED LANGUAGE (RestrictedLanguage)

I RestrictedLanguage-läge kan användare köra kommandon (cmdletar, funktioner, CIM-kommandon och arbetsflöden) men får inte använda skriptblock.

Som standard är endast följande variabler tillåtna i RestrictedLanguage-läge:

  • $PSCulture
  • $PSUICulture
  • $True
  • $False
  • $Null

Modulmanifest, som använder RestrictedLanguage-läge, tillåter även följande ytterligare variabler:

  • $PSScriptRoot
  • $PSEdition (i PowerShell Core)
  • $EnabledExperimentalFeatures (i PowerShell Core)

Endast följande jämförelseoperatorer är tillåtna:

  • -eq (lika)
  • -gt (större än)
  • -lt (mindre än)

Tilldelningsuttryck, egenskapsreferenser och metodanrop är inte tillåtna.

NO LANGUAGE (NoLanguage)

NoLanguage-läget kan bara användas via API:et. NoLanguage-läge innebär att ingen skripttext i något formulär tillåts. Detta utesluter användningen av metoden AddScript() som skickar fragment av PowerShell-skript som ska parsas och köras. Du kan bara använda AddCommand() och AddParameter() som inte går igenom parsern.

BEGRÄNSAT SPRÅK (begränsat språk)

Läget ConstrainedLanguage tillåter alla cmdletar och alla PowerShell-språkelement, men det begränsar tillåtna typer.

Läget ConstrainedLanguage är utformat för att stödja UMCI (User Mode Code Integrity) på Windows RT. Det är det enda språkläget som stöds på Windows RT, men det är tillgängligt på alla system som stöds.

UMCI skyddar ARM-enheter genom att endast tillåta att Microsoft-signerade och Microsoft-certifierade appar installeras på Windows RT-baserade enheter. BegränsatLanguage-läge hindrar användare från att använda PowerShell för att kringgå eller bryta mot UMCI.

Funktionerna i läget ConstrainedLanguage är följande:

  • Alla cmdletar i Windows-moduler och andra UMCI-godkända cmdletar är fullt funktionella och har fullständig åtkomst till systemresurser, förutom vad som anges.

  • Alla element i PowerShell-skriptspråket är tillåtna.

  • Alla moduler som ingår i Windows kan importeras och alla kommandon som modulerna exporterar körs i sessionen.

  • I PowerShell-arbetsflödet kan du skriva och köra skriptarbetsflöden (arbetsflöden skrivna på PowerShell-språket). XAML-baserade arbetsflöden stöds inte och du kan inte köra XAML i ett skriptarbetsflöde, till exempel med hjälp Invoke-Expression -Language XAMLav . Arbetsflöden kan inte heller anropa andra arbetsflöden, även om kapslade arbetsflöden är tillåtna.

  • Cmdleten Add-Type kan läsa in signerade sammansättningar, men den kan inte läsa in godtycklig C#-kod eller Win32-API:er.

  • Cmdleten New-Object kan endast användas på tillåtna typer (visas nedan).

  • Endast tillåtna typer (visas nedan) kan användas i PowerShell. Andra typer är inte tillåtna.

  • Typkonvertering tillåts, men endast när resultatet är en tillåten typ.

  • Cmdlet-parametrar som konverterar strängindata till typer fungerar bara när den resulterande typen är en tillåten typ.

  • Metoden ToString() och .NET-metoderna för tillåtna typer (visas nedan) kan anropas. Andra metoder kan inte anropas.

  • Användare kan hämta alla egenskaper för tillåtna typer. Användare kan bara ange egenskapernas värden för Core-typer. Endast följande COM-objekt tillåts:

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

Följande typer tillåts i läget ConstrainedLanguage. Användare kan hämta egenskaper, anropa metoder och konvertera objekt till dessa typer.

Tillåtna typer:

  • AliasAttribute
  • AllowEmptyCollectionAttribute
  • AllowEmptyStringAttribute
  • AllowNullAttribute
  • Matris
  • Bool
  • byte
  • char
  • CmdletBindingAttribute
  • DateTime
  • decimal
  • DirectoryEntry
  • DirectorySearcher
  • double
  • flyt
  • GUID
  • Hashtable
  • int
  • Int16
  • long
  • ManagementClass
  • ManagementObject
  • ManagementObjectSearcher
  • NullString
  • OutputTypeAttribute
  • ParameterAttribute
  • PSCredential
  • PSDefaultValueAttribute
  • PSListModifier
  • PSObject
  • PSPrimitiveDictionary
  • PSReference
  • PSTypeNameAttribute
  • Regex
  • SByte
  • sträng
  • SupportsWildcardsAttribute
  • SwitchParameter
  • System.Globalization.CultureInfo
  • System.Net.IPAddress
  • System.Net.Mail.MailAddress
  • System.Numerics.BigInteger
  • System.Security.SecureString
  • TimeSpan
  • UInt16
  • UInt32
  • UInt64

HITTA SPRÅKLÄGET FÖR EN SESSIONSKONFIGURATION

När en sessionskonfiguration skapas med hjälp av en sessionskonfigurationsfil har sessionskonfigurationen en LanguageMode-egenskap. Du hittar språkläget genom att hämta värdet för egenskapen LanguageMode.

(Get-PSSessionConfiguration -Name Test).LanguageMode
FullLanguage

I andra sessionskonfigurationer kan du hitta språkläget indirekt genom att hitta språkläget för en session som skapas med hjälp av sessionskonfigurationen.

HITTA SPRÅKLÄGET FÖR EN SESSION

Du hittar språkläget för en FullLanguage- eller ConstrainedLanguage-session genom att hämta värdet för egenskapen LanguageMode för sessionstillståndet.

Exempel:

$ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage

I sessioner med lägena RestrictedLanguage och NoLanguage kan du dock inte använda dot-metoden för att hämta egenskapsvärden. I stället visas språkläget i felmeddelandet.

När du kör $ExecutionContext.SessionState.LanguageMode kommandot i en RestrictedLanguage-session returnerar PowerShell felmeddelandena PropertyReferenceNotSupportedInDataSection och VariableReferenceNotSupportedInDataSection.

  • PropertyReferenceNotSupportedInDataSection: Egenskapsreferenser tillåts inte i begränsat språkläge eller ett dataavsnitt.
  • VariableReferenceNotSupportedInDataSection En variabel som inte kan refereras till i begränsat språkläge eller ett dataavsnitt refereras till.

När du kör $ExecutionContext.SessionState.LanguageMode kommandot i en NoLanguage-session returnerar PowerShell felmeddelandet ScriptsNotAllowed.

  • ScriptsNotAllowed: Syntaxen stöds inte av det här körningsutrymmet. Det kan bero på att den inte är i språkläge.

SE ÄVEN