如何在powershell中获取系统上本地用户的明文列表/数组?
我需要获取系统上所有本地用户的纯文本列表或数组,这样我就可以遍历它们并执行某些操作。我所说的“明文”只是指用户名。没有别的了。没有花哨的格式,没有标题,没有组,只有用户名 我在谷歌上搜索并尝试了几种解决方案(例如,这一种),但它们都有无关的数据,这使得在用户之间进行循环变得不可能 有没有什么方法可以让我得到一个简单的用户列表?如果你有cmd解决方案,我不会介意。请注意,我已经尝试了如何在powershell中获取系统上本地用户的明文列表/数组?,powershell,cmd,Powershell,Cmd,我需要获取系统上所有本地用户的纯文本列表或数组,这样我就可以遍历它们并执行某些操作。我所说的“明文”只是指用户名。没有别的了。没有花哨的格式,没有标题,没有组,只有用户名 我在谷歌上搜索并尝试了几种解决方案(例如,这一种),但它们都有无关的数据,这使得在用户之间进行循环变得不可能 有没有什么方法可以让我得到一个简单的用户列表?如果你有cmd解决方案,我不会介意。请注意,我已经尝试了网络用户,但正如我前面所述,它有这些无关的数据。VBScript: Dim ADsContainer, User S
网络用户
,但正如我前面所述,它有这些无关的数据。VBScript:
Dim ADsContainer, User
Set ADsContainer = GetObject("WinNT://.,Computer")
ADsContainer.Filter = Array("User")
For Each User In ADsContainer
WScript.Echo User.Name
Next
将上述行粘贴到GetLocalUsers.vbs中,并按如下方式运行:
cscript //nologo GetLocalUsers.vbs
如果要在PowerShell中直接使用WMI,可以使用以下选项:
get-wmiobject Win32_UserAccount -filter 'LocalAccount=TRUE' |
select-object -expandproperty Name
经过更多的实验、阅读等,我找到了一个相当简单的解决方案:
$accounts = Get-WmiObject -Class Win32_UserAccount | Select name
返回:
name
----
Administrator
Guest
John Doe
Other User
不完全是我想要的,但如果我像这样循环:
foreach ($i in $accounts) { Write-host $i.name }
它打印:
Administrator
Guest
John Doe
Other User
这很混乱,所以我将其缩短为一个循环:
foreach ($i in Get-WmiObject -Class Win32_UserAccount | Select name) {
# refer to the looped user as $i.name now
}
根据Bill_Stewart的评论,按本地帐户过滤是个好主意:
foreach ($i in Get-WmiObject -Class Win32_UserAccount -filter 'LocalAccount=true' | Select name) {
# refer to the looped user as $i.name now
}
仍然不是最优的,但目前它适合我的需要。您必须这样编写,才能按照您的要求格式化它:
Get-WmiObject -Class Win32_UserAccount | Format-wide -property name -column 1
印刷品:
Administrator
Guest
and so on..
只需从链接答案的脚本中删除不需要的部分信息。这并不难。只需从
Select Object
项目列表中删除您不需要的信息即可。@KenWhite说实话,这是我第一次使用PowerShell,虽然我尝试了您建议的方法,但还是没有成功。不过我会继续尝试。我不使用VBScript,所以我看不出这对我有什么帮助。您可以直接在PowerShell中运行VBScript脚本。是的,我肯定可以,但这不是我想要做的;)不过,您的第二个解决方案工作得很好。我建议在命令中添加-filter'LocalAccount=TRUE'
,以便在计算机位于域上时筛选出域帐户。另外,我不建议对您的用例使用“写主机”,因为它的输出无法重定向到文件。(见我的第二个答案。)@Bill_Stewart是的,写主机只是为了测试。我忘了编辑我实际使用的内容。现在修好了。谢谢你的滤嘴,真不敢相信我忘了这么做。这正是我要找的!我不知道如何格式化输出,只显示名称,不包括类别。我将接受另一个答案,因为为了安全起见,它也会通过本地帐户过滤对象。不过还是要谢谢你!