Я хочу запустить фоновое задание в моем PowerShell-Script, чтобы прочитать все значки файлов из определенной папки в [System.Windows.Forms.ImageList].
$JobScript = {
param([String] $Path)
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$Files = [System.IO.DirectoryInfo]::new($Path).GetFiles()
[System.Windows.Forms.ImageList] $ImgList = [System.Windows.Forms.ImageList]::new()
$Files.ForEach({
$Extension = [System.IO.FileInfo]::new($_.FullName).Extension
if ($Extension -notin $ImgList.Images.Keys)
{
$ImgList.Images.Add($Extension, [System.Drawing.Icon]::ExtractAssociatedIcon($_.FullName))
}
})
$ImgList
}
$Job = Start-Job -ScriptBlock $JobScript -ArgumentList "C:\Windows"
#Do other stuff
Wait-Job $Job
Receive-Job $Job
Код генерирует множество ошибок, утверждая, что ни [System.Drawing.Icon], ни [System.Windows.Forms.ImageList] не найдены. Когда я запускаю код без задания, он работает нормально. Как ни странно, пространство имен System.IO работает нормально.
Я предполагаю, что мне нужно использовать add-type внутри блока сценария, но как мне добавить с ним эти системные типы?
РЕДАКТИРОВАТЬ: я обновил код с помощью комментария Матиаса.
Add-Type -AssemblyName System.Drawing
- person Mathias R. Jessen   schedule 22.04.2021