2016-08-12 3 views
0

내 스크립트는 모든 .pdf 파일로 무엇인가해야합니다 (정확히 상관 없습니다). 이를 위해, 나는 이런 식으로 호출되는 함수를 작성했습니다 :Powershell 파이프 라인 null 값을 자체 함수로

Get-ChildItem -Recurse -Filter *.pdf | foreach { $_.FullName} | ProcessPdfCreator 

내가 내 함수는 중괄호로 호출되는 것을 foreach 루프를 재 시도를하지만 아무것도 변경되지 않습니다. Anway 내 스크립트는 다음과 같습니다 : 내 테스트는 지금까지 $filepath 변수는 항상 null입니다 이어질

Function ProcessPdfCreator { 
    [cmdletbinding()] 
    Param (
     [parameter(ValueFromPipeline=$true)] 
     [string]$filepath 
    ) 

    Begin{} 
    Process{ 
     #Do something with $filepath 
    } 
    End {} 
} 

; 하지만 파이핑/함수 호출 전에 이름이 정확하다는 것을 확인하기 위해 echo $_.FullName을 사용했습니다.

추신 :이 컴퓨터에서는 PowerShell 2.0으로 작업해야하지만이 코드는 여기서도 작동 할 것입니다.

+0

에 캐스팅 제거? '$ filepath'의 값이 null이라고 어떻게 결정 했습니까? –

+0

오류 메시지는 null 또는 공백 (컴퓨터가 독일어로 설정되어 있고 오류 메시지도 마찬가지이기 때문에)에 대한 인수를 "경로"에 바인딩 할 수 없다고 말했습니다. 나는 그것을 확인하기 위해 함수에'echo ($ filepath -eq $ null)을했다. –

+0

게시 한 코드로 설명하는 문제를 재현 할 수 없습니다. 필자는'Process {}'블록에'$ filepath'를 반향하여 Windows 7 32-bit의 기본 설치를 깨끗하게 테스트했습니다. –

답변

0
Get-ChildItem -Recurse -Filter *.pdf | select -ExpandProperty FullName | ProcessPdfCreator 

Additionaly, [string] 테스트

Function ProcessPdfCreator { 
[cmdletbinding()] 
Param (
    [parameter(ValueFromPipeline=$True)] 
    $filepath 
) 
Begin{ 
} 
Process{ 
    #Do something with $filepath 
} 

End {} 
} 
+0

고마워요. ForEach 루프가 파이핑과 함께 필요하지 않습니다. –

+0

아니요, 그렇지 않습니다. 고급 라이프 사이클이있는 파이프는 테이블을 처리 할 수 ​​있지만 2.0은 이후 버전만큼 유연하지 않으므로 입력 테이블을 정리하는 것이 더 안전합니다 (이 이유는 확장으로 선택하는 이유입니다). 그리고 입력이 테이블이기 때문에 캐스팅을 제거하십시오. – Deptor

+0

'foreach {$ _. FullName}'과'Select -Expand FullName' 사이에 효과적인 차이가 없으므로 다른 사람이 작동하지 않는 이유를 알지 못합니다. –

관련 문제