windows - 如何使用 Windows Powershell 检索不同本地用户的主目录/配置文件路径

标签 windows powershell adsi home-directory

我不是在寻找“$env:HOMEDIR”,而是在寻找一种方法来查询不同用户帐户的主目录。相当于“~bob”的 powershell。

我尝试使用 [ADSI]:

# After creating a local account called 'other.user'
PS> $user = [ADSI]'WinNT://localhost/other.user,user'
PS> $user.name
other.user
PS> $user.HomeDirectory

PS>

即使在提升的 powershell 中从管理员帐户执行。

为了理智,我尝试对现有用户进行相同的检查:

PS> $user = [ADSI]('WinNT://localhost/{0},user' -f [Environment]::UserName)
PS> $user.name
this.user    # paraphrase
PS> $user.HomeDirectory

PS> $user.properties.HomeDirectory

PS>

最佳答案

你可以结合Get-CimInstanceGet-LocalUser :

$userName = 'other.user'
(
  Get-CimInstance Win32_UserProfile -Filter "SID = '$((Get-LocalUser $userName).Sid)'"
).LocalPath

这会输出目标用户的个人资料目录的路径,例如C:\Users\other.user

注意:个人资料目录通常,但不一定与用户的 目录 - 后者可以配置为指向其他地方,例如网络共享,并反射(reflect)在当前用户的环境变量中,HOMEDRIVEHOMEPATH


获取真正的home目录:

  • 如果目标用户存储在 Active Directory 中,则以下可能有效(未经测试):

    $userName = 'other.user'
    $user = Get-ADUser $userName -Property HomeDrive, HomeDirectory
    '{0}{1}' -f $user.HomeDrive, $user.HomeDirectory
    
  • 对于本地用户:

    • 鉴于 HOMEDRIVEHOMEPATH 环境变量是动态添加到注册表,当该用户登录到窗口站(创建操作系统 session )时,在 HKEY_CURRENT_USER\Volatile Environment 下。相比之下,如果您按需将另一个用户的配置文件(位于用户配置文件目录中的隐藏 NTUSER.DAT 文件)加载到注册表中,例如通过 reg.exe load 或通过 CreateProcessWithLogon() WinAPI 函数(也被 runas.exe[1] 使用),添加这些值。

    • 如果有人知道主目录信息是否包含在用户配置文件的非 volatile 信息中以及位于何处(加载后可通过注册表访问),请告诉我们知道。


至于你尝试了什么:

System.DirectoryServices.DirectoryEntry的相关属性(其类型加速器是 [adsi])实例应该.Profile.HomeDirDrive/。 HomeDirectory,但至少在我的 Windows 10 机器上它们没有填充;例如:

PS> ([adsi] 'WinNT://localhost/jdoe,user') | Format-List *

# ...
HomeDirectory              : {}
# ...
Profile                    : {}
HomeDirDrive               : {}
# ...

[1] 请注意类似 runas.exe/profile/user:$userName cmd/c echo %HOMEDRIVE%HOMEPATH% 的效果报告 %HOMEDRIVE% 作为 C:%HOMEPATH% 作为 \Windows\System32(!),基于 CreateProcessWithLogon() 的行为,奇怪的是,它将这些变量设置为启动进程的工作目录,默认为 C:\Windows\System32

关于windows - 如何使用 Windows Powershell 检索不同本地用户的主目录/配置文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74281761/

相关文章:

.net - Windows VB.NET 1.1 到 2.0 升级 - 好处?

windows - 找不到 XAMPP 对象错误

powershell递归检索组成员

powershell - 通过 ADSI 提取 AD 用户信息

mysql - sql 在事件目录上使用多个 where 子句打开查询

windows - WinRT GridView 禁用项目选择,但保持启用状态

c# - .NET 6 工作线程服务停止时出现错误

.net - 在 Powershell 中使用 AsyncCallback

powershell - 是否可以使用 Add-Member 方法处理 switch 参数?

.net - LDAP 搜索过滤器语法(仅)用于识别特定 OU (AD) 中的对象