Powershell — как отобразить сообщение и сохранить введенные пользователем данные в файл журнала

Powershell — как отобразить сообщение и сохранить введенные пользователем данные в файл журнала

Я провел большую часть дня, исследуя лучший и самый простой способ сделать это, и, похоже, его нет. Я нашел кое-какие кусочки, но мне не удалось заставить их работать. Я просто хочу отобразить всплывающее сообщение для пользователя, запустив скрипт Powershell. Я хотел бы, чтобы скрипт делал следующее:

1. The popup would give an action for input by the user, 
2. The message will tell them their computer will be restarted to complete a Windows 1809 upgrade, 
3. The user will click ok and the input, along with the username and machine name will be sent to a log file. 
4. The script would have a timer on it that will restart the computer within 30 minutes whether the input is given or not. 

Код ниже делает то, что мне нужно, за исключением таймера, но не выводит всплывающее сообщение пользователю. Он просто выводит сообщение в консоли Powershell. Как мне заставить его делать то же самое, но во всплывающем сообщении?

$HostName = $env:COMPUTERNAME
$PatchLocation = "c:\Temp\"
$LogFile = "responses.log"
$LogPath = $PatchLocation + $LogFile
$date = Get-Date

$response = Invoke-Command -ComputerName $HostName -ScriptBlock{ Read-Host "Your computer will be restarted in 30 minutes. Please save your work. Type 'Agree' If you have saved your work"}

"Response for $HostName is $response - $date"|Out-File -FilePath $LogPath -Append

решение1

Взгляни наhttps://jdhitsolutions.com/blog/powershell/2976/powershell-popup/

На недавнем саммите PowerShell я представил сессию о добавлении графических элементов в ваш скрипт без необходимости использования WinForms или WPF. Одним из продемонстрированных мной элементов является графическое всплывающее окно, которое может либо потребовать от пользователя нажать кнопку, либо автоматически закрыться по истечении заданного периода времени. Если это звучит знакомо, то да, это наш старый друг VBScript и метод Popup объекта Wscript.Shell. Поскольку PowerShell может создавать и использовать объекты COM, почему бы не воспользоваться этим?

$wshell = New-Object -ComObject Wscript.Shell -ErrorAction Stop
$wshell.Popup("Are you looking at me?",0,"Hey!",48+4)

решение2

Отдаю должное Гансу Хуберту Фогтсу за код, который обеспечивает всплывающее сообщение. Он обеспечивает всплывающее окно, однако мне нужно было, чтобы скрипт выводился в файл журнала. Я изменил код, чтобы сделать это. Он ниже.

#https://jdhitsolutions.com/blog/powershell/2976/powershell-popup/
#For reference

$HostName = $env:COMPUTERNAME
$PatchLocation = "c:\Temp\"
$LogFile = "responses.log"
$LogPath = $PatchLocation + $LogFile
$date = Get-Date

$wshell = New-Object -ComObject Wscript.Shell -ErrorAction Stop 
$result = $wshell.Popup("Your Computer will be Restarted in 30 Minutes",30,"Hey!",48+4)

"Response for $HostName is $result - $date"|Out-File -FilePath $LogPath -Append

Связанный контент