Powershell Скрипт оповещения терминал юзеров

Jan 10, 2013 19:36

Powershell становится все лучше и лучше, да в нем до сих пор не все интегрировано, очень смеялся на офф ответ мелкомягких про "Как копировать файлы с правами", но это уже полноценная, нормальная среда, на которой изредка приятно покодить.

Наваял скриптик полуавтоматического оповещения юзеров на терминалках для нашего саппорта, чтобы они в один клик могли без косяков выгонять/оповещать пользователей,
если у кого есть улучшения, велкам.


#Именно автоматизированное оповещения, скрипт с произвольным текстом сообщения, передаваемго параметром при вызове - другая песня
# (с) termsl 2013
#Ver. 1
#
# Собственно имена серверов:
$snames=(1,"MSKSRV-01-TS"),
        (1,"MSKSRV-02-TS"),
        (1,"MSKSRV-03-TS"),
        (1,"MSKSRV-04-TS"),
        (1,"MSKSRV-05-TS"),
        (1,"MSKSRV-06-TS"),
        (1,"MSKSRV-07-TS"),
        (1,"MSKSRV-08-TS"),
        (1,"MSKSRV-09-TS"),
        (1,"SPBSRV-10-TS")
#Предопределенные сообщения
$smess="Извиняюсь, тест",
        "Перезагрузка сервера через 5 минут, сохранитесь и завершите сеанс.",
        "Перезагрузка сервера через 15 минут, сохранитесь и завершите сеанс.",
        "Можно продолжать работать",
        "Закройте все приложения 1С",
        "Закройте 1С УТ",
        "Можно работать в 1С",
"С новым годом, все свободны)))"
function go-message($omes)
{
    Write-Host "------------------------------------"
    Write-Host "Выводимое сообщение :<$($smess[$($omes-1)])>"
    Write-Host "------------------------------------"

for ($i=0; $i -lt $snames.count;$i++) {
        if ($snames[$i][0] -gt 0)
        {
        $cmd = "msg.exe * /SERVER:$($snames[$i][1]) $($smess[$($omes-1)])"
        Write-Host "$($snames[$i][1]) - [Отправлено]"
       # Write-Host $cmd
        Invoke-Expression $cmd
        }
      }
}
function sel-desel ($action)
    {
    if ($action -eq 1 -or $action -eq 0)
        {
        for ($i=0; $i -lt $snames.count;$i++
            {
                $snames[$i][0]=$action
            }
        }
    }
function print-messages($txt)
    {
    cls
    $txtm="Выбранные серверы:"
    for ($i=0; $i -lt $snames.count;$i++
    {
        if ($snames[$($i)][0] -gt 0)
        {
            $txtm+=" $($snames[$($i)][1])"
        }
    }
    Write-Host  $txtm
    Write-Hos
    Write-Host "Выберите вариант сообщения:`n"
    for ($i=0; $i -lt $smess.count;$i++)
        {
            Write-Host "$($i+1):$($smess[$i])"
        }
    Write-Hos
    Write-Host "Цифры- выбор, Enter - продолжить, Q-выход, Буквы - возврат к выбору серверов"
    }
function print-conf($txt)
    {
    cls
    Write-Host "На сервера:"
        for ($i=0; $i -lt $snames.count;$i++
            {
                if ($snames[$i][0] -gt 0) { Write-Host $snames[$i][1]}
            }
    Write-Host "-----------"
    Write-Host
    Write-Host "Сообщение:"
    Write-Hos
    Write-Host $smess[$txt-1]
    Write-Host
    Write-Host "-----------"
    Write-Host "Уверен, рассылаем? (Y/N) Q-выход"
    }
function print-servers($txt)
    {
    $ret=0;
    cls
    if([bool]($txt -as [int] -is [int])
    {
        $num=[int]$txt
        if ($num -le $snames.Count -and $num -gt 0)
        {
            If ($snames[$num-1][0] -eq 0)
            {
                $snames[$num-1][0]=1
            } else
            {
                $snames[$num-1][0]=0
            }
        }
    } else
    {
        switch ([string]$txt)
        {
            "+" { sel-desel(1) }
            "-" { sel-desel(0) }
        }
    }
    for ($i=0; $i -lt $snames.count;$i++
    {
    if ($snames[$i][0] -gt 0
        {
        $ch="X"
        } else
        {
        $ch="_"
        }
    Write-host "$($i+1)[$($ch)]: $($snames[$i][1])"
    }
    Write-hos
    Write-host "`"+`" Выбрать все серверы, `"-`" Убрать все серверы, цифры - выбор, Q-выход, ENTER- продолжение"
     for ($i=0; $i -lt $snames.count;$i++
            {
                if ($snames[$i][0] -gt 0) { $ret=2}
            }
    return $ret
    }
$lcode=0
$ret=0
$readh=""
$ext=0
while ($ext -lt 5)
{
    switch  ($ext)
    {
    0   {
        $lcode=print-servers($readh)
        }
    1   {
        $lcode=print-messages($readh)
        }
    2   {
        $lcode=print-conf($mess)
        }
    3   {
        go-message($mess)
        }
    }

$readh=Read-Host
    if ($readh.Length -eq 0
    {
      switch  ([int]$ext)
      {
        0 {
            if ($lcode -ge 2)
                {$ext++}
          }
        3 {
            $ext=2
          }

}
    } else
    {
        if ($readh -eq "q" -or $readh -eq "Q")
        {
            $ext=10;
        } else
        {

switch  ($ext)
            {
                1   {
                    if(![bool]($readh -as [int] -is [int]))
                        {
                            $ext=
                        } else
                        {
                            if ([int]$readh -le $smess.Count -and [int]$readh -gt 0)
                            {
                            $mess=[int]$readh
                            $ext++
                            }
                        }
                    }
                2   {
                        if ($readh -eq "y" -or $readh -eq "Y") { $ext++ }
                        if ($readh -eq "n" -or $readh -eq "N") { $ext-- }
                    }
                3   {
                           $ext=1
                    }
            }
        }

}

#End
----------------------------

Для танкистов 1- скрипт для Powershell - скопировать текст- создать файл с расширением .ps1 Пуск-Выполнить-Powershell 
Для танкистов 2 - если ранее на компьютере не выполняли скрипты powershell - перед запуском скрипта выполнить команду:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
(нажать Y и enter)

powershell

Previous post Next post
Up