【问题标题】:Grep multi line valuesGrep 多行值
【发布时间】:2017-04-18 06:54:01
【问题描述】:

我正在使用 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。任何帮助将不胜感激。

【问题讨论】:

  • 使用 Get-ADUser 和整个 ActiveDirectory 模块,因为你有一个域。
  • 我不确定它是否有效,但您是否尝试过" | format-list"
  • Powershell 不接受“Get-ADUser”命令。似乎它不支持 Get-ADUser。它抛出错误“Get-ADUser:术语'Get-ADUser'未被识别为 cmdlet、函数、脚本文件或可运行程序的名称”@Vesper
  • 也试过“|格式列表”。没成功:(@guiwhatsthat
  • Format-List 没有帮助。您遇到的问题是 net 命令返回一个数组,其中每一行都是一个元素。尽管 Global Group Memberships 列表跨越多行,但只有第一行包含该字符串并被返回。查看this linkGet-ADUser 工作。这将返回一个对象,允许您使用Select 来获取您所追求的属性。

标签: powershell powershell-4.0


【解决方案1】:

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

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

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

说明:

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

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

您通过net user 获得的组名输出被截断,因此您没有得到一个非常真实的列表。

【讨论】:

  • 完美!!这正是我正在寻找的:) 很好的解释。对我来说很有意义。非常感谢,继续支持!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多