【发布时间】:2022-11-22 02:44:17
【问题描述】:
我是我们公司的 IT 管理员之一。最近,网络安全部门希望对用户在 U 盘和外部大容量存储设备上读取和/或写入数据的难易程度采取更严格的措施。此外,所有获得新 Windows 笔记本电脑的新用户将只有“非管理员”权限。安装软件等的所有请求都必须通过 IT 服务台。
已创建 Active Directory OU,并已将一些测试笔记本分配给它。我的老板希望我编写和测试一些 Powershell 脚本,这些脚本允许我和我的同事(在与用户的屏幕共享会话中)暂时删除控制 USB 存储访问的注册表项(直到下一个组策略更新到来)沿着)。困难的部分已经解决了。目的是脚本将作为 Nal-Object 存储在 ZenWorks 上,因此用户将无法看到源代码(有点类似于只需双击的 exe 文件)。
造成麻烦的代码......
# self-elevate to admin user - code at the very top of the PS file..
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Start-Process PowerShell -Verb RunAs "-NoProfile -ExecutionPolicy Bypass -Command `"cd '$pwd'; & '$PSCommandPath';`"";
exit;}
# all the main code follows..
在这里,如果我运行脚本(在非管理员帐户中),UAC 会提示我输入本地(或域)管理员帐户的名称和密码,PS 中的新窗口/会话打开,我可以运行任何主要的命令需要运行。
然而,问题是当提示输入凭据然后输入本地非管理员帐户的正确密码时(因为某些用户不可避免地会这样做!)一个新的空 PS 窗口/会话只是以周期性的方式无限期地打开.
我还尝试在 if 语句中添加一个“else 子句”(向用户显示警报和/或强制退出 Powershell,但它似乎永远不会被执行)。
当我在计算机上测试它是不是任何域等的一部分时,我只是在 UAC 中收到“用户未被授权”的警报,并且没有错误有机会传播。
有什么解决方法吗?如果 UAC 提示只是默认为名称“ROOT\install”,那就太好了。除了 IT 管理员外,没有人知道此帐户的密码。
我也跑过获取执行策略列表... MachinePolicy 和 LocalMachine 是“RemoteSigned”,其他一切都是“未定义”。
我不认为执行策略在这个奇怪的循环中发挥作用,但我愿意犯错。我正在测试的脚本没有通过任何签名程序等,只是位于其中一台测试计算机的本地桌面上。
谢谢。
【问题讨论】:
-
所以,您只是想循环直到输入正确的凭据?此外,您可以使用指向
pscredential对象的-Credential参数。这应该会给您更大的灵活性,因为您可以使用用户名填充Get-Credential,例如:Get-Credential -UserName 'ROOT\Install' -Message 'test'。 -
循环是我要避免的。如果非管理员用户提交了正确的 AD 用户名和密码,就会出现新/空 PS 窗口的永无止境循环。我更愿意看到用户看到 GUI 警报并关闭 PS。
-
那么要求用户停止提交凭据?
-
如果用户不是管理员,您是否在询问如何添加额外的检查以停止创建新进程?
-
但是,如果用户提供了不正确的凭据,则不会弹出新会话,只是会出现一个错误,说明凭据无效,对吗?
标签: powershell active-directory group-policy