Как вывести несколько расширений файлов, хранящихся в файле .txt на Powershell - PullRequest
0 голосов
/ 05 июля 2018

Моя цель - вывести файлы с расширениями, которые совпадают с теми, которые я храню в файле .txt, но я не знаю, как заставить это работать. Способ, который я пытаюсь сделать сейчас, не генерирует никакого вывода или выводит файлы расширений, которых нет в указанном мною текстовом файле (Extension.txt). Как я должен это исправить? Содержимое моего файла .txt:

*.xlsx,*.xlsm,*.xlsb,*.xltx,*.xltm,*.xls,*.xml

Мой текущий код выглядит следующим образом:

$fileHeaders = @('country','cDrive','dDrive')
$extensions  = ${C:temp:Extension.txt}

$LocContent = Import-Csv "C:\temp\Location.txt" -Header $fileHeaders

$NumberOfDays = Read-Host 'Within how many days the files created would you like to output?'
$SizeOfFile = Read-Host 'Above what size of the files would you like to output (in kb or mb)?'

$Output = ForEach($Row in $LocContent){
    if (($Row.country -ne $null) -and ($Row.cDrive -ne $null) -and ($Row.dDrive -ne $null)){
        Get-ChildItem $Row.cDrive,$Row.dDrive -Force -Include -Recurse |
$extensions             Where-Object LastWriteTime -gt (Get-Date).AddDays(-$NumberOfDays) |
                 Where-Object {$_.length/$SizeOfFile -gt 1} | 
                    Select-Object -Property @{N='File Basename';E={$_.BaseName}}, 
                        @{N='File Extension';E={$_.Extension}},
                        @{N='size in MB';E={$_.Length/1024kb}},
                        Directory,
                        CreationTime, 
                        LastWriteTime, 
                        @{N="Location";E={$Row.country}}         
}

$Output | Format-Table -Auto
$Output | Out-Gridview
$Output | Export-Csv '\NewData.csv' -NoTypeInformation

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Я только что убрал твой код.

Не зная содержания Location.txt,
если в дисках есть повторы, не будет ли Output содержать дубликаты файлов с другой страной?

Без проверки вашего окружения.

## Q:\Test\2018\07\05\SO_51183354.ps1
$fileHeaders = @('country','cDrive','dDrive')
$Extensions = (Get-Content 'C:\temp\Extension.txt') -replace '\*' -split ','

$LocContent = Import-Csv "C:\temp\Location.txt" -Header $fileHeaders |
    Where-Object {($_.country -ne $null) -and 
                  ($_.cDrive  -ne $null) -and 
                  ($_.dDrive  -ne $null) }

$NumberOfDays = Read-Host 'Max file age in days?'
$SizeOfFile   = Read-Host 'Min file size (in kb or mb)?'
$FileAge = (Get-Date).AddDays(-$NumberOfDays)

$Output = ForEach($Row in $LocContent){
  Get-ChildItem $Row.cDrive,$Row.dDrive -Force -Recurse |
    Where-Object {($_.Extension -in $Extensions)  -and
                  ($_.LastWriteTime -gt $FileAge) -and
                  ($_.Length -gt $SizeOfFile) } | 
      Select-Object -Property `
          @{N='File Basename' ;E={$_.BaseName}}, 
          @{N='File Extension';E={$_.Extension}},
          @{N='size in MB'    ;E={$_.Length/1MB}},
               Directory,
               CreationTime, 
               LastWriteTime, 
          @{N="Location"      ;E={$Row.country}}         
}

$Output | Format-Table -Auto
$Output | Out-Gridview
$Output | Export-Csv '\NewData.csv' -NoTypeInformation
0 голосов
/ 05 июля 2018

Это сгенерировало файлы, выводит файлы и проверяет, что они находятся в вашем .txt файле.

Я не удивлен, что ваш код не работает. Вы делали это довольно плохо. С нетерпением ждем вашего улучшения.

$extensions = ((Get-Content C:\temp\Extensions.txt) -join ',') -split ',' -replace '\*',''

Foreach($ext in $extensions){
    Get-ChildItem "C:\temp" -Recurse | select Name, FullName, CreationTime, Extension | Where-Object {$_.Extension -like $ext} | export-csv C:\Files.csv -NoTypeInformation -append
}
...