我是Citrixpipe理员,希望限制服务器上的普通用户使用PowerShell来运行自己的脚本,或者交互式地使用脚本。 我们已经不允许通过GPO使用命令提示符,但是使用PowerShell,这基本上是无用的。
我发现Powershell.exe有一个命令行选项-NoInteractive ,它将允许用户运行一个脚本,但它不提供交互式命令提示符。 问题是,我还没有find一种方法来强制PowerShell这样操作。 我甚至还创build了一个C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Microsoft.PowerShell_profile.ps1启动脚本来检查-NoInteractive参数,但用户可以通过简单启动Powershell.exe来绕过这个脚本-NoProfile参数。
另一个问题是,我们使用大量的PowerShell脚本为用户启动应用程序,部分login脚本是在PowerShell中编写的,需要在用户上下文中运行,所以我不能简单地对EXE文件进行ACL。 我需要他们能够使用PowerShell,而不是交互式。 最终,我们希望执行AllSigned执行策略并签署所有脚本,因此用户唯一可以运行的就是我们(pipe理员)创build和/或签署的脚本。
我试着用Googlesearch这个答案,发现很多人使用-NoInteractive ,但是我还没有find一个有人试图强迫它的例子。 有任何想法吗?
我想你是误解了-NonInteractive开关的使用; 你仍然可以运行powershell -noninteractive并获得交互式提示。 非交互式开关旨在用于自动化脚本编写scheme,您不希望powershell向用户发送提示并等待响应。 例如,在非交互式PowerShell窗口中,如果运行Get-Credential而没有任何参数,它将立即失败,而不是提示input用户名和密码。 非交互不会作为一个安全机制。
更好的方法是确保您要保护的内容,而不是用户可能用来访问的工具。
我相信我有一个可行的解决scheme,虽然不是特别漂亮。 用户jbsmith在正确的轨道上。 如果我最终ACL的powershell.exe删除用户组的执行权限,这阻止他们运行交互式窗口。 对于用户需要通过login脚本运行的PowerShell脚本,我们可以使用PowerGUI将这些脚本编译为EXE,并允许脚本运行,因为这不会调用PowerShell可执行文件。
我们正在争论是否要进一步采取这一步,并使用AppLocker GPO将PowerShell脚本限制为只有我们祝福的脚本。 当然,我们可以将这些限制仅限于普通的非IT用户,并允许我们的pipe理员像往常一样继续使用PowerShell。 这将涉及一些pipe理开销维护,所以AppLocker部分可能不会实现。