PowerShell小技巧:SCCM部署任务时获取当前登录用户并修改CURRENT USER注册表相关键值
  5DGprTFQnos1 2023年11月02日 70 0

背景

我在使用SCCM推送一些APP或指定配置时,经常会有修改当前登录用户(HKEY_CURRENT_USER)注册表的部分键值这类需求. 但在默认情况下使用SCCM推送,会以SYSTEM权限去运行,按照常规的脚本并没法直接修改该计算机当前登录用户的注册表键值;并且我的环境里普通用户没有本地管理员权限,所以也没法以用户的身份去执行脚本。


思路

HKEY_USERS 包含计算机上所有主动加载的用户配置文件。HKEY_CURRENT_USERHKEY_USERS的子项。

官方文档

综上,我需要做的是通过PowerShell分步实现以下目标,然后才能有可能满足上述需求。

  1. 获取当前登录用户的用户名;
  2. 使用用户名获取已登录用户的SID;
  3. 基于用户SID,在HKEY_USERS里找到该用户的注册表配置项;
  4. 为当前登录的用户配置指定的注册表项、键值;

代码

#1.获取当前登录用户;
$CurrentLogonUser = (Get-WMIObject -query "SELECT * FROM win32_Process WHERE Name ='explorer.exe'" | Foreach {  $owner = $_.GetOwner();  $_ | Add-Member -MemberType "Noteproperty" -name "Owner" -value $owner.User -passthru }).Owner  | select-object -first 1

#2.获取当前用户的SID;
$user = New-Object System.Security.Principal.NTAccount($CurrentLogonUser) 
$sid = $user.Translate([System.Security.Principal.SecurityIdentifier]) 
$CurrentUserSID = $sid.Value

#3.访问HKEY_USERS\$CurrentUserSID\创建或修改当前登录用户的相关键值(以下均为演示);
New-Item -Path Registry::HKEY_USERS\$CurrentUserSID\SOFTWARE\ITPro\TEST\Login -Force #创建项
New-ItemProperty -Path Registry::HKEY_USERS\$CurrentUserSID\SOFTWARE\ITPro\TEST\Login -Name 'Jason' -PropertyType DWord -Value '1' -Force #创建键值
#Remove-ItemProperty -Path Registry::HKEY_USERS\$CurrentUserSID\测试CurrentUser -Name "test" #删除键值
#Remove-Item -Path Registry::HKEY_USERS\$CurrentUserSID\测试CurrentUser #删除项

测试

这里简单手动做个测试: 1.先在注册表中访问HKEY_CURRENT_USER然后在其子目录中创建测试项和值 创建测试项和值 2.基于上述命令,查找当前用户的SID 获取当前用户SID 3.然后访问HKEY_USERS\SID验证刚才创建的项是否存在 HKEY_USERS查找.jpg

通过手工操作,验证了当前用户的HKEY_CURRENT_USER的位置等于HKEY_USERS\SID\


再通过SCCM推送脚本至测试计算机,验证是否能够达到预期的效果.脚本是删除刚才创建的HKEY_CURRENT_USER\测试CurrentUser里的TEST值,并创建\SOFTWARE\ITPro\TEST\Login项以及Jason=1的值

经验证脚本效果与我们需求一致。 Enjoy~ ::twemoji:cool::

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

5DGprTFQnos1
最新推荐 更多