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)