Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Descrição curta
Explica os modos de linguagem e seus efeitos nas sessões do PowerShell.
Descrição longa
O modo de linguagem de uma sessão do PowerShell determina quais elementos da linguagem do PowerShell podem ser usados na sessão.
O PowerShell dá suporte aos seguintes modos de idioma:
FullLanguageRestrictedLanguage-
ConstrainedLanguage(introduzido no PowerShell 3.0) NoLanguage
O que é um modo de idioma?
O modo de linguagem determina os elementos de linguagem permitidos na sessão.
O modo de linguagem é uma propriedade da configuração da sessão (ou "ponto de extremidade") usada para criar a sessão. Todas as sessões que usam uma configuração de sessão específica têm o modo de idioma da configuração da sessão.
Todas as sessões do PowerShell têm um modo de idioma. As sessões são criadas usando as configurações de sessão no computador de destino. O modo de idioma definido na configuração da sessão determina o modo de idioma da sessão. Para especificar a configuração de sessão de uma PSSession, use o parâmetro ConfigurationName de cmdlets que criam uma sessão.
A partir do PowerShell 7.3, você pode executar pwsh com o parâmetro ConfigurationFile. Isso permite que você inicie o PowerShell usando uma configuração específica.
Localizando o modo de linguagem de uma sessão
Você pode encontrar o modo de idioma de uma sessão de FullLanguage ou ConstrainedLanguage obtendo o valor da propriedade LanguageMode do estado da sessão.
Por exemplo:
$ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage
No entanto, em sessões com modos RestrictedLanguage e NoLanguage, não é possível usar o operador de acesso de membro (.) para obter valores de propriedade.
Em vez disso, a mensagem de erro revela o modo de idioma.
Quando você acessa $ExecutionContext.SessionState.LanguageMode em uma RestrictedLanguage sessão, o PowerShell retorna as mensagens de erro PropertyReferenceNotSupportedInDataSection e VariableReferenceNotSupportedInDataSection .
- PropertyReferenceNotSupportedInDataSection: referências de propriedade não são permitidas no modo de linguagem restrito ou em uma seção Dados.
- VariableReferenceNotSupportedInDataSection: uma variável que não pode ser referenciada no modo de linguagem restrita ou uma seção De dados está sendo referenciada.
Quando você acessa $ExecutionContext.SessionState.LanguageMode em uma NoLanguage sessão, o PowerShell retorna a mensagem de erro ScriptsNotAllowed .
- ScriptsNotAllowed: a sintaxe não é compatível com esse runspace. Isso pode ser porque ele está no modo sem idioma.
Localizando o modo de linguagem de uma configuração de sessão
Quando uma configuração de sessão é criada usando um arquivo de configuração de sessão, a configuração da sessão tem uma propriedade LanguageMode. Você pode encontrar o modo de idioma obtendo o valor da propriedade LanguageMode.
(Get-PSSessionConfiguration -Name Test).LanguageMode
FullLanguage
Em outras configurações de sessão, você pode encontrar o modo de idioma indiretamente encontrando o modo de idioma de uma sessão criada usando a configuração da sessão.
Definindo o modo de idioma
O modo de linguagem em uma sessão do PowerShell pode ser definido por meio da variável de $ExecutionContext interna.
$ExecutionContext.SessionState.LanguageMode = "ConstrainedLanguage"
No entanto, fazer isso só é útil para experimentar os modos de linguagem. Os modos de linguagem destinam-se a fornecer segurança adicional às sessões do PowerShell para contextos específicos.
Os modos de idiomas são definidos quando você usa uma política de controle de aplicativo do sistema ou cria uma configuração de sessão.
Usando uma política de controle de aplicativo do sistema
O PowerShell é executado automaticamente no modo ConstrainedLanguage quando está em execução em uma política de controle de aplicativo do sistema. As políticas de controle de aplicativo detectadas são o AppLocker e o WDAC (Windows Defender Application Control) em plataformas windows.
O PowerShell aplica outras restrições além dos modos de linguagem quando detecta uma política de controle de aplicativo. Por exemplo, há restrições adicionais para importação de módulo e dot-sourcing em uma política.
Quando uma sessão do PowerShell é iniciada em uma política, ela é executada no modo ConstrainedLanguage. A partir do PowerShell 7.4, a exibição da faixa de inicialização inclui uma mensagem indicando que está em execução nesse modo. Isso permite que os usuários tenham uma experiência de shell interativa utilizável, executando cmdlets e comandos nativos, bem como acesso a elementos de linguagem básicos. Mas o usuário não pode acessar APIs do PowerShell, .NET ou COM que podem ser abusadas por um ator mal-intencionado.
Qualquer script ou módulo baseado em script executado nesta sessão é executado no modo ConstrainedLanguage. No entanto, qualquer script ou módulo baseado em script permitido pela política é executado no modo FullLanguage sem nenhuma restrição. Dessa forma, um sistema bloqueado pela política pode ter scripts confiáveis pela política e executados com poucas restrições.
Usando uma configuração de sessão
Opcionalmente, a comunicação remota do PowerShell dá suporte à criação de configurações de sessão personalizadas.
Você pode definir o modo de idioma desejado para essa configuração personalizada.
As configurações de JEA (Administração Just Enough) do PowerShell usam NoLanguage modo para restringir as sessões somente a invocações de comando. Com o JEA, a sessão remota pode ser restrita a usuários específicos. Os usuários jea estão limitados a executar um conjunto definido de comandos e não podem acessar diretamente APIs, o sistema de arquivos ou outros recursos do sistema.
Para obter mais informações, consulte configurações de Sessão JEA e New-PSSessionConfigurationFile.
Recursos e limitações do modo de linguagem
Esta seção descreve os modos de idioma nas sessões do PowerShell.
modo de FullLanguage
O modo FullLanguage permite todos os elementos de linguagem na sessão.
FullLanguage é o modo de idioma padrão para sessões padrão em todas as versões do Windows.
modo de RestrictedLanguage
No RestrictedLanguage modo, os usuários podem executar comandos (cmdlets, funções, comandos CIM e fluxos de trabalho), mas não podem usar scriptblocks. Esse modo também é usado para processar manifestos de módulos carregados por Import-Module.
A partir do PowerShell 7.2, o cmdlet New-Object é desabilitado no modo RestrictedLanguage quando o bloqueio do sistema é configurado.
Por padrão, somente as seguintes variáveis são permitidas no modo RestrictedLanguage:
$PSCulture$PSUICulture$true$false$null
Os manifestos do módulo são carregados no modo RestrictedLanguage e podem usar estas variáveis adicionais:
$PSScriptRoot$PSEdition$EnabledExperimentalFeatures- Qualquer variável de ambiente, como
$env:TEMP
Somente os seguintes operadores de comparação são permitidos:
-
-eq(igual) -
-gt(maior que) -
-lt(menor que)
Instruções de atribuição, referências de propriedade e chamadas de método não são permitidas.
modo de ConstrainedLanguage
ConstrainedLanguage modo foi projetado para permitir elementos de linguagem básicos, como loops, condicional, expansão de cadeia de caracteres e acesso às propriedades do objeto. As restrições impedem operações que podem ser abusadas por um ator mal-intencionado.
O modo ConstrainedLanguage permite todos os cmdlets e um subconjunto de elementos de linguagem do PowerShell, mas limita os tipos de objeto que podem ser usados.
Os recursos do modo ConstrainedLanguage são os seguintes:
- Todos os cmdlets nos módulos do Windows são totalmente funcionais e têm acesso completo aos recursos do sistema, exceto conforme observado.
- Todos os elementos da linguagem de script do PowerShell são permitidos.
- Todos os módulos incluídos no Windows podem ser importados e todos os comandos exportados pelos módulos são executados na sessão.
- O cmdlet
Add-Typepode carregar assemblies assinados, mas não pode carregar código C# arbitrário ou APIs Win32. - O cmdlet
New-Objectsó pode ser usado em tipos permitidos (listados abaixo). - Somente tipos permitidos podem ser usados no PowerShell. Outros tipos não são permitidos. A conversão de tipo é permitida, mas somente quando o resultado é um tipo permitido.
- Os parâmetros de cmdlet que convertem a entrada de cadeia de caracteres em tipos funcionam somente quando o tipo resultante é um tipo permitido.
- O método
ToString()e os métodos .NET de tipos permitidos podem ser invocados. - Os usuários podem obter todas as propriedades de tipos permitidos. Os usuários podem definir os valores das propriedades somente em tipos permitidos.
Importante
Você deve usar o ConstrainedLanguage modo no modo de Bloqueio do Sistema com o Controle de Aplicativos para Empresas para garantir que o ConstrainedLanguage modo não possa ser ignorado. Para obter mais informações sobre como o PowerShell dá suporte ao AppLocker e ao Controle de Aplicativos, consulte Usar o Controle de Aplicativos para proteger o PowerShell.
Os seguintes tipos de .NET são permitidos no modo ConstrainedLanguage. Os usuários podem obter propriedades, invocar métodos e converter objetos nesses tipos.
Tipos permitidos:
-
[adsi](Somente Windows) -
[adsisearcher](Somente Windows) [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](Somente Windows) -
[wmiclass](Somente Windows) -
[wmisearcher](Somente Windows) [X500DistinguishedName][X509Certificate][xml]
Somente os seguintes tipos de objeto COM são permitidos:
Scripting.DictionaryScripting.FileSystemObjectVBScript.RegExp
Casos especiais:
-
[ref]– A conversão de um objeto para digitar[ref]ou[Management.Automation.PSReference]não é permitida. Outros usos são permitidos.
modo de NoLanguage
O modo de NoLanguage do PowerShell desabilita completamente a linguagem de script do PowerShell.
Você não pode executar scripts ou usar variáveis. Você só pode executar comandos e cmdlets nativos.
A partir do PowerShell 7.2, o cmdlet New-Object é desabilitado no modo NoLanguage quando o bloqueio do sistema é configurado.