Вопрос: Написание сценария powershell для копирования файлов с определенным расширением из одной папки в другую


Я хотел бы написать сценарий powershell, который вводит следующие параметры:
Папка для копирования, расширения позволяют, папка для копирования и логическое указание, указывающее, должно ли изменение перезапускать IIS, имя пользователя и пароль.
Какие командлеты следует искать, учитывая, что я копирую на удаленный сервер?
Как читать параметры в переменных?
Как перезапустить IIS?

Кодируя, что я могу скопировать несколько папок, как написать сценарий powershell, который вызывает скрипт powershell?


9
2017-10-26 12:11


Источник


Ничего себе, извините за задержку в любом ответе ... Вам все еще нужна помощь? - Marco Shaw
Да, я действительно не знаю, как перезапустить IIS? Как я могу убедиться, что файлы действительно скопированы? - the_drow


Ответы:


Get-ChildItem позволяет вам перечислять файлы и каталоги, в том числе рекурсивно с фильтрами имен файлов. Copy-Item позволяет копировать файл.

Существует много совпадений с точки зрения выбора файлов, часто Copy-Item сам по себе достаточно в зависимости от деталей того, что вам нужно (например, вы хотите сохранить структуру папок?)

Чтобы скопировать все *.foo а также *.bar от StartFolder до DestFolder:

Copy-Item -path "StartFolder" -include "*.foo","*.bar" -Destination "DestFolder"

Если вам нужно сохранить структуру папок, все становится сложнее, потому что вам нужно создать имя папки назначения, например:

$sourcePath = 'C:\StartFolder'
$destPath = 'C:\DestFolder'

Get-ChildItem $sourcePath -Recurse -Include '*.foo', '*.bar' | Foreach-Object `
    {
        $destDir = Split-Path ($_.FullName -Replace [regex]::Escape($sourcePath), $destPath)
        if (!(Test-Path $destDir))
        {
            New-Item -ItemType directory $destDir | Out-Null
        }
        Copy-Item $_ -Destination $destDir
    }

Но robocopy скорее всего, будет проще:

robocopy StartFolder DestFolder *.foo *.bar /s

В конце концов, выбор будет зависеть от деталей того, что нужно.

(В приведенном выше я избегал псевдонимов (например, Copy-Item скорее, чем copy) и явно использовать имена параметров, даже если они являются позиционными.)


20
2018-01-16 09:42



Не работает, я пробовал: Copy-Item -path "C:\Users\username\Pictures\" -include "*.JPG", "*.PNG" -Destination "D:\" с и без -recurse - ничего не происходит - Carmageddon


Я не могу адресовать часть IIS, но копия файла при сохранении структуры каталогов может быть намного проще, чем показано в других ответах:

Copy-Item -path "StartFolder" -Recurse -Include "*.foo","*.bar" -Destination "DestFolder" -Container

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


5
2018-05-10 19:19



Я не могу заставить это работать с -Include... хотя я могу заставить его копировать все без -Include - Ben Polinsky


Если вы используете IIS7, вы можете использовать собственный компонент для репликации содержимого между серверами IIS: http://blog.theplanet.com/2010/05/18/mirroring-server-content-and-configuration-in-iis7/


0
2018-01-16 09:16





Единственное решение, которое сработало для меня

Copy-Item -path 'c:\SourceFolder\*.foo' -destination 'c:\DestFolder'

Другие решения, которые используют -Include параметр не работал.


0
2018-03-16 06:59