0

我正在寻找从该行返回的输出中提取名称值...

Gwmi win32_groupuser –computer $env:computername | ? {$_.groupcomponent –like '*"Administrators"'} | Select -Property PartComponent

我认为我会使用正则表达式来修剪,但我不熟悉它们的操作并且(到目前为止)一直无法找到足以完成此操作的指令。

作为参考,输出类似于...

\\My_Machine\root\cimv2:Win32_UserAccount.Domain="My_Machine",Name="Administrator"

我想从该输出中提取“管理员”。

目前我正在努力...

$Report = Gwmi win32_groupuser –computer $env:computername | ? {$_.groupcomponent –like '*"Administrators"'} | Select -Property PartComponent
$Report | ForEach-Object {$_.PartComponent -match '(?<=Name=")[^"]+[^"]'
[PSCustomObject]@{Resultant_String=$Matches.Values}}

我越来越...

Resultant_String                                                                                                                             
{Administrator}                                                                                                                              
True
{admin}                                                                                                                                      
True
{GroupName}                                                                                                                              
True
{UserName}                                                                                                                                  
True
{CiscoHistRprtUsr}
4

4 回答 4

1

尝试这样的事情,(?<=Name=")[^"]+[^"]. 这是在做一个积极的观察Name=",然后是重复的任何 char (除了"),然后是不是 的任何 char "。这更健壮一些,因为如果Name=不是字符串中的最后一个元素,这仍然有效。如果Name=说返回的第一个值,它仍然应该只捕获紧随其后的引号中的内容,而不是直到最后一个".

使用您的测试示例,我在这里做了一些测试。

于 2013-10-25T17:11:53.927 回答
0

如果 Name 总是在字符串的末尾,你可以简单地使用

([^"]*)"$

此处说明:http ://regex101.com/r/yV3uD6

于 2013-10-25T17:19:11.780 回答
0

两种解决方案:

(?<=Name=")[^"]*?(?=")

请注意,此处的?后面*很重要。它使量词非贪婪(这只是一种奇特的方式来说明它将捕获尽可能少的字符并且永远不会超出结束符")。

(?:Name=")([^"]*?)(?:")

由于第一组和最后一组是非捕获的,因此您只需要使用类似\1or的东西来检索第二组的值(实际上是第一个也是唯一一个捕获的组) $1

于 2013-10-25T17:24:53.120 回答
0

最终我结束了这个。

$FileServer = "My_File_Server"
$LocalHostName = $env:computername
$OutPutPath = "\\$FileServer\system_information$\"
$GetAdmins = Gwmi win32_groupuser –computer $LocalHostName | ? {$_.groupcomponent –like '*"Administrators"'} | Select -Property PartComponent
ForEach-Object{$GetAdmins | % {if ($_ -match 'Name="(.+)"') {[PSCustomObject]@{Name=$Matches[1]}}}} | Export-Csv -Path "$OutPutPath\$LocalHostName\$ReportName.csv" -NoTypeInformation}

它生成一个带有名称标题的表,其中包含从返回的字符串中提取的所有本地管理员的用户名。

于 2013-10-29T14:40:02.043 回答