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