如何强制 PowerShell 不允许交互式命令窗口

如何强制 PowerShell 不允许交互式命令窗口

我是一个Citrix管理员,并希望限制我们服务器上的一般用户使用 PowerShell 运行自己的脚本或以交互方式使用它。我们已经禁止通过以下方式使用命令提示符邮政总局,但是有了 PowerShell,这基本上就没用了。

我发现 Powershell.exe 有一个命令行选项,-NoInteractive允许用户运行脚本,但它不提供交互式命令提示符。问题是我还没有找到强制 powershell 以这种方式运行的方法。我甚至创建了一个 C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1 启动脚本来检查参数-NoInteractive,但用户只需使用该参数启动 Powershell.exe 即可绕过该-NoProfile脚本。

另一个问题是,我们确实使用大量 PowerShell 脚本来为用户启动应用程序,并且登录脚本的某些部分是用 PowerShell 编写的,需要在用户上下文中运行,因此我无法简单地对 EXE 文件进行 ACL。我需要他们能够使用 PowerShell,但不能以交互方式使用。最终,我们希望强制执行AllSigned执行策略并签署所有脚本,以便用户唯一可以运行的是我们(管理员)创建和/或签署的脚本。

我尝试在 Google 上搜索此答案,发现许多人使用-NoInteractive,但我没有发现有人尝试强制执行此操作的例子。有什么想法吗?

答案1

我认为您误解了 -NonInteractive 开关的用法;您仍然可以运行powershell -noninteractive并获得交互式提示。非交互式开关适用于自动脚本编写场景,在这些场景中,您不希望 powershell 向用户发送提示并等待响应。例如,在非交互式 PowerShell 窗口中,如果您在Get-Credential没有任何参数的情况下运行,它将立即失败,而不是提示输入用户名和密码。非交互式不会充当安全机制。

更好的方法是保护您要保护的内容,而不是用户可能用来访问它的工具。

答案2

我相信我有一个可行的解决方案,尽管它不是特别漂亮。用户杰布史密斯是正确的。如果我最终通过 ACL 删除 powershell.exe执行用户组的权限,阻止他们运行交互式窗口。对于用户确实需要通过登录脚本运行的 PowerShell 脚本,我们可以使用以下方法将这些脚本编译为 EXE图形用户界面并允许脚本运行,因为它不会调用 PowerShell 可执行文件。

我们正在讨论是否要更进一步,使用应用程序锁GPO 将 PowerShell 脚本限制为仅我们已批准的脚本。当然,我们可以将这些限制仅施加于普通非 IT 用户,并允许我们的管理员继续正常使用 PowerShell。这将涉及一些管理开销,因此 AppLocker 部分可能无法实现。

相关内容