【发布时间】:2019-10-29 09:35:17
【问题描述】:
我正在尝试构建一个由计划任务启动的消息传递系统,并最终允许我在触发软件更新作业之前向用户发送消息。
我的 UserMessage 脚本基本上可以工作...
class PxMessage {
static [PxMessage] $instance
static [windows.forms.notifyIcon] $balloon
static [drawing.icon] $defaultIcon
static [PxMessage] GetInstance($processID) {
if ([PxMessage]::instance -eq $null) {
[PxMessage]::instance = [PxMessage]::new()
#[void][reflection.assembly]::LoadWithPartialName('Windows.Forms')
[PxMessage]::balloon = [windows.forms.notifyIcon]::New()
[PxMessage]::defaultIcon = [drawing.icon]::ExtractAssociatedIcon($(Get-Process -id:$processID | Select-Object -expandProperty:path))
}
return [PxMessage]::instance
}
[Void] SendMessage ([String]$title, [String]$message, [String]$messageIcon, [String]$icon) {
if ($icon) {
[PxMessage]::balloon.icon = [drawing.icon]::ExtractAssociatedIcon($icon) # must be a local path
} else {
[PxMessage]::balloon.icon = [PxMessage]::defaultIcon
}
[PxMessage]::balloon.balloonTipTitle = $title
[PxMessage]::balloon.balloonTipText = $message
[PxMessage]::balloon.balloonTipIcon = $messageIcon
[PxMessage]::balloon.visible = $true
[PxMessage]::balloon.ShowBalloonTip(0)
[void][PxMessage]::balloon.Dispose
}
}
$message = [PxMessage]::GetInstance($pid)
$message.SendMessage('Title', 'Message', 'Info', 'C:\PxIcon.ico')
这在 ISE 中运行时有效,当我使用 & "\\Mac\iCloud Drive\Px Tools\Dev 4.0\#Spikes\ScheduledTasks\UserMessage.ps1" 从另一个脚本在控制台中运行它时有效。
但是,当我设置这样的计划任务时......
$runTime = (get-Date) + (New-TimeSpan -seconds:1)
$action = New-ScheduledTaskAction -execute:'powershell.exe' -argument:'-NonInteractive -NoLogo -NoProfile -noExit -executionPolicy Bypass -File "\\Mac\iCloud Drive\Px Tools\Dev 4.0\#Spikes\ScheduledTasks\UserMessage_class.ps1"'
$trigger = New-ScheduledTaskTrigger -once -at:$runTime
$settings = New-ScheduledTaskSettingsSet
$task = New-ScheduledTask -action:$action -trigger:$trigger -settings:$settings
Register-ScheduledTask -taskName:'Px Tools' -inputObject:$task
我收到错误 Unable to find type [Windows.Forms.NotifyIcon]. 是否存在与计划任务的交互导致加载程序集出现问题?
我知道[reflection.assembly]::LoadWithPartialName 已被弃用,我发现this 列出了一些选项。我试过了
[reflection.assembly]::LoadFrom("C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll"),结果相同。
【问题讨论】:
标签: powershell scheduled-tasks