2016-10-16 3 views
0

.ps1 스크립트 파일에 여러 가지 도우미 함수가있는 고급 기능이 있습니다.함수를 스크립트 파일로 구성하여 명령 줄에서 호출하는 방법은 무엇입니까?

AdvFunc을 명령 줄에서 호출 할 수 있도록 보조 기능을 구성하려면 어떻게해야합니까? 은 AdvFunc에서 도우미 기능을 사용하지 못하도록하지 않으시겠습니까? script.ps1의

축약 된 내용 :

Function AdvFunc { 
    [cmdletbinding(DefaultParameterSetName='Scheduled')] 
    Param (
     [Parameter(ValueFromPipeline=$true, ParameterSetName='Scheduled')]$SomeValue 
    ) 
    Begin { 
     $value = Helper1 $stuff 
    } 
    Process { 
     # do stuff 
    } 
    End { 
     # call Helper2 
    } 
} 

Helper1 { 
    Param ($stuff) 
    # do stuff 
    Return $valueForAdvFunc 
} 

Helper2 { 
    # do other stuff 
} 

# Entry Point 
$collection | AdvFunc 

script.ps1 현재 스케줄러에 의해 출시 예상대로 미리 정의 된 $ 수집을 처리한다.

문제는 다른 매개 변수 집합과 같은 명령에서 AdvFunc를 호출해야한다는 것입니다. 아래에 AdHoc 매개 변수 세트를 추가했습니다. 이것은 AdvFunc에 다른 콜렉션을 보내는데 사용됩니다.

Param (
    [Parameter(ValueFromPipeline=$true, ParameterSetName='Scheduled')]$SomeValue, 
    [Parameter(ParameterSetName='AdHoc')][string]$OtherValue1, 
    [Parameter(ParameterSetName='AdHoc')][string]$OtherValue2 
) 

은 분명히이 도우미 기능이 더 이상 같은이 .ps1 파일에있을 수 있다는 것을 의미 : 나는 일을 알고있는 것처럼,이 script.ps1의 첫 번째 라인이 지금해야 의미합니다.

이제는 스크립트 파일 (필요에 따라 점을 찍음)이 필요합니까?

사용해야합니까 : helpers.ps1(여러 도우미 기능을 포함) 및 collection.ps1 (단지 $ 컬렉션이 script.ps1에 파이프되는) (단 AdvFunc를 포함) script.ps1, ?

다른 방법이 있습니까?

+0

"AdHoc 매개 변수 세트를 사용하여 AdvFunc을 호출하고 싶습니다."는 의미는 무엇입니까? 매개 변수 집합을 즉시 재정의 하시겠습니까? 왜? 이를 위해 무엇이 필요하다고 생각하십니까? 즉,이를 수행하여 해결하고자하는 실제 문제는 무엇입니까? –

+0

'AdHoc' 매개 변수 세트는 두 번째 코드 블록에 표시됩니다. 그것은 재정의되지 않습니다. AdvFunc에 추가해야 할 새로운 매개 변수 세트입니다. 이 추가 매개 변수 세트는'Scheduled' 매개 변수 세트와 함께 내장'$ collection'을 사용하는 예약 된 태스크 대신 임시 작업을 처리합니다. – jott19

답변

1

제안 된 솔루션 : script.ps1을 제공하는 실행기 스크립트를 사용하십시오. 모든 함수 (AdvFunc 및 모든 도우미 함수)는 script.ps1에 있습니다.

# launcher.ps1 
[cmdletbinding(DefaultParameterSetName='Scheduled')] 
Param (
    [Parameter(ParameterSetName='AdHoc', Mandatory=$true)][ValidateNotNullOrEmpty()][string]$Param1, 
    [Parameter(ParameterSetName='AdHoc', Mandatory=$true)][ValidateNotNullOrEmpty()][string]$Param2, 
    [Parameter(ParameterSetName='AdHoc', Mandatory=$true)][ValidateNotNullOrEmpty()][string]$Param3 
) 
. .\script.ps1 
if ($PSBoundParameters.ContainsKey('param1')) { 
    AdvFunc -Param1 $Param1 -Param2 $Param2 -Param3 $Param3 
} 
else { 
    $collection | AdvFunc 
} 

생각에는 파라미터 (AdvFunc에 $collection를 전송) 또는 파라미터의 전체 "은 Ad-Hoc 셋트 (AdvFunc 명령 행 정의 컬렉션 전송) 중 어느 하나를 수용하지 않는 것입니다. 빈 '예약 된'매개 변수 집합은 매개 변수 없음 옵션을 수용 할 필요가 없습니다.

관련 문제