SQLPS选项卡完成速度非常慢

时间:2013-06-19 14:09:53

标签: sql-server powershell sqlps

SQLPS选项卡扩展(选项卡完成)太慢,它完全无法使用。我的配置有问题吗?是否有更高版本我应该以某种方式升级到?是否有某种修复方法可以使其可用?

相关版本信息:

  • Windows7 64位
  • SQL Server 2008
  • SQL Server Management Studio 10.0.5512.0
  • SQLPS.exe FileVersion(10.0.1600.22((SQL_PreRelease).080709-1414)
  • sqlps,$ psversiontable:
    • CLRVersion:2.0.50727.5466
    • BuildVersion:6.1.7601.17514
    • PSVersion:2.0

1 个答案:

答案 0 :(得分:1)

就我所知,性能问题实际上是在SqlServer psprovider中Resolve-Path的实现。 Resolve-Path是TabExpansion的默认实现(在Powershell v2中)如何完成路径。

通过重写TabExpansion函数以使用Get-ChildItem和Where-Object而不是Resolve-Path,我能够解决这个问题。你可以find the latest implementation in this bitbucket repo

以下是当前的实施:

function TabExpansion($line, $lastWord) {
  if (!((get-location).Provider.Name -eq "SqlServer")) {
    TabExpansionSqlPsBackup $line $lastWord
  }
  else {
    $index = $lastWord.LastIndexOfAny(@('\', '/'))
    if ($index -gt -1) { 
      $parent = $lastWord.substring(0, $index+1) 
      $leaf = $lastWord.substring($index+1)
    }
    else {
      $parent = ""
      $leaf = $lastWord
    }

    $matches = ls -path $parent | ?{ $_.PSChildName -match "^$leaf" }
    if ($matches) { 
      $matches | %{ $parent + $_.PSChildName } 
    } 
    else {$lastWord}
  }
}

将该函数放在位于〜\ Documents \ WindowsPowerShell \ Microsoft.SqlServer.Management.PowerShell.sqlps_profile.ps1

的sqlps配置文件中。