Powershell从linux samba复制到本地Windows服务器文件夹

时间:2019-04-02 13:58:29

标签: powershell powershell-v2.0 samba

我需要将文件从Linux samba服务器复制到各种Windows Server 2008。 共享文件夹具有特定的登录名,并且是只读的。 我可以使用Windows资源管理器毫无问题地访问和复制共享文件。

但是,当使用Powershell复制文件时,总是出现如下所示的错误。 我已经尝试过使用复制项,robocopy和bitstransfer,但是它们都给出了错误。

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

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

此方法给我以下错误

  

Copy-Item:访问被拒绝      + CategoryInfo:PermissionDenied:(\ domain.or.ip \ sharedfolder \ file.zip:String)[Copy-Item],UnauthorizedAc     cessException      + FullyQualifiedErrorId:ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.CopyItemCommand   ...   复制项:找不到路径...

所以,我尝试添加凭据参数

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

但是在输入密码后收到此错误:

  

“ New-PSSession:[pxl0mon00013]无法连接到远程服务器> serverhostname ...   WinRM无法处理该请求...错误0x80090311 ...   + CategoryInfo:OpenError(System.Manageme .... RemoteRunspace:RemoteRunspace)[New-PSSession],PSRemotin   gTransportException   + FullyQualifiedErrorId:AuthenticationFailed,PSSessionOpenFailed

然后,我决定试一下BitsTransfer。

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

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

这也给了我一个错误:

  

Start-BitsTransfer:找不到路径   '\ domain.or.ip \ sharedfolder \ file.zip'不存在。   + CategoryInfo:ObjectNotFound:(\ domain.or.ip \ sharedfolder \ file.zip:String)[Start-BitsTransfer],ParentC   ontainsErrorRecordException   + FullyQualifiedErrorId:PathNotFound,Microsoft.BackgroundIntelligentTransfer.Management.NewBitsTransferCommand

请问如何复制该文件?

编辑-20190403

我尝试了以下操作:

get-childitem \\domain.or.ip\sharedfolder\

wich导致:

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

因此,我打开资源管理器并将\ domain.or.ip \ sharedfolder \粘贴到地址栏。它要求我输入用户名和密码,然后该文件可用。 之后,我返回到PowerShell,并再次尝试使用相同的Get-ChildItem cmdlet。然后,我能够按预期列出共享文件夹的内容。

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

最后,我尝试了:

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

它已成功复制。

好吧,只有在我在资源管理器中输入登录信息后,PowerShell才能够找到共享文件夹。 但是我不需要打开资源管理器就可以复制它。

2 个答案:

答案 0 :(得分:0)

您可以使用Invoke-Command提供备用凭据:

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

答案 1 :(得分:0)

我终于设法以一种相对简单的方式成功复制了共享文件。我使用“ NET USE”命令打开一个会话并复制文件,如下所示。

$arq = "file.zip"
$downloadSource = "\\domain.or.ip\sharedfolder"

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

现在,一个新的挑战...对明文密码进行加密。