Фильтр списка из нескольких значений - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть эта строка:

$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".Это работает, но я хочу использовать переменную в этом месте и не добавлять все к одной строке с "и".

Я попытался сделать следующее:

$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 голосов
/ 06 декабря 2018

Вы также можете использовать регулярные выражения, чтобы помочь вам с проблемой, с которой вы столкнулись:

$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!
0 голосов
/ 06 декабря 2018

не уверен, что такое $output,

Но использование переменной должно работать точно так же:

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

Вы также можете использовать -notin для множества вещей, в зависимости отвход:

gci | Where-Object { $_.Extension -notin ($ext, ".7z") } | Select FullName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...