【问题标题】:Having trouble getting a list of users profiles [closed]无法获取用户个人资料列表[关闭]
【发布时间】:2020-11-05 18:22:47
【问题描述】:

问候最了不起的社区,

我正在尝试编写一个脚本来列出电脑上的所有配置文件。 我想要的列表示例:

Admin 
JSmith 
LGale 
Mthinker

有没有人知道如何尝试获取信息或拥有可以共享的代码的 sn-p?

我在网上查看并进行了一些研究,还查看了很多可用的脚本,但在我需要的时候没有什么是完全正确的。

【问题讨论】:

  • 我投了反对票,因为您非常清楚没有在 Google 上搜索“Windows 列出 PC 上的所有配置文件”,否则您会立即找到答案。
  • 感谢您告诉我。我是新手,不知道要添加什么。我更正了帖子
  • 我的反对意见是留下,因为,再一次,你显然没有研究你的问题。 (此外,“我尝试了很多东西,但没有任何效果”过于宽泛,无法计算。您尝试过哪些确切短语,您发现哪些不符合您的需求?)
  • @SomethingDark 是的,但题外话不需要完美的答案/cmets。
  • 或者我应该说值得.. ;)

标签: powershell batch-file profile


【解决方案1】:

您需要在 WMI 中查询 Win32_UserProfile 实例 - 每个配置文件都将链接到拥有该配置文件的用户的安全标识符,该标识符又可以转换为具有用户名的帐户对象:

Get-CimInstance win32_userprofile |ForEach-Object {
  # Convert SID string to SecurityIdentifier object
  $SID = $_.SID -as [System.Security.Principal.SecurityIdentifier]

  try {
    # Now we can resolve the actual account
    $SID.Translate([System.Security.Principal.NTAccount]).Value
  }
  catch {
    Write-Warning "Unable to translate SID '$($_.SID)' for profile at '$($_.LocalPath)' to account name"
  }
}

在我的机器上(只有一个本地帐户)列出:

COMPUTER-NAME\mathias
NT AUTHORITY\NETWORK SERVICE
NT AUTHORITY\LOCAL SERVICE
NT AUTHORITY\SYSTEM

【讨论】:

  • 谢谢。这会将列表放在哪里?
  • @doheth 无处可去。如果需要,您可以将列表分配给变量:$listOfAccountNames = Get-CimInstance ...
  • 非常感谢您的帮助。我是新手,将来会更好地表达我的问题
  • 另一种方法,(将结果限制为实际的本地普通用户帐户),可能是这一行:Get-CimInstance -Query "Select * From Win32_UserProfile Where Special != 'True' And LocalPath Is Not Null" | Select-Object -Property @{Label='UserNames';Expression={(Get-CimInstance -ClassName Win32_UserAccount -Filter "SID = '$($_.SID)'").Name}}
  • @Compo 过滤绝对是一个很好的建议,但是在不了解环境的情况下盲目查询Win32_UserAccount,我强烈建议不要:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-06
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多