2016-06-30 4 views
1

У меня есть небольшой скрипт, который поможет пользователям в нашей среде затенять сеансы от других пользователей на объектах (я работаю в корпоративном офисе, корпоративным пользователям нужна возможность затенять сеансы других пользователей вдоль различных участков)powershell - захватить определенную информацию из массива issue

Так что я получил это:

$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 аза ждать, пока мы ищем x2adm на RDSfarm серверах

Пользователь найден в server5

RDP-TCP # 0 x2adm 2 Активный

Session ID является:

Я пытаюсь просто хватайте число на выходе и назначьте его $ 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 будет найдена в p4 (P # это просто произвольное имя, которое эта команда дает строки, которые он находит).

Полная команда будет

$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 - это мощный командлет.

+0

Он возвращает массив, когда имя пользователя начинается с числа, это последняя проблема, с которой я сталкиваюсь, я не могу преобразовать ее в строку, я попытался: [string []] $ results = & qwinsta.exe "$ Идентификатор_пользователя"/сервер: $ сервер [строка] $ результаты = & qwinsta.exe "$ Идентификатор_пользователя"/сервер: $ сервер $ результаты -join '' и тип либо приходит back array или object, как я могу заставить его возвращать строку независимо? –

 Смежные вопросы

  • Нет связанных вопросов^_^