天天看点

PowerShell小技巧:SCCM部署任务时获取当前登录用户并修改CURRENT USER注册表相关键值

背景

我在使用

SCCM

推送一些APP或指定配置时,经常会有修改

当前登录用户(HKEY_CURRENT_USER)

注册表的部分键值这类需求.

但在默认情况下使用SCCM推送,会以

SYSTEM

权限去运行,按照常规的脚本并没法直接修改该计算机当前登录用户的注册表键值;并且我的环境里普通用户没有本地管理员权限,所以也没法以用户的身份去执行脚本。

思路

HKEY_USERS

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

HKEY_CURRENT_USER

HKEY_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 #删除项
           

测试

再通过SCCM推送脚本至测试计算机,验证是否能够达到预期的效果.脚本是删除刚才创建的HKEY_CURRENT_USER\测试CurrentUser里的

TEST

值,并创建\SOFTWARE\ITPro\TEST\Login项以及Jason=1的值
PowerShell小技巧:SCCM部署任务时获取当前登录用户并修改CURRENT USER注册表相关键值
PowerShell小技巧:SCCM部署任务时获取当前登录用户并修改CURRENT USER注册表相关键值
PowerShell小技巧:SCCM部署任务时获取当前登录用户并修改CURRENT USER注册表相关键值
PowerShell小技巧:SCCM部署任务时获取当前登录用户并修改CURRENT USER注册表相关键值
PowerShell小技巧:SCCM部署任务时获取当前登录用户并修改CURRENT USER注册表相关键值