SQL Server中的Powershell执行策略

谁能帮忙?

首先,我很抱歉,如果这是错误的论坛和文字的数量,你必须阅读。 我不允许发布图片,一张图片胜过千言万语…..

当从SQLSMS 2008R2和SQL2012启动PowerShell(右键单击实例….select启动PowerShell)时,它会报告为进程禁用了脚本。 我知道这是默认设置,我需要改变这一点,但是,它看起来像SQLPS模块的导入失败

导入模块:文件D:\ Program Files(x86)\ Microsoft SQL Server \ 120 \ Tools \ PowerShell \ Modules \ SQLPS \ Sqlps.ps1无法加载,因为在此系统上禁用脚本的执行。 请参阅“get-help about_signing”了解更多详情。 在行:1 char:14 + import-module <<<< SQLPS -DisableNameChecking + CategoryInfo:NotSpecified:(:) [Import-Module],PSSecurityException + FullyQualifiedErrorId:RuntimeException,Microsoft.PowerShell.Commands.ImportModuleCommand Convert-UrnToPath:术语“Convert-UrnToPath”不被识别为cmdlet,函数,脚本文件或可操作程序的名称。 检查名称的拼写,或者如果包含path,请validationpath是否正确,然后重试。 在线:at 1 char: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成功更新了您的执行策略,但该设置被在更具体的scop上定义的策略覆盖。 由于重写,你的shell将保留当前有效的执行策略“Restricted”。 input“Get-ExecutionPolicy -List”查看您的执行策略设置。 有关更多信息,请参阅“Get-Help Set-ExecutionPoli cy。” 在行: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返回的错误信息是:加载扩展types数据文件时出现以下错误:Microsoft.PowerShell,D:\ Program Files(x86)\ Microsoft SQL Server \ 120 \ Tools \ PowerShell \ Modules \ SQLPS \ sqlprovider。 types.ps1xml:由于以下validationexception而跳过的文件:AuthorizationManager检查失败..“。 处理退出代码-1。 该步骤失败。

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

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

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

如果我使用PowerShell(从附件… Windows PowerShell的),那么我没有任何问题。 我已经在networking上search这些问题,每个人都只是说使用set-execution-policy。 没有人似乎无法加载SQLPS模块或无法更改执行策略。

任何意见将大受欢迎!

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

这个范围列表有一个优先顺序(MachinePolicy,UserPolicy,Process,CurrentUser,LocalMachine)。 每个范围可以有不同的设置;

  • 受限
  • 使用AllSigned
  • 下RemoteSigned
  • 无限制
  • 旁路
  • 未定义

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

运行“Set-ExecutionPolicy”时出现错误,表示您在比LocalMachine的默认范围更具体的范围内定义了“Restricted”的设置。 Get-ExecutionPolicy -List cmdlet会告诉你在哪里。

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

 Set-ExecutionPolicy -Scope Process RemoteSigned 

如果在MachinePolicy或UserPolicy范围中定义了“受限”设置,则表示您的域pipe理员已经configuration了覆盖本地设置的组策略。 这就是你需要去和他们交谈的地方,看看你是否可以通过GPO应用一个限制较less的设置。

就我所知,您不能轻易覆盖本地的GPO设置; 但是,如果我错了,那么请别人纠正我! 🙂

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

有没有你不使用这个命令的原因?

 PS C:\> Import-Module SQLPS 

几个笔记和故障排除步骤:

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

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

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

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