2013-10-09 31 views
1

如何在我的$profile文件中創建函數,該函數僅在我試圖執行它們時位於某個特定路徑內纔會執行?Windows Powershell目錄特定功能

+0

你的意思是你想要的功能,當你切換到該目錄,或者你只想功能有副作用只有當你在某一目錄目前是執行? –

+0

@邁克爾凱利,第二個。我可以把'if(){}'放在這個函數中,但是它們仍然會在* tab鍵上自動縮進(但我不想這樣)。 –

回答

1

沒有什麼內置PowerShell來有效地隱藏基於任何一種情況下的命令

(如當前目錄)。

在PowerShell V3或更高版本中,可以使用一些關於命令查詢的事件處理程序。一個解決辦法是這個樣子:

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

    if ($commandName -eq 'MyCommand' -and $pwd -eq 'some directory') 
    { 
     $eventArgs.StopSearch = $true 
    } 
} 
0

您的配置文件在PowerShell啓動時進行評估,因此當前目錄並不真正發揮作用。只要能夠使用PowerShell控制檯,配置文件中的任何功能都將可用。您可以重新實現tabexpansion2函數,以便不基於當前目錄選項卡完成某些功能,但看起來有點過分。另一種選擇是覆蓋提示函數,並根據當前目錄將函數的可見性設置爲public或private。如果它們是私有的,他們不會在選項卡擴展如顯示:

$func = Get-Command MyFunc 
$func.Visibility = 'private' # or 'public'