随着新的 SQL Server PS 模块的引入,Microsoft 已将 -Encrypt 参数强制设置为 Invoke-Sqlcmd cmdlet。
Invoke-Sqlcmd -ServerInstance $server -query $sql -Encrypt Optional
在我们的环境中:
- 我们有一个自定义 PowerShell 模块,其中包含大量 Invoke-Sqlcmd 调用。
- 我们管理数千台服务器,每台服务器都具有不同版本的 SQL Server PS 模块。
鉴于我们服务器上的 SQL Server PS 模块版本存在差异,我们的目标是利用 PowerShell 中的默认参数选项。为了实现这一点,我们在$PROFILE.AllUsersAllHosts配置文件中包含以下行:
$PSDefaultParameterValues['Invoke-Sqlcmd:Encrypt'] = 'Optional'
此设置适用于从 Visual Studio Code 执行的脚本。但是,我们的自定义模块中调用 Invoke-Sqlcmd 的函数会遇到故障。为了解决这个问题,我们通过使用以下行在模块中创建一个函数来实现另一种方法:
$PSDefaultParameterValues['Invoke-Sqlcmd:Encrypt'] = 'Optional'
因此,在使用模块中的任何函数之前,我们执行负责设置可选值的函数。
考虑到这些挑战,是否有更有效的替代方案?此外,当加载PowerShell模块时,它在哪个范围内运行?我们怎样才能在这个范围内建立可选值呢?