SQL Server 中的 Powershell 执行策略

SQL Server 中的 Powershell 执行策略

有人可以帮忙吗?

首先,如果这是错误的论坛,并且您需要阅读大量文字,我深表歉意。我还不能发布图片,而一张图片胜过千言万语......

从 SQLSMS 2008R2 和 SQL2012 启动 powershell 时(右键单击实例...选择启动 Powershell),它会报告该进程的脚本已被禁用。我知道这是默认设置,我需要更改它,但是,SQLPS 模块的导入似乎也失败了

导入模块:无法加载文件 D:\Program Files (x86)\Microsoft SQL Server\120\Tools\PowerShell\Modules\SQLPS\Sqlps.ps1,因为此系统已禁用脚本执行。请参阅“get-help about_signing”了解更多详细信息。第 1 行,字符:14 + 导入模块 <<<< SQLPS -DisableNameChecking + CategoryInfo:NotSpecified:(:) [Import-Module],PSSecurityException + FullyQualifiedErrorId:RuntimeException,Microsoft.PowerShell.Commands.ImportModuleCommand Convert-UrnToPath:术语“Convert-UrnToPath”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。在行:在 1 个字符:70 &{[System.Console]::Title = 'SQL Server Powershell';Convert-UrnToPath<<<< 'Server[@Name=''xxxx\xxxx'']'|cd} + CategoryInfo :ObjectNotFound: (Convert-UrnToPath:String) [], CommandNotFoundException + FullyQualifiedErrorId :CommandNotFoundException

我无法改变执行策略。

set-executionpolicy : Windows PowerShell 已成功更新您的执行策略,但该设置已被在更具体范围内定义的策略覆盖。由于覆盖,您的 shell 将保留其当前有效的执行策略“Restricted”。键入“Get-ExecutionPolicy -List”以查看您的执行策略设置。有关更多信息,请参阅“Get-Help Set-ExecutionPolicy”。在 line:1 char:20 + set-executionpolicy <<<< unrestricted + CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], Sec urityException + FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Com
mands.SetExecutionPolicyCommand

但是,我已经设置了 SQL Agent powershell 作业并且 sql2008R2 成功运行,但是 SQL2012 失败并显示一条消息:

以用户身份执行:xxxxxxx set-executionpolicy untre。作业步骤在 PowerShell 脚本的第 1 行收到错误。对应行是“import-module SQLPS -DisableNameChecking”。更正脚本并重新安排作业。PowerShell 返回的错误信息是:“加载扩展类型数据文件时发生以下错误:Microsoft.PowerShell,D:\Program Files (x86)\Microsoft SQL Server\120\Tools\PowerShell\Modules\SQLPS\sqlprovider.types.ps1xml:由于以下验证异常而跳过文件:AuthorizationManager 检查失败。”。进程退出代码 -1。步骤失败。

如果我在 SQL 使用的 SQL 帐户下运行 powershell ( D:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\SQLPS.exe),那么我会收到相同的错误消息,关于无法加载 SQLPS 模块(如果 SQL 无法加载它,则有意义),但是,如果我尝试更改 SQL 帐户下的执行策略,我会收到错误消息:

set-executionpolicy : Windows PowerShell 已成功更新您的执行策略,但该设置已被更具体范围内定义的策略覆盖。由于覆盖,您的 shell 将保留其当前有效的执行策略“受限”。键入“Get-ExecutionPolicy -List”以查看您的执行策略设置。有关更多信息,请参阅“Get-Help Set-ExecutionPolicy”。在 line:1 char:20 + set-executionpolicy <<<< unrestricted + CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], Sec urityException + FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Com mands.SetExecutionPolicyCommand

因此,看起来该设置被在更具体范围内定义的策略覆盖了。这个策略在哪里设置?这个策略是什么?我问服务器团队他们是否在 AD 策略级别设置了它,但他们说没有。

如果我使用正确的 powershell(从附件...windows powershell),那么我不会遇到任何问题。我在网上搜索过这些问题,每个人都说使用 set-execution-policy。似乎没有人遇到无法加载 SQLPS 模块或无法更改执行策略的问题。

任何建议都将不胜感激!

答案1

首先,运行 powershell 命令“Get-ExecutionPolicy -List”(如错误消息中所述)。这将为您提供不同执行策略范围的列表,以及在哪个范围内定义哪个设置。

此范围列表具有优先顺序(MachinePolicy、UserPolicy、Process、CurrentUser、LocalMachine)。每个范围都可以有不同的设置;

  • 受限制的
  • 全部已签名
  • 远程签名
  • 不受限制
  • 旁路
  • 不明确的

Powershell 将按照列出的顺序评估这些范围,并应用第一个设置为“未定义”以外的设置。

运行“Set-ExecutionPolicy”时收到的错误表明,您在比 LocalMachine 的默认值更具体的范围内定义了“Restricted”设置。Get-ExecutionPolicy -List cmdlet 将告诉您在哪里。

如果在 LocalUser 或 Process 范围内应用了“受限”设置,则可以更改此设置。使用 Set-ExecutionPolicy cmdlet,但使用 -scope 参数指定范围。例如;

Set-ExecutionPolicy -Scope Process RemoteSigned

如果在 MachinePolicy 或 UserPolicy 范围内定义了“受限”设置,则表明您的域管理员已配置了覆盖本地设置的组策略。这时您需要与他们沟通,看看是否可以通过 GPO 应用限制较少的设置。

据我所知,您无法轻松地在本地覆盖 GPO 设置;但是,如果我错了,那么请有人纠正我!:)

答案2

我也怀疑这是一个问题ExecutionPolicy,尽管有点难以正确诊断。

您不使用此命令有什么原因吗?

PS C:\> Import-Module SQLPS

一些注意事项和故障排除步骤:

  • 您可以使用Set-ExecutionPolicy -Scope MachinePolicySet-ExecutionPolicy -Scope UserPolicy,前提是您的帐户有权限进行这些更改。

  • PowerShell 有 32 位版本和 64 位版本。ExecutionPolicy每个版本都不同。您应该检查 32 位版本的执行策略(Windows PowerShell (x86)在“开始”菜单中)。$env:PROCESSOR_ARCHITECTURE将在 32 位控制台上返回 x86,在 64 位控制台上返回 AMD64。

  • 确保从 SQL 或控制台运行时,它以您预期的用户身份运行。$env:USERNAME会告诉你。

  • 以 sql 用户身份运行 PowerShell 控制台,然后运行Get-ExecutionPolicy -list

相关内容