Гид по технологиям

Как копировать файл на удалённый компьютер с помощью PowerShell

5 min read Sysadmin Обновлено 17 Dec 2025
Копировать файлы на удалённый ПК через PowerShell
Копировать файлы на удалённый ПК через PowerShell

Иллюстрация: обмен файлами между локальным и удалённым компьютером через PowerShell

Кому это пригодится

  • Системным администраторам, которые автоматизируют перенос конфигураций и логов.
  • Инженерам поддержки, которые быстро доставляют патчи и утилиты на клиентские ПК.
  • DevOps-специалистам, работающим с Windows-инфраструктурой.

Краткое определение терминов

  • WinRM — служба удалённого управления Windows, которую использует PowerShell Remoting.
  • PSSession — удалённая сессия PowerShell на другом компьютере.
  • PSCredential — объект PowerShell для безопасного хранения учётных данных.

Почему стоит передавать файлы с помощью PowerShell

PowerShell удобен для передачи файлов по ряду причин:

  • Скорость: при работе с большим количеством файлов или при автоматизации PowerShell часто быстрее GUI.
  • Автоматизация: сценарии можно запускать по расписанию или в ответ на события.
  • Гибкость: можно работать через WinRM/SMB, а при расширении — через FTP/SFTP/SSH-модули.
  • Управление ошибками: встроенные механизмы обработки ошибок позволяют реагировать на неудачные передачи.
  • Отчётность: легко формировать логи и сводки по объёму и результатам передачи.

Важно: выбранный метод должен соответствовать требованиям безопасности сети и политики компании.

1. Настройка удалённого подключения (включение PowerShell Remoting)

Перед копированием нужно обеспечить подключение к удалённому компьютеру.

  1. Откройте PowerShell от имени администратора и выполните:
Enable-PSRemoting -Force -Verbose

Скриншот: команда Enable-PSRemoting в PowerShell

  1. Если появится ошибка, выполните:
Set-WsManQuickConfig

Скриншот: команда Set-WsManQuickConfig в PowerShell

  1. Настройте список доверенных хостов (вместо AFAM укажите имя или IP удалённого компьютера):
winrm set winrm/config/client '@{TrustedHosts="AFAM"}'

Скриншот: настройка TrustedHosts через winrm

  1. Перезапустите службу WinRM и проверьте удалённый хост:
Restart-Service WinRM
Test-WsMan AFAM

Заметки:

  • В доменной среде предпочтительнее настраивать WinRM через GPO.
  • Для безопасной работы используйте HTTPS (см. раздел «Безопасность» ниже).

2. Копирование одного файла через PSSession и Copy-Item

  1. Создайте сессию и укажите учётные данные:
$credential = Get-Credential
$SESSION = New-PSSession -ComputerName 'AFAM' -Credential $credential
  1. Войдите в сессию (если нужно интерактивно):
Enter-PSSession $SESSION
  1. Копирование файла с локального на удалённый компьютер — пример:
Copy-Item -Path "C:\local\path\file.txt" -Destination "C:\remote\path\file.txt" -ToSession $SESSION

Примечания:

  • Если у вас версия PowerShell, где флаг -ToSession не доступен, можно использовать сетевую шару (UNC) или предварительно выполнить команду внутри сессии.
  • После работы выйдите из сессии:
Exit-PSSession
Remove-PSSession $SESSION

Скриншот: создание и использование PSSession

3. Копирование нескольких файлов из локальной папки на удалённый ПК

Простой сценарий (используйте реальные значения переменных):

$username = "username"
$password = "password"
$remote_path = "\\remote_computer\c$\path\to\destination"
$local_path = "C:\path\to\local\files"

$credential = New-Object System.Management.Automation.PSCredential ($username, (ConvertTo-SecureString $password -AsPlainText -Force))
$files = Get-ChildItem $local_path

foreach ($file in $files) {
  Copy-Item -Path $file.FullName -Destination $remote_path -Credential $credential
}

Подсказки:

  • Хранить пароли в открытом виде в скриптах нежелательно. Лучше использовать защищённые хранилища (Credential Manager, секреты в CI/CD).
  • Если у вас большие объёмы данных, рассмотрите использование Robocopy по SMB с параметрами возобновления.

Альтернативные подходы

  • Копирование через SMB/UNC-путь (\host\share) — просто, но требует настроенного шаринга и прав доступа.
  • Robocopy — удобен для массовой синхронизации больших каталогов и возобновления при обрывах.
  • Posh-SSH / SFTP-модули — если доступен SSH на удалённой системе.
  • FTP/FTPS — для систем, где не разрешён SMB/WinRM, но работает файловый сервер.

Когда метод не сработает (примеры)

  • WinRM отключён или заблокирован брандмауэром.
  • Компьютеры в разных сетях без маршрута или VPN.
  • Админские шаринги (C$) отключены политикой безопасности.
  • Ограничения по политике групп (GPO) не позволяют подключаться к удалённым сессиям.
  • Файл занят процессом на удалённом хосте и блокируется системой.

Проверка успешности передачи — тесты и критерии приёмки

Критерии приёмки:

  • Файл появился в целевой папке.
  • Размер файла совпадает с исходным.
  • Контрольные суммы совпадают (например, Get-FileHash).
  • В логах отсутствуют ошибки или предупреждения.

