Как запустить сценарий powershell в фоновом режиме и получить всплывающее уведомление? - PullRequest
1 голос
/ 26 февраля 2020

Ответы на на этот вопрос относятся к первой части моего вопроса.

К сожалению, когда я планирую задание таким образом, что окно powershell скрыто, любые уведомления о тостах, отправляемые моим сценарием, не показано. Сценарий показывает всплывающие уведомления с использованием этого сценария ( source ):

Add-Type -AssemblyName System.Windows.Forms 
$global:balloon = New-Object System.Windows.Forms.NotifyIcon
$path = (Get-Process -id $pid).Path
$balloon.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path) 
$balloon.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Warning 
$balloon.BalloonTipText = 'What do you think of this balloon tip?'
$balloon.BalloonTipTitle = "Attention $Env:USERNAME" 
$balloon.Visible = $true 
$balloon.ShowBalloonTip(5000)

Когда я планирую сценарий powershell так, чтобы он не был скрыт, показываются уведомления, но каждый раз, когда сценарий Я кратко вижу окно powershell.

Как мне запланировать задачу или задание, которое скрывает окно powershell, но показывает уведомления о тостах?

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Вы можете запустить его как задание в фоновом режиме, чтобы окно не всплывало, а ваше сообщение отображалось,

Примечание: Необходимо использовать любые переменные, объявленные вне Start-Job. как $using:variable. Если $ pid объявлен вне Start-Job, вы будете использовать $ используя: pid.

Start-Job -ScriptBlock { 
    Add-Type -AssemblyName System.Windows.Forms 
    $global:balloon = New-Object System.Windows.Forms.NotifyIcon
    $path = (Get-Process -id $using:pid).Path
    $balloon.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path) 
    $balloon.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Warning 
    $balloon.BalloonTipText = 'What do you think of this balloon tip?'
    $balloon.BalloonTipTitle = "Attention $Env:USERNAME" 
    $balloon.Visible = $true 
    $balloon.ShowBalloonTip(5000)
} | Wait-Job | Remove-Job

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

powershell -File myScript.ps1 -WindowStyle Hidden
1 голос
/ 26 февраля 2020

Powershell.exe - консольное приложение. Окно консоли автоматически создается ОС при запуске процесса. Таким образом, код powershell.exe, который обрабатывает -WindowStyle Hidden, выполняется после открытия окна консоли, поэтому флаг sh. Мне нравится использовать VB-скрипт для запуска PowerShell, чтобы обеспечить полностью скрытый опыт

In, скажем ps-run_hidden.vbs put

Set objShell = CreateObject("Wscript.Shell")
Set args = Wscript.Arguments
For Each arg In args
    objShell.Run("powershell -windowstyle hidden -executionpolicy bypass -noninteractive ""&"" ""'" & arg & "'"""),0
Next

Затем используйте его для запуска нужной команды, например, из Windows 'запланированных задач, например

wscript "C:\Path\To\ps-run_hidden.vbs" "C:\Other\Path\To\your-script.ps1"

Теперь вы можете запускать задачи, не видя мигающих windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...