powershell 在脚本中访问特定用户的USERPROFILE目录的正确方式?

d6kp6zgx  于 2022-11-10  发布在  Shell
关注(0)|答案(3)|浏览(199)

我正在编写一个脚本来执行Windows机器上每个(本地)用户的USERPROFILE文件夹中的一些文件操作。
我找到了各种使用$env:USERPROFILE来标识当前登录用户的配置文件目录的示例。我还看到过一些示例,这些示例假设所有用户配置文件都保存在C:\USERS\中,并迭代/筛选该文件夹。
但是,可以在Windows上移动配置文件文件夹。我的目标是在给定特定用户的用户名(字符串)或LocalUser对象的情况下(可靠地)找到该用户的配置文件目录。
我可以获得基于活动帐户的用户对象数组,使用-

$users = Get-LocalUser | Where-Object Enabled -eq true

但是这些LocalUser对象的属性是有限的,UserProfile路径不在其中。我相信这些信息存储在注册表中。我已经多次阅读了PowerShell文档,但我还没有找到正确的咒语,可以为我提供给定用户的用户配置文件的路径,我可以在循环中使用它来迭代所有用户及其配置文件文件夹。

flmtquvp

flmtquvp1#

您可以从注册表中检索所有用户配置文件目录根(父)目录**,如下所示:

$profilesRootDir = 
  Get-ItemPropertyValue 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' ProfilesDirectory

要获得特定用户的*配置文件目录,比如jdoe,您可以使用:


# See more robust alternative below.

Join-Path $profilesRootDir jdoe

然而,最终的真相来源是上述注册表项路径子项中的ProfileImagePath值,以每个用户的SID(安全标识符)命名,Get-LocalUser提供(输出对象具有.SID属性)。
因此,最好使用:

Get-ItemPropertyValue "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$((Get-LocalUser jdoe).SID)" ProfileImagePath

要可靠地获取所有已启用本地用户配置文件目录,请使用以下方法:

Get-LocalUser | 
  Where-Object Enabled |
  ForEach-Object {
    # Note the use of ...\ProfileList\$($_.SID) and value name ProfileImagePath
    Get-ItemPropertyValue "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$($_.SID)" ProfileImagePath
  }
r1wp621o

r1wp621o2#

也许是这样的:

$users = Get-LocalUser | Where-Object Enabled -eq true

$profilesRootDir = @(
 Get-ItemPropertyValue 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' ProfilesDirectory)

ForEach ($User in $Users) {

  $UserPath = Join-Path -Path "$profilesRootDir" -ChildPath "$User"

  "User     : $User`n" +
  "User-Path: $UserPath" 
}

产出:

User     : Bruce
User-Path: C:\Users\Bruce
x8diyxa7

x8diyxa73#

您可以使用WMI类Win32_USERPROFILE,但它只有sid,没有用户名:

get-wmiobject win32_userprofile | select sid,localpath

sid                                              localpath
---                                              ---------
S-1-5-21-3961843708-1234567890-2901110831-1002   C:\Users\user

相关问题