none
оптимизация кода PS RRS feed

  • Вопрос

  • Помогите оптимизировать код.

    $server1 = "Isonoe"
    $server2 = "Iocaste"
    $server3 = "Erinome"
    $server4 = "Helene"
    $server5 = "Desdemona"
    $server6 = "Metis"
    $server7 = "Sinope"
    
    function Get-TSSessions
    {
    	param (
    		$ComputerName = "locahost"
    	)
    	
    	& "C:\Windows\sysnative\qwinsta.exe" /server:$ComputerName |
    	ForEach-Object {
    		$_.Trim() -replace "\s+", ","
    	} |
    	ConvertFrom-Csv
    }
    $g1 = Get-TSSessions -ComputerName "$server1" | ? { $_.СТАТУС -eq 'Активно' } | Select-Object ПОЛЬЗОВАТЕЛЬ, ID, СТАТУС, @{ n = "Server"; e = { $Server1 } }
    $g2 = Get-TSSessions -ComputerName "$server2" | ? { $_.СТАТУС -eq 'Активно' } | Select-Object ПОЛЬЗОВАТЕЛЬ, ID, СТАТУС, @{ n = "Server"; e = { $Server2 } }
    $g3 = Get-TSSessions -ComputerName "$server3" | ? { $_.СТАТУС -eq 'Активно' } | Select-Object ПОЛЬЗОВАТЕЛЬ, ID, СТАТУС, @{ n = "Server"; e = { $Server3 } }
    $g4 = Get-TSSessions -ComputerName "$server4" | ? { $_.СТАТУС -eq 'Активно' } | Select-Object ПОЛЬЗОВАТЕЛЬ, ID, СТАТУС, @{ n = "Server"; e = { $Server4 } }
    $g5 = Get-TSSessions -ComputerName "$server5" | ? { $_.СТАТУС -eq 'Активно' } | Select-Object ПОЛЬЗОВАТЕЛЬ, ID, СТАТУС, @{ n = "Server"; e = { $Server5 } }
    $g6 = Get-TSSessions -ComputerName "$server6" | ? { $_.СТАТУС -eq 'Активно' } | Select-Object ПОЛЬЗОВАТЕЛЬ, ID, СТАТУС, @{ n = "Server"; e = { $Server6 } }
    $g7 = Get-TSSessions -ComputerName "$server7" | ? { $_.СТАТУС -eq 'Активно' } | Select-Object ПОЛЬЗОВАТЕЛЬ, ID, СТАТУС, @{ n = "Server"; e = { $Server7 } }
    
    function get-prod2 ($filter = $null)
    {
    	
    	$statusBar2.Text = "Getting data..."
    	$array3 = New-Object System.Collections.ArrayList
    	$Script:UseFilter = $false
    	$Script:Getp = @($g1 + $g2 + $g3 + $g4 + $g5 + $g6 + $g7)
    	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
    	
    }
    

    Ну очень большая писанина ... может как-то это можно сократить?! 

    25 января 2016 г. 13:38

Ответы

  • $servers = "Isonoe","Iocaste","Erinome","Helene","Desdemona","Metis","Sinope"
    $g = $servers | Foreach {
    	$s = $_
    	Get-TSSessions -ComputerName $s | ? { $_.СТАТУС -eq 'Активно' } | Select-Object ПОЛЬЗОВАТЕЛЬ, ID, СТАТУС, @{ n = "Server"; e = { $s } }
    }

    • Помечено в качестве ответа butunin 25 января 2016 г. 14:07
    25 января 2016 г. 13:57
    Отвечающий

Все ответы

  • Вы задачу опишите, что должен делать скрипт, а также версию системы и Powershell.

    Сазонов Илья

    https://isazonov.wordpress.com/

    25 января 2016 г. 13:41
    Модератор
  • Да, спасибо за пояснение. 
    1. Есть сервера в кол-во 7 штук, на них заходят (терминальные) пользователи. 
    2. Через qwinsta я беру значение подключенных пользователей + добавляю столбец сервер (server)
    3. создаю массив  datagrid  куда включаю все сервера G1+G2 +... G7 с возможностью фильтрации по столбцу ПОЛЬЗОВАТЕЛЬ и выбора строки. 
    4. Через mstsc подключаюсь в shadow сессии этих юзеров.

    Меня тут смещают переменные $G1 много написано, может как-то можно сократить? 

    25 января 2016 г. 13:55
  • $servers = "Isonoe","Iocaste","Erinome","Helene","Desdemona","Metis","Sinope"
    $g = $servers | Foreach {
    	$s = $_
    	Get-TSSessions -ComputerName $s | ? { $_.СТАТУС -eq 'Активно' } | Select-Object ПОЛЬЗОВАТЕЛЬ, ID, СТАТУС, @{ n = "Server"; e = { $s } }
    }

    • Помечено в качестве ответа butunin 25 января 2016 г. 14:07
    25 января 2016 г. 13:57
    Отвечающий