Copy-Item用于从本地复制文件到使用凭据删除服务器

时间:2017-01-12 16:04:14

标签: windows powershell file-copying windows-scripting copy-item

我正在尝试将一些文件和文件夹从本地计算机复制到远程服务器:

Copy-Item .\copy_test.txt -destination "\\serverip\c$\backups\"

但我收到了错误:

Copy-Item : Logon failure: unknown user name or bad password.
At line:1 char:10
+ Copy-Item <<<<  .\copy_test.txt -destination "\\serverip\c$\backups\" -verbose
    + CategoryInfo          : NotSpecified: (:) [Copy-Item], IOException
    + FullyQualifiedErrorId : System.IO.IOException,Microsoft.PowerShell.Commands.CopyItemCommand

我正在尝试使用凭据,但此命令不允许-Credential参数。我正在搜索很多,在每个例子中,执行Copy-Item $source -destination $destination命令非常简单,我想知道为什么我的工作站会这么难。

创建新的PSDrive

我尝试创建New-PSDrive,但它没有用。

$creds = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist $username, $password

New-PSDrive -Name X -PSProvider FileSystem -Root '\\$serverip\c$' -Credential $creds -Persist
Copy-Item '.\copy_test.txt' -Destination 'X:\backups'
Remove-PSDrive -Name X

这是错误信息:

PS C:\Users\Administrator\Desktop> .\copyfiles.ps1
New-PSDrive : The network path was not found
At C:\Users\Administrator\Desktop\copyfiles.ps1:11 char:1
+ New-PSDrive -Name X -PSProvider FileSystem -Root '\\$serverip\c$' -Credential $c ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (X:PSDriveInfo) [New-PSDrive], Win32Exception
    + FullyQualifiedErrorId : CouldNotMapNetworkDrive,Microsoft.PowerShell.Commands.NewPSDriveC

Copy-Item : Cannot find drive. A drive with the name 'X' does not exist.
At C:\Users\Administrator\Desktop\copyfiles.ps1:12 char:1
+ Copy-Item '.\copy_test.txt' -Destination 'X:\backups'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (X:String) [Copy-Item], DriveNotFoundException
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.CopyItemCommand

Remove-PSDrive : Cannot find drive. A drive with the name 'X' does not exist.
At C:\Users\Administrator\Desktop\copyfiles.ps1:13 char:1
+ Remove-PSDrive -Name X
+ ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (X:String) [Remove-PSDrive], DriveNotFoundExcepti
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.RemovePSDriveCommand

我的服务器

我的服务器是AWS中的Windows实例。我有正确的权限,因为我能够运行其他命令,如Invoke-Command,以便检查远程服务器中的某些服务。

PS> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
4      0      -1     -1

2 个答案:

答案 0 :(得分:1)

如果访问远程共享需要凭据,则需要先将其映射到(PS)驱动器,然后才能将其与其他cmdlet一起使用。

$cred = Get-Credential
New-PSDrive -Name X -PSProvider FileSystem -Root "\\$serverip\c$" -Credential $cred -Persist
Copy-Item '.\copy_test.txt' -Destination 'X:\backups'
Remove-PSDrive -Name X

答案 1 :(得分:0)

我找到了解决方案。我使用的是PowerShell 4.0版,然后将我的版本升级到5.0

在以前的版本中,Copy-Item不允许使用凭据。现在可以通过服务器之间的会话复制文件:

$deploy_dest = "C:\backup"
$username = "$server\Administrator"
$password =  Get-Content C:\mypassword.txt | ConvertTo-SecureString -AsPlainText -Force

$creds = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password

$session = New-PSSession -ComputerName $server -Credential $creds

Copy-Item -Path .\copy_test.txt -Destination -ToSession $session