我希望能够将Color
类型从System.Drawing
传递到我的PowerShell脚本中。但是,除非我在运行脚本之前显式加载System.Drawing.dll
,否则我不想让人们这样做。
除非我在脚本之外加载dll,否则会出现此错误:
无法找到类型[System.Drawing.Color]
我的PowerShell Param
声明如下:
Param(
[Parameter(Mandatory = $true)][string] $TargetFile,
[Parameter()][int] $Thickness = 1,
[Parameter()][Switch] $UseTopLeftColor = $false,
[Parameter()][System.Drawing.Color] $BorderColor = [System.Drawing.Color]::FromArgb(195,195,195)
)
加载DLL引用的代码是:
[Void][System.Reflection.Assembly]::LoadFile("C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll")
如何为脚本定义DLL的依赖关系并让它自动引用DLL?
答案 0 :(得分:1)
Add-Type
只是编写[Reflection.Assembly]::LoadFile()
的一种更方便的方式。在脚本中Param()
之前都不能使用它们。
如果您希望能够从任何地方运行PowerShell脚本,我建议为每种基本颜色指定一个参数,然后计算脚本中的颜色。这样你也可以验证每个值:
Param(
[Parameter(Position=0)]
[ValidateRange(0,255)]
[int]$BorderRed = 195,
[Parameter(Position=1)]
[ValidateRange(0,255)]
[int]$BorderGreen = 195,
[Parameter(Position=2)]
[ValidateRange(0,255)]
[int]$BorderBlue = 195
)
Add-Type -Assembly 'System.Drawing'
[Drawing.Color]::FromArgb($BorderRed, $BorderGreen, $BorderBlue)
尝试将颜色指定为单个参数的3个值的列表将难以实现。从PowerShell外部,您无法将数组传递给参数,因此您必须指定类似逗号分隔字符串的内容并将其解析为3个整数值。
将颜色名称作为单个参数传递可行:
Param(
[Parameter()]
[string]$BorderColor = 'Blue'
)
Add-Type -Assembly 'System.Drawing'
[Drawing.Color]::$BorderColor