Простейшие тесты:

  1. Скопировать тестовый файл и выполнить:
$srcHash = Get-FileHash C:\local\file.txt
$dstHash = Invoke-Command -Session $SESSION -ScriptBlock { Get-FileHash 'C:\remote\path\file.txt' }
$srcHash.Hash -eq $dstHash.Hash
  1. Проверить количество файлов и общий объём с помощью Get-ChildItem и Measure-Object.

Безопасность и жёсткая конфигурация

Рекомендации по безопасности при передаче файлов:

  • По возможности используйте WinRM по HTTPS (сертификаты) вместо HTTP.
  • Ограничьте TrustedHosts и используйте аутентификацию на основе домена (Kerberos).
  • Применяйте принцип наименьших привилегий: скрипт должен выполняться от учётной записи с минимально необходимыми правами.
  • Не храните пароли в открытом виде; используйте SecureString, хранение секретов или Managed Identities.
  • Включите аудит доступа и логи PowerShell для расследования инцидентов.
  • Если используете SMB, включите подписывание и шифрование SMB по возможности.

Руководство действий (SOP) для администратора

  1. Подготовка:
    • Проверить сетевой доступ и DNS/IP.
    • Убедиться, что WinRM включён и порт открыт.
  2. Авторизация:
    • Получить/создать PSCredential безопасным способом.
  3. Выполнение:
    • Установить PSSession, выполнить Copy-Item или Robocopy.
  4. Проверка:
    • Сравнить хеши, посчитать файлы, проверить журналы.
  5. Очистка:
    • Удалить временные сессии и локальные пароли/файлы.

Контрольные списки по ролям

Системный администратор:

  • Убедиться, что WinRM и брандмауэр настроены.
  • Настроить GPO для массового включения.
  • Проверить журналы на предмет ошибок.

Инженер поддержки:

  • Подготовить учётные данные и инструкции для конечного пользователя.
  • Тестировать передачу на тестовой машине.

Специалист по безопасности:

  • Проверить, что данные передаются по защищённому каналу.
  • Убедиться в отсутствии хранения паролей в открытом виде.

Модель принятия решения — какая команда подойдёт

flowchart TD
  A[Нужно скопировать файл] --> B{Удалённый хост под управлением Windows?}
  B -- Да --> C{WinRM доступен?}
  B -- Нет --> D[Рассмотрите SFTP/SSH или SMB]
  C -- Да --> E[Используйте New-PSSession + Copy-Item]
  C -- Нет --> F{Можно ли настроить SMB/шару?}
  F -- Да --> G[Используйте Copy-Item по UNC или Robocopy]
  F -- Нет --> H[Используйте перенос через общий файловый сервер или SFTP]

Советы по отладке распространённых ошибок

  • Ошибка аутентификации: проверьте формат учётных данных, домен и политику паролей.
  • Ошибка TrustedHosts: добавьте хост в TrustedHosts или используйте Kerberos в домене.
  • Блокировка портов: проверьте правила брандмауэра и маршрутизацию.
  • Большие файлы обрываются: используйте Robocopy с параметрами возобновления или разбейте файл на части.

Совместимость и миграция

  • PowerShell Remoting работает между Windows-машинами; для кросс-платформенных сценариев рассмотрите SSH-основанный remoting в PowerShell Core.
  • При переходе с локального выполнения на централизованное CI следует хранить секреты в защищённом хранилище (Vault).

Короткая сводка

PowerShell даёт гибкие и автоматизируемые способы копирования файлов на удалённые компьютеры в Windows. Начать нужно с настройки WinRM, затем выбрать подходящий метод (Copy-Item с PSSession, UNC-путь или Robocopy). Обязательно проверить целостность файлов после передачи и применить меры безопасности: шифрование канала, ограничение привилегий и безопасное хранение учётных данных.

Важно: тестируйте сценарии в безопасной тестовой среде перед развёртыванием в продакшен.

Глоссарий (по одной строке)

  • WinRM — протокол и служба удалённого управления Windows.
  • PSSession — удалённая интерактивная или неинтерактивная сессия PowerShell.
  • PSCredential — объект для безопасного хранения логина и пароля в PowerShell.
  • UNC — универсальный формат сетевого пути (\server\share).
  • Robocopy — утилита Windows для надёжного копирования каталогов.

Если хотите, могу подготовить готовые скрипты для вашего конкретного сценария (доменная среда, рабочая группа, большие файлы или ограниченный доступ).

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Клавиатура автоматически выполняет сочетания — как исправить
Техподдержка

Клавиатура автоматически выполняет сочетания — как исправить

Батарея ноутбука застряла на 0% — как исправить
Ноутбуки

Батарея ноутбука застряла на 0% — как исправить

Тёмная тема в React с useState и useEffect
Frontend

Тёмная тема в React с useState и useEffect

Установка KB4474419 для Windows 7 — пошагово
Windows

Установка KB4474419 для Windows 7 — пошагово

Excel для резюме: готовим и настраиваем
Карьера

Excel для резюме: готовим и настраиваем

Как найти дешёвый бензин рядом
Авто

Как найти дешёвый бензин рядом