Как правильно фильтровать несколько строк в сценарии копирования PowerShell



Я использую сценарий PowerShell из этого ответа, чтобы сделать копию файла. Проблема возникает, когда я хочу включить несколько типов файлов с помощью фильтра.



Get-ChildItem $originalPath -filter "*.htm"  | `
foreach{ $targetFile = $htmPath + $_.FullName.SubString($originalPath.Length); `
New-Item -ItemType File -Path $targetFile -Force; `
Copy-Item $_.FullName -destination $targetFile }


работает как сон. Однако проблема возникает, когда я хочу включить несколько типов файлов с помощью фильтра.



Get-ChildItem $originalPath ` 
-filter "*.gif","*.jpg","*.xls*","*.doc*","*.pdf*","*.wav*",".ppt*") | `
foreach{ $targetFile = $htmPath + $_.FullName.SubString($originalPath.Length); `
New-Item -ItemType File -Path $targetFile -Force; `
Copy-Item $_.FullName -destination $targetFile }


дает мне следующую ошибку:



Get-ChildItem : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'Filter'. Specified method is not supported.
At F:datafooCGM.ps1:121 char:36
+ Get-ChildItem $originalPath -filter <<<< "*.gif","*.jpg","*.xls*","*.doc*","*.pdf*","*.wav*",".ppt*" | `
+ CategoryInfo : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.GetChildItemCommand


у меня есть различные итерации скобок, никаких скобок,-filter,-include, определив стоимость переменная (например, $fileFilter) и каждый раз получить выше ошибку, и всегда указывая на то, что следует -filter.



интересное исключение из этого-когда я кодирую -filter "*.gif,*.jpg,*.xls*,*.doc*,*.pdf*,*.wav*,*.ppt*". Ошибок нет, но я и не получаю никаких результатов и ничего в консоль. Я подозреваю, что я случайно закодировал impicit and С этим утверждением?



так что же я делаю не так, и как я могу это исправить?

663   4  

4 ответов:

фильтр принимает только одну строку. -добавить принимает несколько значений, но квалифицируется -путь

что-то вроде этого должно работать (это сделали за меня). Причина для желающих использовать -Filter вместо -Include Это включает в себя огромный хит производительности по сравнению с -Filter.

ниже просто петли каждый тип файла и несколько серверов/рабочих станций, указанных в отдельных файлах.

##  
##  This script will pull from a list of workstations in a text file and search for the specified string


## Change the file path below to where your list of target workstations reside
## Change the file path below to where your list of filetypes reside

$filetypes = gc 'pathToListOffiletypes.txt'
$servers = gc 'pathToListOfWorkstations.txt'

##Set the scope of the variable so it has visibility
set-variable -Name searchString -Scope 0
$searchString = 'whatYouAreSearchingFor'

foreach ($server in $servers)
    {

    foreach ($filetype in $filetypes)
    {

    ## below creates the search path.  This could be further improved to exclude the windows directory
    $serverString = "\"+$server+"\c$\Program Files"


    ## Display the server being queried
    write-host “Server:” $server "searching for " $filetype in $serverString

    Get-ChildItem -Path $serverString -Recurse -Filter $filetype |
    #-Include "*.xml","*.ps1","*.cnf","*.odf","*.conf","*.bat","*.cfg","*.ini","*.config","*.info","*.nfo","*.txt" |
    Select-String -pattern $searchstring | group path | select name | out-file f:\DataCentre\String_Results.txt

    $os = gwmi win32_operatingsystem -computer $server
    $sp = $os | % {$_.servicepackmajorversion}
    $a = $os | % {$_.caption}

    ##  Below will list again the server name as well as its OS and SP
    ##  Because the script may not be monitored, this helps confirm the machine has been successfully scanned
        write-host $server “has completed its " $filetype "scan:” “|” “OS:” $a “SP:” “|” $sp


    }

}
#end script

использовать include-это самый простой способ в соответствии с

http://www.vistax64.com/powershell/168315-get-childitem-filter-files-multiple-extensions.html

Get-ChildItem $originalPath\* -Include @("*.gif", "*.jpg", "*.xls*", "*.doc*", "*.pdf*", "*.wav*", "*.ppt")

Comments

    Ничего не найдено.