2013-09-05 8 views
1

원격 컴퓨터에서 활성 사용자의 세션 ID를 찾아 해당 세션 ID를 사용하여 프로그램을 시작하는 PowerShell 스크립트를 작성하고 있습니다. 여기까지 내가 지금까지 가지고있는 것이있다.psexec/PowerShell 쿼리 사용자 명령에서 세션 ID 추출

$queryusers = $psexecdirectory + ' \\' + $remotepc + ' -u ' + $domain + '\' + $username + ' -p ' + $password + ' query user' 
$results = iex $queryusers 

는 위의 나는 ID를 얻기 위해 아래 사용했습니다 $results

USERNAME    SESSIONNAME  ID STATE IDLE TIME LOGON TIME 
usr1        3 Disc   1:12 9/5/2013 11:59 
AM 
>usr2   rdp-tcp#1   4 Active   . 9/5/2013 11:59 
AM 

변수에 저장되는 아래 예제 결과로, 잘 작동하지만 세션 이름 '의 숫자 rdp- CTP # 0은 '쓸모없는 그것을 렌더링, 위의 출력처럼의 경우 다른 사용자가 로그인을 변경 :

$id = $results | Select-String "$rdp-tcp#0\s+(\w+)" | 
       Foreach {$_.Matches[0].Groups[1].Value} 

내가 PowerShell을 구문에 익숙하지 않은 오전과 사이트를 찾을 수 없었습니다 여기서 서식 옵션이 설명됩니다. 누군가 나를 도울 수 있습니까? 그리고 문자열에서 발췌 문장을 추출하는 것에 대해 더 많은 것을 배울 수있는 웹 사이트를 알고 있다면? 미리 감사드립니다.

+0

또는 더 많은 powershell (실제로 WMI)을 사용하고 psexec 또는 문자열 피델 링이 필요하지 않습니다. http://gallery.technet.microsoft.com/scriptcenter/0e43993a-895a-4afe-a2b2-045a5146048a –

답변

2

이 시도 :

$id = $results | ? { $_ -match '(\d+)\s+Active' } | % { $matches[1] } 

정규 표현식 (\d+)\s+Active 키워드 번호와 후속 루프 덧붙일 "활성은"처음 submatch (즉, 수)를 반환 일치합니다.

+0

매력처럼 작동했습니다. 감사합니다. 나는 정규 표현식에 대해 읽게 될 것이다. – user2258327