You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本故障:获取AD用户SID并用于注册表修改失败

问题修复方案

你的脚本存在三个核心问题,以下是针对性的修正方案:

1. 正确提取用户SID的字符串值

Select-Object SID返回的是包含SID属性的对象,而非纯字符串值,需要直接提取SID的实际内容:

$username = Read-Host -Prompt '输入用户名'
# 直接获取SID的字符串格式值
$SID = (Get-ADUser -Identity $username).SID.Value

2. 修复命令字符串的引号嵌套与变量解析

原命令用单引号包裹导致$SID无法被PowerShell解析,同时嵌套引号逻辑混乱,改用双引号包裹并正确转义内部引号:

$PSExec = "C:\Windows\System32\PsExec.exe"
$hostname = Read-Host -Prompt '输入主机名'

# 用双引号实现变量解析,内部引号用反引号`转义,添加/f参数自动覆盖现有值
$command = "cmd /c `"reg add `"`"HKEY_USERS\$SID\SOFTWARE\Policies\Microsoft\Internet Explorer\Control Panel`"`" /v ConnectionsTab /t REG_DWORD /d 0 /f`""

3. 调整Start-Process的参数传递方式

PsExec的参数需要正确拆分,避免空格导致的解析错误,建议将目标主机和命令拆分为独立参数:

# 添加-Wait等待命令执行完成,-NoNewWindow避免弹出额外窗口(可选)
Start-Process -FilePath $PSExec -ArgumentList "\\$hostname", $command -Wait -NoNewWindow

完整修复后的脚本

$username = Read-Host -Prompt '输入用户名'
$SID = (Get-ADUser -Identity $username).SID.Value
$PSExec = "C:\Windows\System32\PsExec.exe"
$hostname = Read-Host -Prompt '输入主机名'

$command = "cmd /c `"reg add `"`"HKEY_USERS\$SID\SOFTWARE\Policies\Microsoft\Internet Explorer\Control Panel`"`" /v ConnectionsTab /t REG_DWORD /d 0 /f`""

Start-Process -FilePath $PSExec -ArgumentList "\\$hostname", $command -Wait -NoNewWindow

额外注意事项

  • 运行脚本的账号需具备目标主机的管理员权限,以及Active Directory的用户读取权限
  • 确认目标主机已启用文件和打印机共享服务(PsExec依赖此服务通信)
  • 若PsExec未放置在System32目录,需指定完整工具路径

内容的提问来源于stack exchange,提问作者virtue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 20:57:25