2012-02-14 2 views
0

psftp "ls"명령의 출력에 대해 일부 처리를 시도하고 있습니다. 기본적으로, 특정 조건과 일치하는 모든 파일 이름을 배열에 넣고 싶습니다.PowerShell 파이프 라인 단순화 명령 출력에서 ​​데이터 분할

가 가 이

가 (.. 당신이 명령에 대한 자세한 내용을 원한다면, 내가 그들을 제공 할 수있는 출력은 PowerShell의 "LS"명령의 출력과 매우 유사)

는 것 같다

PS C:\path\to\pwd> $a = & "C:\Program Files (x86)\PuTTY\psftp.exe" -l myusername -batch -pw mypassword -b sftpbatch.txt myserver | where {$_.split(" ", [StringSplitOptions]'RemoveEmptyEntries')[0] -eq "-rw-r--r--"} | select-object {$_.split(" ", [StringSplitOptions]'RemoveEmptyEntries')[8]} 
:이 있습니다 나에게 먼저 분할을 선택하고 그 다음으로 필터링하여 더 잘할 수 있습니다. 나는이 때 :

$a = & <# ... #> | select-object {$_.split(" ", [StringSplitOptions]'RemoveEmptyEntries')} | where { $_[0] -eq "-rw-r--r--" } 

나는

Unable to index into an object of type System.Management.Automation.PSObject. 

내가이를 단순화 할 수 있습니다 어떻게 얻을?

+0

아마'psftp.exe'ss에서 정규식을 실행해야합니다. tdout. 명령 출력을 게시하고 추출 할 텍스트를 지정하십시오. –

답변

2

이와 비슷한 기능이 작동합니다.

$a = & <#...#>| % {$b = $_ -split ' '|?{$_}; if($b[0] -eq '-rw-r--r--'){$b[8]}} 

스크립트에서이를 배치하는 경우, 내가 별칭 Foreach-Object%과 함께 별칭 ?을 대체 할 Where-Object

편집 : 여기

가 더 파이프 라인 지향 접근 방식 :

'-rw-r--r-- 1 2 3 4 5 6 7 test.txt'| 
    select @{Name='Words'; Expression={$_ -split ' '|where {$_}}}| 
    where {$_.Words[0] -eq "-rw-r--r--"}| 
    foreach {$_.Words[8]} 
+0

멋지다. 호기심에서, 내가 원래 시도한 것처럼 모든 파이프 접근법을 사용하여이를 수행 할 수 있습니까? 당신의 도움을 주셔서 감사합니다! –

+1

예, 모든 파이프 명령으로 수행 할 수 있습니다. 조금 더 장황하다. 내 답변에 예제를 추가했습니다. – Rynant

+0

다시 한 번 감사드립니다. 나는 아직 당신의 대답을 투표 할 수는 없지만 만약 내가 할 수 있다면, 나는 그럴 것입니다! –