使用Powershell创建ConfigMgr应用程序时图标质量不佳

时间:2014-01-12 23:20:48

标签: c# .net powershell image-processing sccm

我正在编写一个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文件,我不应该提取一个图标,但我不能,在我的生活中,弄清楚如何使这个东西得到一个体面的质量。

3 个答案:

答案 0 :(得分:1)

问题似乎源于这样一个事实:如果你致电ExtractAssociatedIcon,你最多会得到一个32像素的图标。如果您想要更大版本的原始图标文件,则必须使用System.Drawing.Icon类'构造函数之一。所有构造函数都可以在this link找到。

限制为32px

再一次,您会注意到,使用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

获取更大的Icon实例

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