Копирование Powershell из Linux samba в локальную папку Windows Server

#powershell #powershell-2.0 #samba

#powershell #powershell-2.0 #samba

Вопрос:

Мне нужно скопировать файл с сервера Linux samba на другой Windows Server 2008. Общая папка имеет определенный логин и доступна только для чтения. Я могу получить доступ к общему файлу и скопировать его с помощью проводника Windows без проблем.

Но при использовании PowerShell для копирования файла он всегда выдает ошибку, как показано ниже. Я пытался использовать Copy-item, robocopy и bitstransfer, но все они выдают ошибку.

     $arq = "file.zip"
    $downloadSource = "\domain.or.ipsharedfolder$arq"
    echo $downloadSource

    Copy-Item -Path "$downloadSource" -Destination ".$arqAgenteZabbix"
  

этот метод выдает следующую ошибку

Копировать элемент: доступ запрещен

  • Информация о категории: Разрешено: (domain.or.ipsharedfolderfile.zip:Строка) [Copy-Item], исключение неавторизованного доступа
  • Ошибка с полным разрешением: ItemExistsUnauthorizedAccessError, Microsoft.PowerShell.Команды.CopyItemCommand … Копировать-элемент: путь не найден…

Итак, я попытался добавить параметр учетных данных

     $credencial = New-PSSession -ComputerName "serverhostname" -Credential "serverhostnamesharedfolder"
    Copy-Item -Path "$downloadSource" -Destination ".$arqAgenteZabbix" -ToSession $credencial
  

Но получил эту ошибку после ввода моего пароля:

«New-PSSession: [pxl0mon00013] Не удается подключиться к удаленному серверу > serverhostname… WinRM не удается обработать запрос … ошибка 0x80090311…

  • Информация о категории: Ошибка открытия (System.Manageme….RemoteRunspace:удаленное пространство запуска) [New-PSSession], PSRemotin gTransportException
  • Ошибка с полным разрешением: ошибка аутентификации, ошибка PSSessionOpenFailed

Затем я решил попробовать BitsTransfer.

 Import-Module bitstransfer
    $arq = "file.zip"
    $downloadSource = "\domain.or.ipsharedfolder$arq"

    Start-BitsTransfer -DisplayName DownloadName `
        -TransferType Download `
        -Source $downloadSource `
        -Destination .$arq
  

И это также выдало мне ошибку:

Запуск-передача битов: путь не найден ‘domain.or.ipsharedfolderfile.zip ‘ не существует.

  • Информация о категории: ObjectNotFound: (domain.or.ipsharedfolderfile.zip:Строка) [Start-BitsTransfer], родительское исключение ontainsErrorRecordException
  • Ошибка с полным разрешением: путь не найден, Microsoft.Фоновая интеллектуальная передача.Управление.NewBitsTransferCommand

Как я могу скопировать этот файл, пожалуйста?

РЕДАКТИРОВАТЬ — 20190403

Я попробовал следующее:

 get-childitem \domain.or.ipsharedfolder
  

что привело к:

 Get-ChildItem : Cannot find path '\domain.or.ipsharedfolder' because it does not exist.
At line:1 char:3
  ls <<<<  \domain.or.ipsharedfolder
      CategoryInfo          : ObjectNotFound: (domain.or.ipsharedfolder:String) [Get-ChildItem], ItemNotFo
   undException
      FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
  

Итак, я открыл проводник и вставил domain.or.ip sharedfolder в адресную строку. Он запросил у меня имя пользователя и пароль, после чего файл был доступен.
После этого я вернулся в PowerShell и попробовал еще раз тот же командлет Get-ChildItem. Затем я смог перечислить содержимое общей папки, как и ожидалось.

     Directory: \domain.or.ipsharedfolder
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        01/04/2019     10:06    3896455 file.zip
  

Наконец, я попытался:

 Copy-Item -Path \domain.or.ipsharedfolderfile.zip -Destination ".file.zip"
  

И это было скопировано успешно.

Что ж, только после того, как я ввел свои регистрационные данные в проводнике, PowerShell смог найти общую папку. Но мне нужно, чтобы она копировалась без необходимости открывать проводник.

Ответ №1:

Вы можете предоставить альтернативные учетные данные с помощью Invoke-Command :

 Invoke-Command -ScriptBlock {
$arq = "file.zip"
$downloadSource = "\domain.or.ipsharedfolder$arq"
echo $downloadSource
Copy-Item -Path "$downloadSource" -Destination ".$arqAgenteZabbix"
} -Credential $Cred
  

Комментарии:

1. Я попробовал это, и это выдает мне эту ошибку: Invoke-Command -Credential $credencial -ScriptBlock { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Информация о категории: Недопустимый аргумент: (:) [Invoke-Command], исключение привязки параметров FullyQualifiedErrorId: неоднозначный параметр, Microsoft. PowerShell. Команды. InvokeCommandCommand

Ответ №2:

Мне наконец удалось успешно скопировать общий файл относительно простым способом. Я использовал команду «NET USE», чтобы открыть сеанс и скопировать файл, как показано ниже.

 $arq = "file.zip"
$downloadSource = "\domain.or.ipsharedfolder"

    net use $downloadSource /persistent:no /user:[user] [pass]
    Copy-Item -Path "$downloadSource$arq" -Destination ".$arq"
    net use $downloadSource /delete
  

Теперь новая задача… зашифруйте пароль открытым текстом.