Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在powershell中获取系统上本地用户的明文列表/数组?_Powershell_Cmd - Fatal编程技术网

如何在powershell中获取系统上本地用户的明文列表/数组?

如何在powershell中获取系统上本地用户的明文列表/数组?,powershell,cmd,Powershell,Cmd,我需要获取系统上所有本地用户的纯文本列表或数组,这样我就可以遍历它们并执行某些操作。我所说的“明文”只是指用户名。没有别的了。没有花哨的格式,没有标题,没有组,只有用户名 我在谷歌上搜索并尝试了几种解决方案(例如,这一种),但它们都有无关的数据,这使得在用户之间进行循环变得不可能 有没有什么方法可以让我得到一个简单的用户列表?如果你有cmd解决方案,我不会介意。请注意,我已经尝试了网络用户,但正如我前面所述,它有这些无关的数据。VBScript: Dim ADsContainer, User S

我需要获取系统上所有本地用户的纯文本列表或数组,这样我就可以遍历它们并执行某些操作。我所说的“明文”只是指用户名。没有别的了。没有花哨的格式,没有标题,没有组,只有用户名

我在谷歌上搜索并尝试了几种解决方案(例如,这一种),但它们都有无关的数据,这使得在用户之间进行循环变得不可能

有没有什么方法可以让我得到一个简单的用户列表?如果你有cmd解决方案,我不会介意。请注意,我已经尝试了
网络用户
,但正如我前面所述,它有这些无关的数据。

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是的,写主机只是为了测试。我忘了编辑我实际使用的内容。现在修好了。谢谢你的滤嘴,真不敢相信我忘了这么做。这正是我要找的!我不知道如何格式化输出,只显示名称,不包括类别。我将接受另一个答案,因为为了安全起见,它也会通过本地帐户过滤对象。不过还是要谢谢你!