Grep多行值

时间:2017-04-18 06:54:01

标签: powershell powershell-v4.0

我使用powershell命令net user userID /domain来获取特定用户的本地组成员身份全局组成员身份。我从这个命令中获得了大量信息,其中我只需要本地组成员资格和全局组成员资格信息。

因此,我使用命令net user userID /domain | Out-String -Stream | Select-String “Global Group memberships”仅过滤掉全局组成员资格信息。这里出现了一个问题,即我只获得一行中存在多行数据的数据。

请帮助我使用powershell命令,该命令从此命令中筛选出特定用户的本地组成员身份和全局组成员身份的完整列表。

如果还有其他命令只提取此信息,也欢迎。我尝试了许多没有成功的命令。我使用的是Windows Server 2008 R2和PSVersion 4.0。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

这会让你更接近你需要的东西(但这将是一个包含所有组名和类别标题的列表):

(((net user $env:USERNAME /domain | Out-String -Stream).trim() | Select-String '\*') -split '\*').trim() | Where {$_ -ne ''}

您可能会进一步优化此解决方案,以生成两个不同的列表。

<强>解释

  • 使用trim()从字符串输出中删除空行。
  • Uses Select-String '\*'选择其中带有星号字符的所有字符串(因为组的输出都以*开头)。 \这里是一个转义字符,因为正则表达式。
  • 再次使用trim()删除组名称周围的不必要空格。
  • 使用Where {$_ -ne ''}从输出中删除空行。

我同意,如果您有域,则可以使用Active Directory cmdlet(例如Get-ADUser)获得更好的结果,您需要安装AD管理工具和/或Active Directory PowerShell模块使用。

您通过net user获得的群组名称的输出会被截断,因此您无法获得真正的列表。