在powershell中将参数传递给net user命令的问题

时间:2016-07-08 14:04:30

标签: powershell

我需要在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,管理员,访客。

1 个答案:

答案 0 :(得分:-1)

尝试将select-object -property name | ft -hidetableheaders替换为select-object -expandproperty name

<强>解释

  1. FT(Format-Table)不返回字符串数组,而是返回一个对象数组。您可以使用$users | Get-Member进行检查 - 您会看到类似这样的内容:

    $users | gm
    
    TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatStartData
    ...
    
  2. select -property name会返回一个哈希表,而不是字符串。因此,您需要将其替换为-ExpandProperty以返回字符串值。

  3. 这是你的工作结构:

    $users = @(Get-WmiObject -Class Win32_UserAccount -Filter "LocalAccount='True'" | 
        Select-Object -ExpandProperty name)
    
    
    foreach ($i in $users) {
        & net user $i
    }
    

    P.S。顺便说一句,Костя,тывкурсепрорусский StackOverflow? :)以防万一...