2011-04-28 2 views
3

날짜별로 콘솔 프로그램에서 반환 한 줄을 PowerShell을 사용하여 정렬하려고합니다.Powershell Sort-Object by [DateTime] :: ParseExact

날짜는 MM/dd/yyyy 형식으로 형식화되므로 정렬 가능한 형식으로 DateTime 개체로 변환해야합니다.

이 날짜를 구문 분석하기 위해, 나는 사용

$dates = %{ "10/24/2010", "02/03/2010" } 
$dates | %{ [System.DateTime]::ParseExact($_, "MM/dd/yyyy", $null) } 

이것은 System.DateTime 객체로 날짜를 구문 분석하고 기본 ToString()으로 표시뿐만 아니라 시작 부분에 추가 빈 줄을 보여줍니다. 내가 정렬 - 객체와 날짜를 정렬하려고하면

지금, 나는 오류 메시지, 나는 오류가 추가 빈 줄에서 오는 것 같아요 :

$sortedDates = $dates | Sort-Object [System.DateTime]::ParseExact($_, "MM/dd/yyyy", $null) 

오류 메시지 :

"Sort-Object : 'System.Object []'인수를 허용하는 위치 매개 변수를 찾을 수 없습니다."

여분의 공백 라인은 어디에서 오는가? 나는 날짜를 파싱하거나 그들을 정렬하는 잘못된 일을하고 있습니까?

답변

6

문제의 일부가 첫 줄에 있다고 생각합니다.

% {}는 foreach-object {}를 의미합니다.

나는 (@)을 의미한다고 생각합니다. 당신은 실제로 @()가 필요하지 않습니다.

$dates= "10/24/2010", "02/03/2010" 

잘 작동합니다.
"파생 된 필드"로 정렬하려면 스크립트 블록을 사용하십시오. 사람이 비슷한 문제가있는 경우 참고로

$sortedDates = $dates | Sort-Object {[System.DateTime]::ParseExact($_, "MM/dd/yyyy", $null)} 
0

은 여기 (허용 대답 기준) 내 완벽한 솔루션 I에 의해 tf.exe 라벨의 출력 (TFS 명령 줄)을 정렬하고있어

입니다 날짜를 입력 한 다음 최신 라벨을 가져 오는 것입니다.

$lines = tf labels | Select-Object -skip 2 # Skip the header lines 
$sortedLines = $lines | Sort-Object { [DateTime]::ParseExact(($_ -split '\s+')[2],"M/d/yyyy",$null) } 

$labels = $sortedLines | %{ ($_ -split '\s+')[0] } # get the first column 

$latestLabel = $labels[-1] # Last item in the list