从多个值过滤列表

时间:2018-12-06 20:02:48

标签: list powershell filtering

我有这行:

$output.GetEnumerator() | Where-Object { $_.ItemPath -notlike "*.zip" } | Select ItemPath

示例输出:

ItemPath                                                    
--------                                                    
\\devws04                                                   
\\devws04\c$                                                
\\devws04\c$\share                                          
\\devws04\c$\share\Dieser ORdner ist offline erstellt worden
\\devws04\c$\share\FileOfflineMode - Copy.txt               
\\devws04\c$\share\FileOfflineMode.txt                      
\\devws04\c$\share\Personal                                 
\\devws04\c$\share\Personal\Okey Cuuus.txt                  
\\devws04\c$\share\Portfolio.txt   

该行不包含包含“ * .zip”的路径值。它可以工作,但是我想在这个地方使用变量,而不是将所有内容都附加到与“ and”相同的行上。

我尝试了以下操作:

$ignoreFiles = @("*.zip", "*.psd")
$output.GetEnumerator() | Where-Object { $_.ItemPath -notin $ignoreFiles } | Select ItemPath

还有其他一些片段,但没有一个起作用。结果什么也没做。任何提示表示赞赏!

这是完整的输出:

ItemPath                                                                            
--------                                                                            
\\devws04                                                                           
\\devws04\c$                                                                        
\\devws04\c$\share                                                                  
\\devws04\c$\share\Dieser ORdner ist offline erstellt worden                        
\\devws04\c$\share\Dieser ORdner ist offline erstellt worden\MeineofflineDateien.zip
\\devws04\c$\share\FileOfflineMode - Copy.txt                                       
\\devws04\c$\share\FileOfflineMode.txt                                              
\\devws04\c$\share\Personal                                                         
\\devws04\c$\share\Personal\Okey Cuuus.txt                                          
\\devws04\c$\share\Portfolio.txt 

编辑: 这是实际的代码,我的目标是进行csv导出,但是在我要过滤如上所述的值之前,

$ignoreFiles = "\.zip|\.psd"
#$ignoreFiles = @("*.zip", "*.psd")
    $query = Get-WmiObject -query "SELECT * FROM Win32_OfflineFilesItem"
    $hostName = [System.Net.Dns]::GetHostName()
    $user = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
    $output = @()
    $query | ? {
    $output += [PSCustomObject] @{
            User = $user
            Hostname = $hostName
            ItemPath = $_.ItemPath 
        }
    } 

    $output  | Export-CSV $outputPath -NoTypeInformation # ONLY EXPORT OBJECTS WHERE $_.ItemPath does not contain one of the values from $ignoreFiles!

2 个答案:

答案 0 :(得分:2)

您还可以使用正则表达式来帮助您应对所面临的挑战:

$regex = "\.zip|\.psd"
$paths = $output.GetEnumerator() | Select-Object ItemPath

$paths.ItemPath -notmatch $regex

更新了更多答案

我想这应该可以解决问题

$output = $output | Where-Object {$_.ItemPath -notmatch $ignoreFiles }
$output  | Export-CSV $outputPath -NoTypeInformation # ONLY EXPORT OBJECTS WHERE $_.ItemPath does not contain one of the values from $ignoreFiles!

答案 1 :(得分:0)

不确定$output是什么,

但是使用变量应该完全相同:

$ext = "*.zip"
$output | Where-Object { $_.ItemPath -notlike $ext } | Select ItemPath

您还可以将-notin用于一系列事物,具体取决于输入:

gci | Where-Object { $_.Extension -notin ($ext, ".7z") } | Select FullName