我不是在寻找“$env:HOMEDIR”,而是在寻找一种查询不同用户帐户的home目录的方法。
我尝试使用[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>
2条答案
按热度按时间lnxxn5zx1#
您可以将
Get-CimInstance
与Get-LocalUser
结合使用:这将输出目标用户的profile 目录的路径,例如
C:\Users\other.user
。注意:profile 目录 * 通常 * 是,但不一定与用户的 home 目录相同-后者可以配置为指向其他位置,如网络共享,并反映在当前用户的一对 * 环境变量中,即
HOMEDRIVE
和HOMEPATH
。要获取true home 目录,请执行以下操作:
HOMEDRIVE
和HOMEPATH
环境变量是在用户登录到窗口工作站时 * 动态 * 添加到注册表中的(建立OS工作阶段)*,在HKEY_CURRENT_USER\Volatile Environment
下。相比之下,如果加载了其他用户的配置文件(隐藏的NTUSER.DAT
文件位于用户的配置文件目录中)按需导入注册表,例如通过reg.exe load
或通过CreateProcessWithLogon()
WinAPI函数[也被runas.exe
[1]使用],则 * 不 * 添加这些值。至于你试过什么:
System.DirectoryServices.DirectoryEntry
(其类型加速器为[adsi]
)示例的相关属性 * 应该 * 为.Profile
和.HomeDirDrive
/.HomeDirectory
,但至少在我的Windows 10机器上,它们 * 没有填充 *;例如:[1]请注意,类似
runas.exe /profile /user:$userName cmd /c echo %HOMEDRIVE%HOMEPATH%
这样的变量实际上会根据CreateProcessWithLogon()
的行为将%HOMEDRIVE%
报告为C:
,将%HOMEPATH%
报告为\Windows\System32
(!),奇怪的是,CreateProcessWithLogon()
会将这些变量设置为启动进程的 * 工作目录 *,默认为C:\Windows\System32
。2j4z5cfb2#
补充mklement0's helpful answer的另一种方法是直接查询注册表,这将
Get-LocalUser
与Get-ItemPropertyValue
组合在一起: