1

$profile実行しようとしたときに特定のパス内にいる場合にのみ実行されるファイル内に関数を作成するにはどうすればよいですか?

4

2 に答える 2

1

PowerShell には、あらゆる種類のコンテキスト (現在のディレクトリなど) に基づいてコマンドを効果的に非表示にする機能は組み込まれていません。

PowerShell V3 以降では、使用できるコマンド ルックアップに関するイベント ハンドラーがいくつかあります。1 つの解決策は次のようになります。

$ExecutionContext.InvokeCommand.PreCommandLookupAction = {
    param([string]$commandName,
          [System.Management.Automation.CommandLookupEventArgs]$eventArgs)

    if ($commandName -eq 'MyCommand' -and $pwd -eq 'some directory')
    {
        $eventArgs.StopSearch = $true
    }
}
于 2013-10-09T21:03:35.150 に答える
0

プロファイルは PowerShell の起動時に評価されるため、現在のディレクトリは実際には関係ありません。PowerShell コンソールを使用できるようになるとすぐに、プロファイル内のすべての機能が使用可能になります。tabexpansion2 関数を再実装して、現在のディレクトリに基づいて特定の機能をタブで補完しないようにすることもできますが、それは少しやり過ぎのようです。別のオプションは、プロンプト機能をオーバーライドし、現在のディレクトリに応じて、機能の可視性をパブリックまたはプライベートに設定することです。非公開の場合、タブ展開で表示されません。例:

$func = Get-Command MyFunc
$func.Visibility = 'private' # or 'public'
于 2013-10-09T20:59:49.617 に答える