PDA

Показать полную графическую версию : не работает фильтр в qwinsta


butunin@vk
25-01-2016, 10:30
не могу понять в чем дело. не срабатывает select-object

PS C:\Users\b> qwinsta /server:isonoe
СЕАНС ПОЛЬЗОВАТЕЛЬ ID СТАТУС ТИП УСТР-ВО
services 0 Диск
console 1 Подключено
rdp-tcp#4 lisv 4 Активно
rdp-tcp#7 prana 5 Активно
rdp-tcp#6 nev 6 Активно
rdp-tcp#9 smtv 7 Активно
rdp-tcp#13 vaiasv 8 Активно
rdp-tcp#11 burka 9 Активно
rdp-tcp#14 efrata 10 Активно
rdp-tcp#15 shoaev 12 Активно
rdp-tcp#20 Miamn 13 Активно
rdp-tcp#23 arhiev 14 Активно
rdp-tcp#24 movaa 15 Активно
rdp-tcp#25 polana 16 Активно
rdp-tcp#26 stanv 17 Активно
rdp-tcp#27 laev 20 Активно
rdp-tcp#37 suvai 21 Активно
31c5ce94259d4... 65536 Прием
rdp-tcp 65537 Прием


Выполняю селект

PS C:\Users\buu> qwinsta /server:isonoe | Select-Object СЕАНС,ПОЛЬЗОВАТЕЛЬ,ID

СЕАНС ПОЛЬЗОВАТЕЛЬ ID
----- ------------ --

Kazun
25-01-2016, 10:39
qwinsta /server:isonoe | foreach {$_.trim() -replace "\s+",","} | ConvertFrom-Csv | Select-Object СЕАНС,ПОЛЬЗОВАТЕЛЬ,ID

butunin@vk
25-01-2016, 10:41
qwinsta /server:isonoe | foreach {$_.trim() -replace "\s+",","} | ConvertFrom-Csv | Select-Object СЕАНС,ПОЛЬЗОВАТЕЛЬ,ID »

Спасибо! Можете объяснить почему не сработал в 3 словах ?

Kazun
25-01-2016, 10:43
Это текст, а не объект.

butunin@vk
25-01-2016, 11:30
Это текст, а не объект. »

Ага это понятно ... написал процедуру
function Get-TSSessions
{
param (
$ComputerName = $com3
)

qwinsta.exe /server:$ComputerName |
ForEach-Object {
$_.Trim() -replace "\s+", ","
} |
ConvertFrom-Csv
}


Ps Не удается выполнить команду из-за следующей ошибки: Не удается найти указанный файл.
не может найти фаил qwinsta.exe задал явные параметры start-process -filepath c:\windows\system32\qwinsta.exe такая же ошибка ...

Kazun
25-01-2016, 11:37
qwinsta - из x86 процесса должна запускаться по пути: C:\Windows\sysnative\qwinsta.exe

butunin@vk
25-01-2016, 12:03
qwinsta - из x86 процесса должна запускаться по пути: C:\Windows\sysnative\qwinsta.exe »

Kazun, помогите еще раз с gred не пойму в чем проблема , в логике не вижу проблемы.


function Get-TSSessions
{
param (
$ComputerName = "locahost"
)

Start-Process -FilePath "C:\Windows\sysnative\qwinsta.exe" /server:$ComputerName |
ForEach-Object {
$_.Trim() -replace "\s+", ","
} |
ConvertFrom-Csv | Select-Object СЕАНС, ПОЛЬЗОВАТЕЛЬ, ID
}

function get-prod2
{

$array3 = New-Object System.Collections.ArrayList
$Script:UseFilter = $false
$Script:Getp = @(Get-TSSessions -ComputerName Erinome)
if ($filter)
{
$Script:fu = @($Getp | Where { $_.ПОЛЬЗОВАТЕЛЬ -match $filter })
$array3.AddRange($fu)
$Script:UseFilter = $true
}
else
{
$array3.AddRange($Getp)
}
$datagrid3.DataSource = $array3
$updated = Get-Date
$com = "5"
$statusBar2.text = "Последние обновление было {0} следующий через {1} минут" -f $updated, $com

}



Не отдает в Gred
Пишу в Powershell Studio Sapien

Kazun
25-01-2016, 12:33
Start-Process -FilePath "C:\Windows\sysnative\qwinsta.exe" /server:$ComputerName заменить на :

& "C:\Windows\sysnative\qwinsta.exe" /server:$ComputerName

