2016-06-30 6 views
1

우리 환경의 사용자가 시설 내 다른 사용자의 세션을 차단하는 데 도움이되는 작은 스크립트가 있습니다 (본사에서 일하고 기업 사용자는 다른 사용자의 세션을 차단할 수 있어야 함) 따라서 다른 사이트)powershell - 배열 문제에서 특정 정보 얻기

그래서 나는이있어 :

: 나는 그것이 결과에서 세션 ID를 잡아 얻을 수 없습니다, 그러나

$servers = "server1, server2, server3, server4, server5" 

#search for user in servers farm 
foreach ($server in $servers) { 

$results = & qwinsta.exe $userid /server:$server 

    if ($results -ne $null) { 

     write-host "User found in $server" 

     $serverfound = $server 

     write-host $results[1] 

     $sessionid = $results[1] | Where-Object { $_ -is 0..99} 

     write-host "Session ID is: $sessionid" 
    } 
} 

을,이 스크립트의 출력은

Ple 우리가

사용자가

RDP-TCP # 0 x2adm 2 활성

세션 ID가 서버 5에있는 RDSfarm 서버에서 x2adm를 검색하면서 ASE 기다려야 :

단순히에 노력하고 있습니다 출력에서 숫자를 가져 와서 $ sessionid에 할당하면 섀도 잉 프로세스를 완전히 자동화 할 수 있습니다.

도움이 될 것입니다. 미리 감사드립니다.

+0

여기에 좋은 대답이 있습니다. http://stackoverflow.com/questions/23445175/qwinsta-serversomesrv-equivalent-in-powershell – sodawillow

+1

문제는 $ servers = "server1, server2, server3 , server4, server5 "로 변경하십시오. $ servers = "server1", "server2", "server3", "server4", "server5"이어야하므로 5 개의 요소가있는 배열을 얻을 수 있습니다. –

+0

댄에 동의합니다. 방금 문자열이 아닌 5 개의 개별 항목이 전달되었습니다. –

답변

2

대신 ConvertFrom-String을 사용하는 것이 좋습니다. 이런 식으로 데이터를 파싱하는 것은 대단합니다.

ConvertFrom-String $results[1] 

P1 : 
P2 : console 
P3 : Stephen 
P4 : 1 
P5 : Active 
P6 : 

그래서 우리 $SessionID 값 (P 번호를 사용하면이 cmdlet을 찾은 문자열에게주는 그냥 임의의 이름입니다) P4에서 찾을 수있다.

전체 명령은

$sessionID = convertfrom-string $results[1] | select -expand P4 

은 더 이상의 수정을 현재 코드로 작동 될 것입니다.

+0

ConvertFrom-String을 잊어 버렸습니다. 따라서 ConvertFrom-StringData를 사용하는 데 익숙합니다. – Matt

+0

작동하면 CFS가 마술과 구별됩니다. – FoxDeploy

+0

지연 작업으로 인해 유감스럽게 생각합니다. 지난 몇 주간이 작업이 정말 바빴습니다.이 솔루션은 자동화 작업을 완료하는 데 필요한 작업이었습니다. 나는 그것을 매우 감사한다. –

1

데이터 유형이 $servers인지 확인하십시오. 문자열이 아니고 문자열을 처리하는 방식이 아닌 문자열임을 확인할 수 있습니다.

PS C:\Users\matt> $servers = "server1, server2, server3, server4, server5" 
PS C:\Users\matt> $servers.GetType().FullName 

System.String 

당신은 당신이처럼 정의 할 필요가 about_arrays에서 배열의 기본 개념에 대한 자세한 내용을보실 수 있습니다.

$servers = "server1", "server2", "server3", "server4", "server5" 

한국인 qwinsta I have an answer that converts data from that into a PowerShell object로부터 출력 다루고있다. 링크 된 질문의 Op가 똑같은 명령을 사용하지 않았기 때문에 극단적 일 필요는 없습니다. 요점은 ConvertFrom-StringData이 강력한 cmdlet이라는 것입니다.

+0

사용자 이름이 숫자로 시작되면 배열을 반환합니다. 마지막 문제는 문자열로 변환 할 수없는 것 같습니다. [string] $ results = qwinsta.exe "$ 사용자 ID"/ 서버 : $ 서버 [문자열] $ 결과 = qwinsta.exe "$ 사용자 ID"/ 서버 : $ 서버 $ 결과 -join ' 을'그리고 유형 중 하나가 온다 다시 배열 또는 개체, 어떻게 관계없이 문자열을 반환 할 수 있습니까? –