PowerShell Where-Object 문에 다중 및/또는 포함됨
PS H:\> Invoke-Command -computername SERVERNAME { Get-ChildItem -path E:\dfsroots\datastore2\public} | Where-Object {{ $_.e
xtension-match "xls" -or $_.extension-match "xlk" } -and { $_.creationtime -ge "06/01/2014"}}
위는 저의 코드 예제입니다.파일 서버에서 이 PowerShell 코드를 원격으로 실행하여 생성 날짜가 2014년 6월 1일 이후인 모든 .xls 및 .xlk 파일을 반환하도록 하려고 합니다.이 코드를 실행하면 원격 위치에 있는 모든 폴더를 뱉어내기 시작합니다.이와 같은 두 가지만 비교하면 다음과 같습니다.
PS H:\> Invoke-Command -computername SERVERNAME { Get-ChildItem -path E:\dfsroots\datastore2\public} | Where-Object { $_.extension-match "xls" -and $_.creationtime -ge "06/01/2014"}
해당 날짜 이후에 생성된 xls 파일만 표시됩니다.이게 무슨 일입니까?둥지가 아닌 다른 것을 사용해야 합니까?-and
그리고.-or
진술서?
비교 내용을 다음으로 정리합니다.{}
첫 번째 예제에서는 ScriptBlocks를 만들고 있으므로 PowerShell 인터프리터는 다음과 같이 봅니다.Where-Object { <ScriptBlock> -and <ScriptBlock> }
그 이후로-and
연산자는 부울 값에서 작동하고 PowerShell은 ScriptBlock을 부울 값으로 캐스팅합니다.PowerShell에서 비어 있지 않은 항목, 0 또는 null은 모두 참입니다.그러면 진술은 다음과 같이 보입니다.Where-Object { $true -and $true }
그것은 항상 사실입니다.
사용하는 대신{}
괄호 사용()
.
또한 사용할 항목-eq
대신에-match
match는 regex를 사용하므로 문자열에서 패턴이 발견되면 true가 됩니다(시도:'xlsx' -match 'xls'
).
Invoke-Command -computername SERVERNAME {
Get-ChildItem -path E:\dfsroots\datastore2\public |
Where-Object {($_.extension -eq ".xls" -or $_.extension -eq ".xlk") -and ($_.creationtime -ge "06/01/2014")}
}
더 나은 옵션은 에서 확장을 필터링하는 것입니다.Get-ChildItem
지휘권
Invoke-Command -computername SERVERNAME {
Get-ChildItem -path E:\dfsroots\datastore2\public\* -Include *.xls, *.xlk |
Where-Object {$_.creationtime -ge "06/01/2014"}
}
괄호를 사용해야 할 때는 곡선 괄호를 사용합니다.
curvy bases를 사용하여 정의된 스크립트 블록 내에 문을 보관하는 위치{ }
테스트를 분리/랩하려면 괄호를 사용해야 합니다.()
.
또한 원격 컴퓨터에서 필터링을 시도해 보는 것이 좋습니다.시도:
Invoke-Command -computername SERVERNAME {
Get-ChildItem -path E:\dfsroots\datastore2\public |
Where-Object { ($_.extension -eq "xls" -or $_.extension -eq "xlk") -and $_.creationtime -ge "06/01/2014" }
}
여기서 해결책을 찾았습니다.
PowerShell 복사 스크립트에서 여러 문자열을 올바르게 필터링하는 방법
사용해야 합니다.-Include
에 대한 깃발.Get-ChildItem
내 예:
$Location = "C:\user\files"
$result = (Get-ChildItem $Location\* -Include *.png, *.gif, *.jpg)
경로 위치 뒤에 "*"를 넣는 것을 잊지 마십시오.
언급URL : https://stackoverflow.com/questions/24682939/multiple-and-or-in-powershell-where-object-statement
'programing' 카테고리의 다른 글
Powershell을 사용하여 상위 스코프 변수를 수정하는 방법 (0) | 2023.08.19 |
---|---|
하단 탐색 보기 아이콘과 텍스트 레이블을 항상 표시합니다. (0) | 2023.08.19 |
Listview 목록 업데이트 후 목록 끝으로 스크롤 (0) | 2023.08.19 |
UIButton 하위 클래스를 시작하려면 어떻게 해야 합니까? (0) | 2023.08.19 |
jQuery를 사용하여 요소 ID가 특정 텍스트를 포함하는 페이지의 모든 요소 찾기 (0) | 2023.08.19 |