Сервісний центр VPSGroup ремонт комп'ютерної техніки, заправка картриджів, ремонт оргтехніки, Київ, Виставковий центр, Васильківська, 55

Копіювання файлів на віддалений комп'ютер за допомогою 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.

.