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="あり、次に任意の文字 ( を除く") を繰り返し、次にそうでない文字を繰り返し"ます。Name=が文字列の最後の要素でない場合でも機能するため、これはもう少し堅牢です。最初に返された値が返された場合Name=でも、その直後の引用符に含まれるもののみをキャプチャし、最後の".

あなたのテスト例を使用して、ここでいくつかのテストを行いました。

于 2013-10-25T17:11:53.927 に答える
0

Name が常に文字列の最後にある場合は、単純に使用できます

([^"]*)"$

ここでの説明: http://regex101.com/r/yV3uD6

于 2013-10-25T17:19:11.780 に答える
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 に答える