我将要编写一个PowerShell模块,该模块依赖于SQL Server中的SMO程序集。(我需要引用的唯一程序集是Microsoft.SqlServer.Smo.dll)
在开发模块时,我只需复制所需的程序集并将其引用到我的清单文件中,类似于以下方式:
在开发模块时,我只需复制所需的程序集并将其引用到我的清单文件中,类似于以下方式:
RequiredAssemblies = @(
"$env:userprofile\Documents\WindowsPowerShell\Modules\Dependencies\Microsoft.SqlServer.Smo.dll"
)
我认为,在生产环境中,您希望从标准位置引用程序集。 我会假设标准位置是全局程序集缓存(GAC)。
如果我从GAC引用程序集,我会得到这个结果,但如果安装了程序集的新版本,这似乎可能会出现问题:
RequiredAssemblies = @(
'C:\WINDOWS\assembly\gac_msil\Microsoft.SqlServer.Smo\12.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.Smo.dll'
)
我也可以直接从SDK中引用程序集:
RequiredAssemblies = @(
'C:\Program Files\Microsoft SQL Server\120\SDK\Assemblies\Microsoft.SqlServer.Smo.dll'
)
我考虑过另一种选择(但可能会违反某个最终用户许可协议),就是将程序集复制到服务器共享文件夹,并像这样引用它:
RequiredAssemblies = @(
'\\MyServer\PowerShellDependencies\Microsoft.SqlServer.Smo.dll'
)
但是我应该如何做呢?
如果相关,所有安装此模块的计算机都是64位的,并且将安装SMO库。此外,这不是一款公开可用的软件,它正在部署在公司网络上。
更新:我尝试只在清单中指定程序集的名称,这似乎可以工作。
RequiredAssemblies = @(
'Microsoft.SqlServer.Smo.dll'
)