问题描述
给予
UserMessage_class_script.ps1
Using module ".\UserMessage_class_script.psm1"
$processIcon = [System.Drawing.Icon]::ExtractAssociatedIcon($(Get-Process -id:$PID | Select-Object -expandProperty:path))
$message = [PxMessage]::GetInstance($processIcon)
$message.SendMessage('Title',"$(Get-Date)",'Info')
UserMessage_class_script.psm1
class PxMessage {
static [PxMessage] $instance
static [Windows.Forms.NotifyIcon]$balloon
static [System.Drawing.icon]$defaultIcon
static [PxMessage] GetInstance($processIcon) {
if ([PxMessage]::instance -eq $null) {
[PxMessage]::instance = [PxMessage]::new()
[PxMessage]::balloon = [Windows.Forms.NotifyIcon]::new()
[PxMessage]::defaultIcon = $processIcon
}
return [PxMessage]::instance
}
[Void] SendMessage ([String]$title,[String]$message,[String]$messageIcon) {
[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)
[PxMessage]::balloon.Dispose
}
}
UserMessage_class_script.psd1
@{
RootModule = 'UserMessage_class_script.psm1'
GUID = '0e53745b-0b05-4bd3-8af2-f1595bca0167'
RequiredAssemblies = @('System.Drawing','System.Windows.Forms')
}
然后从快捷方式启动UserMessage_class_script.ps1,而不是在ISE中加载和运行它,我的理解是PSD1文件应预加载所需的程序集,以便在Using module
将PSM1文件加载到PS1中的情况下在PSM1文件中,该类的类型属性不会引发错误。但是,那不是我所看到的。两个属性行均引发Unable to find type
错误。
现在,如果我添加
using assembly System.Drawing
using assembly System.Windows.Forms
在PS1文件中的“使用模块”行之前,所有步骤均有效。哪种方式有意义,当加载PSM1文件并编译类时,就可以使用程序集,并且类型可用。 here对此进行了很好的解释。
但是这种方法使PSM1文件依赖于准备PS1文件中的环境,我认为我不需要这样做。因此,我认为我在使用清单文件时做错了什么,尽管在我的一生中我无法弄清楚是什么。
如果需要的话,主脚本中的两条Using汇编行确实不是问题。但是,如果可以使PSM1(或带有清单的PSM1)自立,那会更好。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)