jar8695 Ответов: 1

Форма Powershell для списка сетевых машин


Всем привет,

Я пытаюсь заставить сообщение сценария powershell появиться на компьютерах некоторых пользователей в сети, чтобы предупредить их о завершении работы, циклически просматривая CSV-файл с именами машин. У меня есть сценарий powershell, созданный для отображения подходящего сообщения со значком предупреждения, и я обнаружил, что для форматирования всплывающего окна определенным образом мне пришлось использовать "форму", а не всплывающее окно сообщений по умолчанию. Я также обнаружил, что мне пришлось использовать графическое поле для отображения значка предупреждения, так как приведенный ниже код не будет работать

$WarningIcon = New-Object ([System.Окна.MessageBoxImage]::Предупреждение)
$Form.Controls.Добавить($WarningIcon)

Я также могу перебирать CSV-файлы имен машин и пытаться отправить форму в виде "msg" на каждую пользовательскую машину, но пока это не сработает.

Что я уже пробовал:

Я много искал в интернете, но до сих пор не могу найти способ отправить форму в список имен машин, извлеченных из CSV. До сих пор я пытался установить форму (сценарий ниже) в переменную $msg, а также пытался иметь форму в другом файле и ссылаться на этот файл в переменной $msg, но это не работает. Также попробовал иметь форму непосредственно после "$ID" в цикле ниже и перед скобкой закрытия цикла.

Вот сценарий цикла msg Powershell и сценарий Формы, где я попытался иметь сценарий Формы в другом файле, на который можно было бы ссылаться. Форма показывает именно то, что я хочу отобразить. Но как я уже сказал, ничего из того, что я пробовал до сих пор, не работает. Можно ли это сделать, пожалуйста? Заранее спасибо

$msg = C:\PShell\Form.txt
$csv = Import-csv "C:\PShell\Machines.csv"

foreach($line in $csv)
{
  $ID = $line.("LPID")
  #Echo "Laptop ID is $ID"
  msg $ID $msg
}


#FORM Script
Add-Type -AssemblyName System.Windows.Forms
$Form = New-Object system.Windows.Forms.Form
$Form.Width = 700
$Form.Height = 400
$Form.BackColor = "#DCDCDC"

$Form.Text = "System Restart Alert"

$Font = New-Object System.Drawing.Font("Ariel",30, 
   [System.Drawing.FontStyle]::Bold::Underline)
$FontB = New-Object System.Drawing.Font("Ariel",14, 
   [System.Drawing.FontStyle]::Bold)

$Picture = (get-item ("C:\PShell\Exclamation.jpg"))
$img = [System.Drawing.Image]::Fromfile($Picture)
$pictureBox = new-object Windows.Forms.PictureBox
$pictureBox.Location = New-object System.Drawing.Size(160,30)
$pictureBox.Height = "100"
$pictureBox.Image = $img
$Form.controls.add($pictureBox)

$Label = New-Object System.Windows.Forms.Label
$Label.Location = "260,30"
$Label.Font = $Font
$Label.ForeColor = "Red"
$Label.Text = "WARNING!"
$Label.AutoSize = $True
$Form.Controls.Add($Label)

$LabelB = New-Object System.Windows.Forms.Label
$LabelB.Location = "100,130"
$LabelB.Font = $FontB
$LabelB.Text = "Due to essential maintenance system requires rebooting"
$LabelB.AutoSize = $True
$Form.Controls.Add($LabelB)

$LabelC = New-Object System.Windows.Forms.Label
$LabelC.Location = "100,160"
$LabelC.Font = $FontB
$LabelC.Text = "Please save all work immediately"
$LabelC.AutoSize = $True
$Form.Controls.Add($LabelC)

$okButton = New-Object System.Windows.Forms.Button
$okButton.Location = "300,280"
$okButton.Font = "$FontB"
$okButton.Size = "85,28"
$okButton.Text = "Okay"

$Form.Controls.Add($okButton)
$okButton.Add_Click = ({$Form.Close()})
$Form.ShowDialog()

1 Ответов

Рейтинг:
2

Dave Kreskowiak

МММ...вы не можете отправить форму на компьютер пользователя и заставить ее появиться на его рабочем столе. Это вообще не сработает. Вы даже не можете отправить изображение формы.


jar8695

Окей. Спасибо. Можно ли тогда отформатировать всплывающее сообщение? Я знаю, что могу создать один из них с предупреждающим восклицательным треугольником, но могу ли я увеличить размер всплывающего окна и текста, пожалуйста?

Dave Kreskowiak

Если вы не напишете приложение и не установите его на каждую машину, вы не сможете отобразить сообщение на удаленных машинах. Это приложение будет работать из ключа запуска реестра при любом входе пользователя в систему. Затем он запускает сервер и прослушивает сообщения из центрального приложения, которое вы используете. Затем вы можете отправить любое сообщение, которое хотите, и заставить клиентское приложение отображать его так, как вы хотите.

Если вы подумаете об этом, то поймете, что удаленное взаимодействие с рабочим столом пользователя представляет собой огромный риск для безопасности.

jar8695

Ну и ну! Я полагаю. Наверное, лучше подумать о чем-нибудь другом. В любом случае спасибо