PowerShell: Copy-Item в PSSession игнорирует -Filter -Include -Exclude

Использование команды PowerShell Copy-Item для копирования файлов отлично работает локально, но при запуске в PSSession параметры -Filter, -Include и < em>-Exclude показывать никакого эффекта при копировании файлов с удаленного хоста на локальный компьютер. Я использую PowerShell 5.1 как на локальном, так и на удаленном компьютере.

Вот, примеры:

  • Local --› local: работает нормально (т.е. копирует только txt-файлы)

    Copy-Item -Path C:\run\* -Filter *.txt -Destination C:\test\
    
  • Удаленный --› локальный: работает некорректно (игнорирует настройки фильтра и копирует все файлы)

    $sess = New-PSSession -ComputerName <ComputerName> -Credential $cred
    Copy-Item -FromSession $sess -Path C:\run\* -Filter *.txt -Destination C:\test\
    

    То же самое происходит при использовании -Include *.txt или -Exclude *.csv.

  • Локальный --› удаленный: работает нормально (копирует только txt-файлы):

    $sess = New-PSSession -ComputerName <ComputerName> -Credential $cred
    Copy-Item -ToSession $sess -Path C:\run\* -Filter *.txt -Destination C:\test\ 
    

Спасибо за любые подсказки о том, что я делаю неправильно!


person Rantanplan    schedule 02.07.2020    source источник
comment
Аналогичная проблема по этой ссылке без решения: powershell.org/forums/topic/ копировать-элемент-из-pssession   -  person derekbaker783    schedule 02.07.2020
comment
Не то чтобы это отвечало на вопрос, но одним из решений было бы использовать Enter-PSSession для запуска локальной --> удаленной копии с вашего текущего пульта. Итак, получите сеанс на удаленном ящике, затем из этого сеанса получите сеанс на локальном ящике, а затем запустите локальную → удаленную копию из своего вопроса.   -  person derekbaker783    schedule 02.07.2020
comment
Я хочу избежать Enter-PSSession, потому что сценарий должен запускаться без взаимодействия с пользователем. Надо было сказать это раньше, извини.   -  person Rantanplan    schedule 06.07.2020
comment
Вот наш текущий обходной путь на данный момент (архивирование с настройками фильтра, копирование, распаковка): сначала Invoke-Command -Session $sess -Scriptblock {Get-ChildItem C:\onremote\* -Include *.txt | Compress-Archive -DestinationPath "C:\onremote\textfiles.zip" -Force}, затем Copy-Item "C:\onremote\textfiles.zip" -Destination "C:\onlocal\" -FromSession $sess -Recurse -Force и, наконец, Expand-Archive -Path "C:\onlocal\textfiles.zip" -DestinationPath "C:\onlocal\" -Force.   -  person Rantanplan    schedule 27.07.2020


Ответы (1)


Мы все узнали, что с PowerShell есть несколько способов сделать X или Y. Почему бы просто не использовать Invoke-Command?

$sess = New-PSSession -ComputerName <ComputerName> -Credential $cred

Invoke-Command -Session $sess -ScriptBlock {
    Copy-Item -Path 'C:\run\*' -Filter '*.txt' -Destination 'C:\test\'
}

Или просто напрямую

Invoke-Command -ComputerName $ServerName -Credential $cred -ScriptBlock { 
    Copy-Item -Path 'C:\run\*' -Filter '*.txt' -Destination 'C:\test\' 
}
person postanote    schedule 02.07.2020
comment
Это скопирует файлы из одного места на удаленном компьютере в другое место на удаленном компьютере с правильным применением фильтров. Однако я хотел бы скопировать их с удаленного компьютера на локальный компьютер с работающими фильтрами. До сих пор мы использовали обходной путь, при котором мы сначала архивируем нужные файлы, а затем копируем полученный zip-файл и распаковываем его на локальном компьютере: см. мой комментарий выше. - person Rantanplan; 27.07.2020