Многие начинающие админы после появления в своей сети машин с ОС Windows 7 задумались над тем как отправлять на них сообщения (оповещения).
В Windows XP была удобная хотя и очень привередливая "служба отправки сообщений" эта служба позволяла отправлять сообщения всем ПК в домене net sent * "Текст сообщения!" Но были значительные ограничения на количество знаков, которые можно было написать в сообщении. Очень часто сообщения не влезали, но это не самое страшное: Сообщения частенько не доходили из-за того, что у кого то отключена служба у кого то, она просто остановилась и если человек заблокировал ПК он не увидеть сообщение, до разблокировки своей станции.
В результате поисков родилось следующее решение, данной проблемы. Будем использовать POWERSHELL. Единственным его недостатком яв-ся, то что сообщение сможет отправить только администраотр.
отправка сообщений на Windows 7.ps1
Для работы командлета Get-QadComputer, необходимо установить комадлеты от Quest Software для работы с AD
PHP код:
#параметры
param (
$message = (Read-Host -Prompt "Введите текст сообщения для отправки: ")
)
$cComps = @()
$OnlinePC = @()
$OfflinePC = @()
# Создаем переменную процесса с параметрами
$Proc = "msg.exe -v -time:90000 * $message"
# Получение Всех ПК из АД
$cComps = GET-QADcomputer | % { $_.Name }
Write-Host "Сheck the availability of PC, please wait...`t" -NoNewline
$cComps | Sort-Object name | % {
$name = $_
if (test-connection -computer $name -quiet -Count 1 ) { $OnlinePC += $name}
else { if (test-connection -computer $name -quiet) {$OnlinePC += $name} $OfflinePC += $name}
}
Write-Host "Done!"
Write-Host "ON line PC:"$OnlinePC.Count
Write-Host "OFF line PC:"$OfflinePC.Count -ForegroundColor red
$OnlinePC | % {
([WMICLASS]"\\$_\Root\CimV2:Win32_Process").create($Proc) | Out-Null
if ($?) {"Сообщение на $_ отправлено"} else {Write-Host "На $_ проблемы с отправкой сообщения" -BackgroundColor Black -ForegroundColor Red}
}
$OfflinePC | %{
Write-Host $_ "OFF Line" -BackgroundColor Red -ForegroundColor Black
}
Вот отдельно представляю функцию Send-NetMessage
для удовства можно поместить ее в профиль powershell`a и слегкостью пользоваться...
PHP код:
<#
.SYNOPSIS
Отправка сообщений на ПК Win 7, Vista, XP. (по типу Net Send)
.PARAMETER message
Текст сообщения для отправки.
.PARAMETER name
Имя ПК для отправки.
.INPUTS
Необходимо указать параметры "Message", "Name".
.EXAMPLE
PS> Send-Messege -Name comp-01 -Message "Текст сообщения"
.NOTES
Author: Yakel Vitaly
#>
function Send-NetMessage {
param (
$message = (Read-Host -Prompt "Введите текст сообщения для отправки: "),
$name = (Read-Host -Prompt "Введите Имя ПК: ")
)
# Создаем переменную процесса с параметрами
$Proc = "msg.exe -v -time:90000 * $message"
([WMICLASS]"\\$name\Root\CimV2:Win32_Process").create($Proc) | Out-Null
if ($?) {"Сообщение на $name отправлено"} else {Write-Host "На $name
проблемы с отправкой сообщения" -BackgroundColor Black -ForegroundColor Red}
}