2013-10-09 3 views
1

$profile 파일 내에서 기능을 만들 수 있습니까? 실행하려고 할 때 특정 경로 안에있을 때만 실행됩니까?Windows Powershell 디렉터리 특정 기능

+0

해당 디렉토리로 변경할 때 기능을 실행 하시겠습니까? 아니면 현재 특정 디렉토리에있는 경우에만 기능이 부작용을 갖길 원하십니까? –

+0

@Michael Kelley, 둘째. 이 함수 내부에'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' 
관련 문제