2013-09-25 1 views
4
Function doSomething($param1 $param2 $file) 
{ 
...doing stuff 
$pos = $file.IndexOf('.') 
} 

doSomething -param1 'stuff' -param2 'more stuff' -file 'C:\test.txt' 

반환 오류 실패 : '같이 IndexOf'라는 메서드가 포함되어 있지 않습니다 [System.IO.FileInfo] 때문에 메서드 호출에 실패했습니다.

그러나 함수 또는 명령 줄 외부에서 호출하면 out 문제가 발생합니다.

이것은 powershell의 한계입니까, 아니면 powershell 함수 내에서 문자열 함수를 호출하는 트릭이 있습니까?

도움 주셔서 감사합니다.

답변

11

IndexOf은 의 방법입니다. 나는 ...doing stuff 어딘가에서 으로 취급되는 방식으로 $file에서 작동하고 있다고 생각합니다.

내 환경에서 복제를 시도했기 때문에 나는 부분이 의심과 작동에 도착 :

function doSomething ($file) 
{ 
    # This gets the index of . in 'C:\test.txt', which should be at position 7. 
    $pos = $file.IndexOf('.') 
    $pos 
    $file.GetType() 
} 
doSomething -file 'C:\test.txt' 
7 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  String         System.Object 

당신은 모든 $file에서 작동, 또는 다른 파일을 수정하는 데 사용하고 있습니까? 객체가 [System.IO.FileInfo] 인 경우에는 $file.fullname을 사용하여 경로 문자열을 다시 가져올 수 있습니다. 이것은 FileInfo 객체의 컬렉션이되도록 수정하지 않았다고 가정합니다.

+1

정확합니다. System.IO.FileInfo 파일을 생성하고 있습니다. 나는 폴더 경로에 대해 get-childitem을 사용하여 $ file을 생성하고 있었다. 그것은 필자가 필요로하는 System.IO.FileInfo 객체로 머무를 필요가 없기 때문에 그냥 $ file.tostring() 문자열로 변환하고 indexOf를 사용할 수 있습니다. 도와 주셔서 감사합니다!! –