我正在编写一个Powershell script
,它将为我创建我的ConfigMgr 2012应用程序。此过程的一部分是将图标与应用程序相关联。
我正在这样做的方法实际上附加了我告诉它的.ICO
文件,但质量很糟糕。我将相同的.ICO
文件附加到GUI中的现有应用程序,它看起来很棒。我已经尝试过使用System.Drawing.Bitmap,System.Drawing.Image
等各种技巧,但它会引发异常,因为它无法将其转换为字节类型,或者当它不这样做时,应用程序我尝试查看时崩溃了我的ConfigMgr控制台。
这是我目前的代码:
$icon = New-Object Microsoft.ConfigurationManagement.ApplicationManagement.Icon
$x = [System.Drawing.Icon]::ExtractAssociatedIcon($FilePathToIcon)
$icon.Data = $x
return $icon
然后我将$ Icon对象添加到我的Application对象。我已经有了.ICO文件。我在这一点上的想法是,如果我已经有一个ICO文件,我不应该提取一个图标,但我不能,在我的生活中,弄清楚如何使这个东西得到一个体面的质量。
答案 0 :(得分:1)
问题似乎源于这样一个事实:如果你致电ExtractAssociatedIcon
,你最多会得到一个32像素的图标。如果您想要更大版本的原始图标文件,则必须使用System.Drawing.Icon
类'构造函数之一。所有构造函数都可以在this link找到。
再一次,您会注意到,使用ExtractAssociatedIcon
静态方法限制您拥有32px图标,即使原始文件大于此值。
$Icon = [System.Drawing.Icon]::ExtractAssociatedIcon("C:\Users\Trevor\Downloads\Aaron-Sinuhe-Tv-Movie-Folder-Lord-Of-The-Rings-1.ico");
$Icon.Height; # 32px
$Icon.Width; # 32px
One of the constructors允许您在[int] Width
之后指定[int] Height
和[String] FileName
参数。假设您在c:\test\icon.ico
中有一个大的(128px + square)ICO文件,请查看以下代码。
$Icon = New-Object -TypeName System.Drawing.Icon -ArgumentList 'C:\test\icon.ico', 128, 128;
$Icon.Height; # 128px
$Icon.Width; # 128px
或者,another constructor允许您指定[String] FileName
和[System.Drawing.Size] Size
参数。
$Size = New-Object -TypeName System.Drawing.Size -ArgumentList 128, 128;
$Icon = New-Object -TypeName System.Drawing.Icon -ArgumentList 'C:\test\icon.ico', $Size;
$Icon.Height; # 128px
$Icon.Width; # 128px
答案 1 :(得分:1)
我正在尝试在sccm应用程序中添加一个图标,但我很困惑如何才能这样做。所以我有以下代码来添加应用程序:
$app = New-Object Microsoft.ConfigurationManagement.ApplicationManagement.Application
$app.Title = $name
$app.Publisher = $publisher
$app.SoftwareVersion = $release
$info = New-Object Microsoft.ConfigurationManagement.ApplicationManagement.AppDisplayInfo
$info.Title = $name
$info.Language = "en-US"
$app.DisplayInfo.Add($info)
我可以使用第一个答案中提到的代码将图标导入对象:
"
$icon = New-Object Microsoft.ConfigurationManagement.ApplicationManagement.Icon
$x = [System.Drawing.Icon]::ExtractAssociatedIcon($FilePathToIcon)
$icon.Data = $x
$info.icon = $icon
"
但如前所述,通过这种方式添加图标,图标在SCCM的软件目录中质量不佳。
我无法在powershell中使用为大图标提及的代码。
答案 2 :(得分:0)
我最近遇到了同样的问题,获取了图标文件并发现了这篇文章。想通了.data属性要求“byte []”数据。所以,找到了可以将文件转换为字节的东西。 System.IO.File似乎完成了这项工作。到目前为止只针对一个Icon文件进行了测试,但似乎有效。尝试一下,让我知道它是否适合你。
$SCCMIcon = New-Object Microsoft.ConfigurationManagement.ApplicationManagement.Icon
$SCCMIcon.data = [System.IO.File]::ReadAllBytes("$Icon")
$info.Icon = $SCCMIcon