2017-12-15 5 views
-3

PowerShellスクリプトが複数のファイルに存在する場合、特定の機能の実装を検索するファイルを理解することは難しいです。編集するための特定の関数の実装にすばやく移動するにはどうすればよいですか? PowerShell ISEで関数にカーソルを置き、ショートカットで関数の実装に移動すると、これが最適なソリューションになります。PowerShelでの実装に移動する方法

このコマンドの戻りファイルパス:

${Function:Verb-MyCommand}.File

それから私は、このファイル内の関数の名前の検索を行うことができます。

非常に遅いです。

答えて

0

このコードはPowerShell ISEで実行する必要があります。アドオンはショートカット "CTRL + Alt + Shift + B"で追加されます。スクリプトエディタの関数にカーソルを置き、 "CTRL + Alt + Shift + B"を押すか、メニューのアドオン一覧から選択すると、必要なファイルがPowerShell ISEで開き、カーソルがこの機能の開始。

function Get-TokenInfo 
{ 
    [Alias("ti")] 
    [OutputType([System.Management.Automation.PSToken[]])] 
    Param() 
    Process 
    { 
    $editor = $psise.CurrentFile.Editor; 
    $line = $editor.CaretLine; 
    $column = $editor.CaretColumn; 
    return [system.management.automation.psparser]::Tokenize($psISE.CurrentFile.Editor.Text, [ref]$null) |?{$_.StartLine -le $line -and $_.EndLine -ge $line -and $_.StartColumn -le $column -and $_.EndColumn -ge $column}; 
} 
} 
function GoTo-CommandImplementation 
{ 
    [Alias("gti")] 
    Param() 

    Process 
    { 
    $commandInfo = ti |?{$_.Type -eq [System.Management.Automation.PSTokenType]::Command} | select -First 1; 
    if(!$commandInfo) 
    { 
     Write-Host "Is not a command"; 
    } 
    else 
    { 
     $commandName = $commandInfo.Content; 
     $command = Get-Command $commandName; 
     if($command -is [System.Management.Automation.AliasInfo]) 
     { 
      $command = $command.ResolvedCommand; 
     } 
     if($command.CommandType -eq [System.Management.Automation.CommandTypes]::Function) 
     { 
      $functionInfo = [System.Management.Automation.FunctionInfo]$command; 
      $commandFile = $functionInfo.ScriptBlock.File; 
      $line = $functionInfo.ScriptBlock.StartPosition.StartLine; 
      $column = $functionInfo.ScriptBlock.StartPosition.StartColumn; 
      psedit $commandFile; 
      $psise.CurrentFile.Editor.Focus(); 
      $psise.CurrentFile.Editor.SetCaretPosition($line, $column); 
     } 
     else 
     { 
      Write-Host "Is not Function."; 
     } 
    } 
    } 
} 
$PowerPSISERoot.Submenus.Add("GoTo Implementation", {gti}, "CTRL+Alt+SHIFT+B"); 
+1

このコードスニペットは、(http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)[説明を含む]、疑問を解決するかもしれないが、本当に改善するのに役立ちますあなたの投稿の質。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。 – Clijsters

関連する問題