2014-02-21 2 views
0

조건부 필터를 사용하여 모음 $보기를 필터링하는 방법을 알고 싶습니다. C#에서는 술어 필터의 예제를 많이 보았지만 PowerShell에서는 많지 않습니다. PowerShell의 작동 예제를 보는 것이 좋습니다.PowerShell observablecollection 조건부 필터

기본적으로 필터 변수를 문자열로 설정하고 $ view를 새로 고치면 컬렉션은 필자에게 필터와 일치하는 행이나 개체 만 표시하도록 필터링해야합니다. 필터가 비어 있으면 개체의 전체 컬렉션이 표시되어야합니다.

이 양식을 사용하지 않고 콘솔에서 작동해야한다고 생각하지만 PowerShell에서 형식 (system.predicate)의 필터를 만들 수 없었습니다.

$a = New-Object System.Collections.ObjectModel.ObservableCollection[object] 
    $svcs = gsv -ComputerName LocalHost | 
         select @{n="Server";e={$_.machinename}},Name,Displayname,status 

    $svcs | ForEach { 
     $a.Add((
      New-Object PSObject -Property @{ 
       Server = $_.server 
       Name = $_.name 
       Displayname = $_.displayname 
       Status = $_.status 
      } 
     ))  
    } 


    $view = [System.Windows.Data.CollectionViewSource]::GetDefaultView($a) 
    $filter = "bits" 
    $view.Filter = "Predicate FIlter???" 
    $view.Refresh() 

답변

1

단일 매개 변수를 사용하는 스크립트 블록 만 전달하면됩니다. 스크립트 블록은 뷰에 포함하려는 항목에 대해서는 true를 포함하고 포함시키지 않으려는 항목에 대해서는 false를 반환해야합니다.

$view = [System.Windows.Data.CollectionViewSource]::GetDefaultView($a) 
Write-Host "Setting filter to 'vss'" 
$filter = "vss" 
$view.Filter = {param ($item) $item -match $filter} 
$view.Refresh() 
$view 
Write-Host "Setting filter to 'BITS'" 
$filter = "BITS" 
$view.Refresh() 
$view 

편집 : 컴퓨터가 다음과 같은 출력 결과 테스트에 위의 스크립트를 실행 내

의 테스트 컴퓨터에 인쇄 출력을 추가 :

PowerShell을 v4의에 나를 위해 다음 작품
Setting filter to 'vss' 

        Status Server     Name      Displayname    
        ------ ------     ----      -----------    
       Running LocalHost    SQLWriter    SQL Server VSS Writer 
       Stopped LocalHost    vmicvss     Hyper-V Volume Shado... 
       Stopped LocalHost    VSS      Volume Shadow Copy  
Setting filter to 'BITS' 
       Running LocalHost    BITS      Background Intellige... 
+0

+1 참고 사항 : scriptblock은 '{args [0] -match $ filter}'가 될 수 있습니다. –

+0

@ 로버트 - 굉장 !! ..... 나는 이전에 성냥과 같은 것을 시도 했었습니다. 포함하고 있습니다, 등등은 전에는 작동하지 않았던 이유를 모르지만이 하나는 완벽합니다. 고맙습니다 :) – Kiran