如何将Powershell模式从受限模式更改为全语言模式?

时间:2019-07-15 02:53:12

标签: powershell windows-7

我打开PS或PSISE,它们都是我不期望的constrianed语言模式。

我不知道为什么它是ConstrainedLanguage。两天前,只是PSISE处于约束模式而PS是全语言模式。现在,当我重新启动计算机后,它们都处于约束模式,这很困扰我,因为我真的需要使用完整模式。

我试图以管理员身份启动PS,但无法正常工作。试图创建一个新的环境变量__PSLockdownPolicy并将其设置为1或0,仍然无法使用。

我尝试了“ powershell.exe -version 2”,它是完整语言,但是版本2太低,无法使用某些高级模块。

PS C:\windows\system32> $ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage

PS C:\windows\system32> $ExecutionContext.SessionState.LanguageMode = 'fulllanguage'
Cannot set property. Property setting is supported only on core types in this language mode.
At line:1 char:1
+ $ExecutionContext.SessionState.LanguageMode = 'fulllanguage'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertySetterNotSupportedInConstrainedLanguage

我希望我可以以全语言模式打开PS。感谢您的所有帮助!

2 个答案:

答案 0 :(得分:1)

PowerShell v2中不提供锁定策略。您可以通过从管理命令提示符处运行来检查是否对计算机应用了组策略:

gpresult /v 

您可以在输出中搜索PowerShell,以查找系统管理员可能应用于系统的与PowerShell相关的组策略。

您可以检查

$Env:__PSLockdownPolicy

如果已配置,则设置为8 =全语言模式。 可以在注册表HKLM \ System \ CurrentControlSet \ Control \ SESSION MANAGER \ Environment__PSLockdownPolicy中配置

如果找不到阻止PowerShell启动ProcMon并设置过滤器的内容:

  • 操作是包含RegQueryValue的
  • 进程名称为PowerShell.exe包含
  • 进程名称为PowerShell_Ise.exe包含
  • 结果是成功

并启动PowerShell,您可以浏览已加载的键,并检查详细信息列以获取设置的值。通过这种方法,您可以确定锁定PowerShell的所有注册表配置。如果锁定是由组策略应用的,则可以删除该密钥以暂时启用它,但是一旦重新应用组策略,则该设置将恢复(如果未从管理级别进行更改)。

答案 1 :(得分:0)

我也对此有疑问,但就我而言,我是将此策略设置为测试且无法删除的管理员。我发现,当我将其与AppLocker脚本规则结合使用时,由于以下原因,它将其设置为ConstrainedLanguage

从版本5开始,PowerShell会自动识别是否应该 根据脚本规则切换到“约束语言”模式。为此, 它创建一个模块和一个脚本(名称跟随模式 $ env:temp下的__PSSCRIPTPOLICYTEST_LQU1DAME.3DD.PS1)并尝试执行它们。如果AppLocker或其他工具阻止了此尝试, PowerShell以约束语言模式启动。

来源:https://4sysops.com/archives/mitigating-powershell-risks-with-constrained-language-mode/