butunin@vk
25-01-2016, 13:06
Start-Process -FilePath "C:\Windows\sysnative\qwinsta.exe" /server:$ComputerName заменить на : »

о гуд! Спасибо, ну и побочный вопрос , могу ли как то я добавить столбец свой?
например:

PS C:\Users\buu> qwinsta /server:isonoe | foreach {$_.trim() -replace "\s+",","} | ConvertFrom-Csv | Select-Objec
t ПОЛЬЗОВАТЕЛЬ,ID

ПОЛЬЗОВАТЕЛЬ ID
------------ --
0 Диск
1 Подключено
lisinaov 4
prokhorovana 5
negadovpv 6
smv 7
vasyaninasv 8
bunka 9
efr 10
sheaei 11
belousovaev 12




И сюда добавить новый столбец (которого нет qwinsta) это имя сервера которое берется из /server:isonoe , то есть формально нам надо чтобы получилось следующие.


PS C:\Users\buu> qwinsta /server:isonoe | foreach {$_.trim() -replace "\s+",","} | ConvertFrom-Csv | Select-Objec
t ПОЛЬЗОВАТЕЛЬ,ID

ПОЛЬЗОВАТЕЛЬ ID server
------------ -- --
0 Диск isonoe
1 Подключено isonoe
lisinaov 4 isonoe
prokhorovana 5 isonoe
negadovpv 6 isonoe
smv 7 isonoe
vasyaninasv 8 isonoe
bunka 9 isonoe
efr 10 isonoe
sheaei 11 isonoe
belousovaev 12 isonoe

Kazun
25-01-2016, 13:09
Select-Object ПОЛЬЗОВАТЕЛЬ,ID,@{n="Server";e={$Server}}

butunin@vk
25-01-2016, 13:18
Select-Object ПОЛЬЗОВАТЕЛЬ,ID,@{n="Server";e={$Server}} »

Так тут вроде все понятно, значение не отдает ...


PS C:\Users\bu> qwinsta /Server:isonoe | foreach {$_.trim() -replace "\s+",","} | ConvertFrom-Csv | Select-Objec
t ПОЛЬЗОВАТЕЛЬ,ID,@{n="Server";e={$Server}}

ПОЛЬЗОВАТЕЛЬ ID Server
------------ -- ------
0 Диск
1 Подключено
lisi 4
provana 5
ne 6
sm 7
vasasv 8

Kazun
25-01-2016, 13:19
$Server - определить переменную в коде.

butunin@vk
25-01-2016, 13:20
$Server - определить переменную в коде. »
Ага, тут я уже понял... а он не может ее брать с имени сервера из qwinsta /Server:isonoe

Kazun
25-01-2016, 13:22
Сделать глобальную перменную $Server и везде ее подставлять.

qwinsta /Server:$Server

butunin@vk
25-01-2016, 14:04
Сделать глобальную перменную $Server и везде ее подставлять. »

эххх жалко фокус не удался ... я вообщем хотел в datagrid запихнуть массив с возможностью фильтрации и каких либо столбцам действий по нажатию. В datagrid вы помогли мне засунуть данные НО фильтрация корректно не работает.
Может у вас есть какие-то наработки или идеи как оптимизировать или возможно я что-то делаю не верно.

Суть следующая. Есть ферма серверов на которые подключаются пользователи, я хотел собрать все подключение в один массив и подключаться в shadow сессии либо отключаться их через формку datagrid
через qwinsta я получаю ID логин и сервер который вы помогли мне запихнуть в массив, но вот фильтрация тут не работает , и понятно КАК МНЕ КАЖЕТСЯ почему. Возможно ли это реализовать через БД? То есть создать BD куда запихивать данные которые отдает qwinsta и через PS уже вытаскивать их?


function get-prod2
{

$statusBar2.Text = "Getting data..."
$array3 = New-Object System.Collections.ArrayList
$Script:UseFilter = $false
$Script:Getp = @($g1)
if ($filter)
{
$Script:fu = @($Getp | Where { $_.ID -match $filter })
$array3.AddRange($fu)
$Script:UseFilter = $true
}
else
{
$array3.AddRange($Getp)
}
$datagrid3.DataSource = $array3
$updated = Get-Date
$com = "5"
$statusBar2.text = "Последние обновление было {0} следующий через {1} минут" -f $updated, $com

}

$RichTextbox1.Add_TextChanged({
Get-Prod2 $RichTextbox1.Text
})

Kazun
25-01-2016, 14:42
function get-prod2($filter=$null)




© OSzone.net 2001-2012