我需要在PowerShell中传递本地用户列表:
users$=@(Get-WmiObject -Class Win32_UserAccount -Filter "LocalAccount='True'"
| select-object -property name
| ft -hidetableheaders)
到命令foreach ($i in $users){net user $i)
但它不起作用,尽管它应该。
正如我所看到的,数组的长度是$ users.length我的案例的1项。
PS C:\> $users.length
1
尽管在echo $users
中,该列表仅包含3个项目,因为我可以看到它在视觉上看到:1,管理员,访客。
答案 0 :(得分:-1)
尝试将select-object -property name | ft -hidetableheaders
替换为select-object -expandproperty name
。
<强>解释强>:
FT(Format-Table)不返回字符串数组,而是返回一个对象数组。您可以使用$users | Get-Member
进行检查 - 您会看到类似这样的内容:
$users | gm
TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatStartData
...
select -property name
会返回一个哈希表,而不是字符串。因此,您需要将其替换为-ExpandProperty
以返回字符串值。
这是你的工作结构:
$users = @(Get-WmiObject -Class Win32_UserAccount -Filter "LocalAccount='True'" |
Select-Object -ExpandProperty name)
foreach ($i in $users) {
& net user $i
}
P.S。顺便说一句,Костя,тывкурсепрорусский StackOverflow? :)以防万一...