在 PS1 中,这有效
class pxInitFailureMessage {
static [void] Send ([int32]$processID, [String]$title, [string]$message) {
Add-Type -AssemblyName:System.Windows.Forms
Add-Type -AssemblyName:System.Drawing
$balloonTip = New-Object System.Windows.Forms.NotifyIcon
$balloonTip.icon = [system.drawing.icon]::ExtractAssociatedIcon($(Get-Process -id:$processID | Select-Object -expandProperty:Path))
$balloonTip.balloonTipIcon = 'Error'
$balloonTip.balloonTipTitle = $title
$balloonTip.balloonTipText = $message
$balloonTip.visible = $true
$balloonTip.ShowBalloonTip(0)
$balloonTip.Dispose
}
}
[pxInitFailureMessage]::Send($pid, 'Title', 'Message is just some extra text')
但是,将该类移动到 library.PSM1 文件中,这在 PS1
Using module '\\Mac\iCloud Drive\Px Tools 4.#\Dev 4.0\#Spikes\Windows7\library.psm1'
[pxInitFailureMessage]::Send($pid, 'Title', 'Message is just some extra text')
它在 ISE 中有效,但在从快捷方式运行时不在控制台中。我明白了Unable to find type [system.drawing.icon].
显然第一个 Add-Type 有效,我在 New-Object 上没有错误。那么为什么第二种加载失败呢?我还尝试将两个 Add-Type 行移出类,并移入模块文件的根目录,结果相同。起作用的是将这些行添加到 PS1 using module
(必须是第一个非标记行)和呼叫之间。那行得通,但是你没有一个自包含的类,这似乎有点糟糕。我在这里有什么误解?
如何创建一个使用 .NET 类型的自包含类并从模块文件中使用它?