PowerShell에서 어레이 변수 비교
나는 두 폴더를 비교하기 위해 이 스크립트를 가지고 있습니다.
$firstfolder = Get-ChildItem C:\firstfolder
$secondfolder = Get-ChildItem C:\firstfolder
if ($firstfolder -eq $secondfolder) {
Write-Host "Folders are the same."
} else {
Write-Host "Error: Doesn't match."
}
보시다시피, 저는 같은 폴더를 비교합니다.문제는, 절대로 어레이가 동등하다는 것을 고려하지 않는다는 것입니다. 왜 그럴까요?
PowerShell에서는 배열을 가리키는 변수가 배열 자체의 내용을 열거하여 식으로 평가됩니다.
예를 들어 이 표현식은 다음과 같습니다.
$firstFolder | Get-Member
시스템에 대한 정보를 반환합니다.IO.디렉토리정보 유형, 실제로는 다음의 첫 번째 요소 유형입니다.$firstFolder
배열. 배열 개체 자체에서 작동하려면 PowerShell에 명시적으로 개체를 배열로 취급하도록 지시해야 합니다.,
교환입니다.다음 식을 사용합니다.
,$firstFolder | Get-Member
에 대한 정보를 반환할 것으로 예상됩니다.System.Object[]
.
하지만, 그 때.-eq
연산자는 두 배열 변수 사이에서 사용되며, 상황은 약간 다릅니다.실제로 PowerShell은 왼쪽의 배열만 열거하고 각 항목을 오른쪽의 배열과 전체적으로 비교합니다.결과는 일치하는 항목의 배열이거나 일치하는 항목이 없는 경우 전혀 없습니다.예:
$a = 1..5
$b = 1..5
$a -eq $b # returns zero-length array
[bool]($a -eq $b) # returns $false
$a -eq 3 # returns 3
특정한 경우 결과는 길이가 0인 배열(또는$false
부울로 캐스팅된 경우) 이후$firstFolder
배열에 시스템이 포함되어 있습니다.IO.디렉토리의 배열과 완전히 일치하지 않는 개체에 정보를 제공합니다.$secondFolder
변수.
두 배열의 내용을 서로 비교하는 것이 진정으로 필요합니다.Compare-Object cmdlet이 유용한 부분은 다음과 같습니다.
Compare-Object $firstFolder $secondFolder -SyncWindow 0
이렇게 하면 두 배열 간의 차이가 반환됩니다.$null
배열이 동일한 경우.더 정확히 말하면, 결과 배열은 다른 배열이 아닌 한 배열에만 존재하는 각 항목에 대한 개체를 포함합니다.-SyncWindow 0
인수를 사용하면 배열에 나타나는 항목의 순서가 차이로 계산됩니다.
서로 다른 항목에 대한 세부 정보를 입력하지 않고 두 어레이가 서로 다른지 확인하는 간단한 방법만 있으면 Compare-Object에서 반환되는 어레이의 길이를 확인할 수 있습니다.
$areEqual = @(Compare-Object $firstFolder $secondFolder -SyncWindow 0).Length -eq 0
Compare-Object가 반환될 수 있으므로 PowerShell에 항상 결과를 배열로 패키지화하도록 명시적으로 지시했습니다.$null
배열에 차이가 없는 경우.
을 사용해야 .compare-object
차이가 있는지 없는지를 평가합니다!
(기본 동기화 창에서는 순서가 중요하지 않지만 큰 목록의 경우 더 느립니다.)
function arrayequal($a, $b) {
-not (compare $a $b)
}
arrayequal $a $b
True
일치하는 순서 이상:
function arrayequal($a, $b) {
-not (compare $a $b -syncwindow 0)
}
arrayequal $a $b
True
언급URL : https://stackoverflow.com/questions/9598173/comparing-array-variables-in-powershell
'programing' 카테고리의 다른 글
PHP의 SQL을 사용하여 초 단위로 날짜 시간 저장 (0) | 2023.08.15 |
---|---|
제한된 제어로 Oracle View Definition 가져오기 (0) | 2023.08.15 |
64비트 시스템에서 32비트 모드로 Oracle Client 실행 (0) | 2023.08.15 |
Firebug를 사용하여 Ajax 코드 디버깅 중 (0) | 2023.08.15 |
스크립트로 작성한 후 SQL Management Studio에서 테이블이 존재함을 인식하지 못함 (0) | 2023.08.15 |