1

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

相关版本信息:

  • Windows7 64位
  • SQL Server 2008
  • SQL Server 管理工作室 10.0.5512.0
  • SQLPS.exe 文件版本 (10.0.1600.22 ((SQL_PreRelease).080709-1414 )
  • sqlps,$ps版本表:
    • CLRVersion:2.0.50727.5466
    • 构建版本:6.1.7601.17514
    • PS版本:2.0
4

1 回答 1

1

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

通过覆盖 TabExpansion 函数以使用 Get-ChildItem 和 Where-Object 而不是 Resolve-Path,我能够解决此问题。你可以在这个 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 配置文件中

于 2013-06-19T14:18:01.037 回答