1

SQLPS のタブ展開 (タブ補完) は非常に遅く、まったく使用できません。構成に何か問題がありますか? どういうわけかアップグレードする必要がある新しいバージョンはありますか? これを使用可能にする何らかの修正はありますか?

関連するバージョン情報:

  • Windows7 64ビット
  • SQL Server 2008
  • SQL Server マネジメント スタジオ 10.0.5512.0
  • SQLPS.exe ファイルのバージョン (10.0.1600.22 ((SQL_PreRelease).080709-1414 )
  • sqlps、$psversiontable:
    • CLR バージョン: 2.0.50727.5466
    • ビルドバージョン: 6.1.7601.17514
    • PSバージョン: 2.0
4

1 に答える 1

1

私が知る限り、パフォーマンスの問題は、実際には SqlServer psprovider の Resolve-Path の実装にあります。Resolve-Path は、(Powershell v2 の) TabExpansion の既定の実装がパス補完を行う方法です。

Resolve-Path の代わりに Get-ChildItem と Where-Object を使用するように TabExpansion 関数をオーバーライドすることで、この問題を回避することができました。この 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 に答える