Копіювання файлів на віддалений комп'ютер за допомогою PowerShell.
При копіюванні файлів на віддалений комп'ютер за допомогою командлета Copy-Item можуть виникнути деякі проблеми, і сьогодні мова піде про те, як їх можна обійти.
Наприклад, нам необхідно скопіювати файли з локальної папки C: \ Scripts на віддалений сервер DC02 в папку C: \ Temp. Для початку спробуємо таку команду:
Copy-Item -Path C: \ Scripts -Destination \\ DC02 \ Temp
В принципі команда правильна, але для того, щоб вона відпрацювала, папка Temp на віддаленому комп'ютері повинна бути розшарено.Як варіант, можна скористатися адміністративної шарою, яка є на будь-якому комп'ютері за замовчуванням:
Copy-Item -Path C: \ Scripts -Destination \\ DC02 \ C $ \ Temp
Але щоб потрапити на адміністративну кулі необхідно виконати команду від імені користувача, що має адміністративний доступ на віддаленому комп'ютері.В іншому випадку отримаємо помилку доступу.
Для введення альтернативних облікових даних у командлет Copy-Item є спеціальний ключ Credential, тому спробуємо так:
Copy-Item -Path C: \ Scripts -Destination \\ DC02 \ C $ \ Temp -Credential $ (Get-Credentials)
Однак і тут не все гладко. Виявляється Copy-Item не підтримує введення облікових даних для файлової системи.
Обійти це обмеження можна кількома шляхами. Наприклад командлет New-PSDrive дозволяє вказувати облікові дані, тому можна подмонтировать папку на віддаленому комп'ютері як мережевий диск:
New-PSDrive -Name X -PSProvider FileSystem -Root "\\ dc02 \ C $ \ Temp" - Credential $ (Get-Credential)
Копіювати файли за допомогою Copy-Item:
Copy-Item -Path C: \ Scripts -Destination "X:" -Recurse -Force
І видалити диск:
Remove-PSDrive -Name X -Force
Як варіант, можна віддалено розшарити потрібну папку.Для початку створимо на віддалений комп'ютер CIM-сесію з правами адміністратора:
$ session = New-CimSession -ComputerName dc02 -Credential $ (Get-Credential)
Потім розшарено папку і видамо до ній доступ:
New-SMBShare -Name "Temp" -Path "C: \ Temp" -CimSession $ session -Fullaccess "Everyone"
На створену кулі скопіюємо потрібні файли:
Copy-Item -Path C: \ Scripts -Destination \\ DC02 \ Temp -Recurse -Force
І помітили сліди:)
Remove-SMBShare -Name "Temp" -CimSession $ session -Force
Remove-CimSession $ session
І ще один варіант.У п'ятій версії PowerShell у командлет Copy-Item з'явилися ключі ToSession і FromSession, що дають можливість копіювати файли прямо в віддалену сесію або з неї. Для прикладу створимо сесію на dc02:
$ credentials = Get-Credential
$ session = New-PSSession -ComputerName dc02 -Credential $ credentials
Після того, як сесія створена , можна вільно копіювати файли на віддалений комп'ютер:
Copy-Item -Path C: \ Scripts -Destination C: \ Temp -Recurse -ToSession $ session
і назад :
Copy-Item -Path C: \ Temp -Destination C: \ Temp -Recurse -Force -FromSession $ session
Це найзручніший і, що важливо, безпечний спосіб.Але, на жаль, він доступний тільки в PowerShell 5.0.
.