2011-08-11 6 views
3

Powershellでパイプ選択文字列コマンドを取得しようとしています。ここで私はこれまで持っているものです。返された行の特定の部分だけを表示する文字列を選択します。

PS H:\> gwmi win32_LoggedOnUser -computer server | select-string -pattern "domain" | select-string -pattern "Admin" -NotMatch 

\\server\root\cimv2:Win32_LoggedOnUser.Antecedent="\\\\.\\root\\cimv2:Win32_Account.Domain=\"domain\",Name=\"user1\"",Dependent="\\\\.\\root\\cimv2:Win32_LogonSession.LogonId=\"44946387\"" 
\\server\root\cimv2:Win32_LoggedOnUser.Antecedent="\\\\.\\root\\cimv2:Win32_Account.Domain=\"domain\",Name=\"user2\"",Dependent="\\\\.\\root\\cimv2:Win32_LogonSession.LogonId=\"41485153\"" 
\\server\root\cimv2:Win32_LoggedOnUser.Antecedent="\\\\.\\root\\cimv2:Win32_Account.Domain=\"domain\",Name=\"user3\"",Dependent="\\\\.\\root\\cimv2:Win32_LogonSession.LogonId=\"46401036\"" 
\\server\root\cimv2:Win32_LoggedOnUser.Antecedent="\\\\.\\root\\cimv2:Win32_Account.Domain=\"domain\",Name=\"user4\"",Dependent="\\\\.\\root\\cimv2:Win32_LogonSession.LogonId=\"40161073\"" 
\\server\root\cimv2:Win32_LoggedOnUser.Antecedent="\\\\.\\root\\cimv2:Win32_Account.Domain=\"domain\",Name=\"user5\"",Dependent="\\\\.\\root\\cimv2:Win32_LogonSession.LogonId=\"46557830\"" 

だから私は私が探しているものを持っているが、私は、コマンドが実際に私を示したものをアップ短くしたいです。可能であれば、私は見たいだけです:

Domain\user1 
Domain\user2 

しかし、私はこれを行う方法がわかりません。私が一番近かったのは、最後に「Select Matches」という別のコマンドを配管することです。正規表現は私の悩みに対する答えかもしれないと私は読んだ。

ご協力いただきありがとうございます。

答えて

4

以下のようなものを使用してください:select-stringそう多く使用して

(gwmi win32_LoggedOnUser) | %{[void]($_.Antecedent -match 'Domain="(\w+)",Name="(\w+)"'); "{0}\{1}" -f $matches[1],$matches[2]} 

避ける - それはすべてのgrepとbashのようなものですが、sed、awk、私​​がPowershellが忠実度の高いオブジェクトを避けることができると信じているカットブードゥー。オブジェクトとそのプロパティを可能な限り使用してください。はい、いつでも使用できるとは限りません。select-stringまたは他の文字列操作に頼っていますが、最後のステップまで避けてください。 Powershellはきちんとした、簡単でバグのないIMOをプログラミングします。

0

これはあなたが望むものをあなたに与えている場合を参照してください:

gwmi win32_LoggedOnUser -computer server | select-string -pattern "domain" | select-string -pattern "Admin" -NotMatch | Select-Object @{n='Result'; e={$_ -match '.*Domain=\\"(\w*)\\.*Name=\\"(\w*)\\.*' | Out-Null; $matches[1] + '\' + $matches[2]}} 
+0

非常に良い!まさに私が望んでいたものですか?今すぐ離れて、あなたがそれをした方法を理解してください... – Tekz08

+0

実際にはより良い彼のコメントが正しいとmanojldsの答えを読んで受け入れてください。彼の答えは、私のものよりも優れているので、私はそれを打ちのめした。ちょっと違うアプローチを示しているので、私はただここにいました。 – EBGreen

関連する問題