我正在尝试创建一个PowerShell脚本,使用其IP地址将文件从本地计算机复制到远程计算机.
我使用以下命令测试了我的客户端 - 服务器连接:
Invoke Command -ComputerName <IP Address> -ScriptBlock {ipconfig} -Credential $credential
Run Code Online (Sandbox Code Playgroud)
(在此命令之前输入$ credential).
我尝试使用Copy-Item和Robocopy命令,但我不清楚它是否会获取我的凭据,然后让我将文件从本地复制到远程机器.具体来说,这些甚至会支持本地远程文件传输吗?
很多时候我遇到了如下错误:用户名和密码错误,源路径不存在或目标路径不存在.但我仍然想确定我是否在正确的轨道上并使用正确的命令来实现我想要的东西,或者是否还有其他我应该考虑使用的东西.我该如何解决这个问题?
看起来您正在尝试使用PowerShell远程复制来复制文件.正如在其他答案中发布的那样,使用Copy-Item和/或Robocopy从源复制到目标计算机上的共享会更简单.
如果要使用PowerShell远程处理复制文件,可以将文件粘贴到变量中并在远程脚本块中使用它.就像是:
$contents = [IO.File]::ReadAllBytes( $localPath )
Invoke-Command -ComputerName <IP Address> `
-Credential $credential `
-ScriptBlock { [IO.File]::WriteAllBytes( 'C:\remotepath', $using:contents ) }
Run Code Online (Sandbox Code Playgroud)
当然,如果您正在阅读的文件非常大,这可能会导致远程连接内存不足(默认情况下,PowerShell会将远程连接限制为大约128MB).
如果您使用PowerShell 2,则需要将字节作为脚本块参数传递:
$contents = [IO.File]::ReadAllBytes( $localPath )
Invoke-Command -ComputerName <IP Address> `
-Credential $credential `
-ScriptBlock {
param(
[byte[]]
$Contents
)
[IO.File]::WriteAllBytes( 'C:\remotepath', $Contents)
} `
-ArgumentList @( ,$contents )
Run Code Online (Sandbox Code Playgroud)
是的,您必须$contents在将数组作为-ArgumentList参数值传递时将其包装在数组中,并且必须以逗号运算符为前缀,,否则您的远程脚本块将只接收第一个字节.
PowerShell的一个好处是(与DOS不同)它支持UNC路径.所以你可以在文学上做:
Copy-Item -Path <local file path> -Destination \\<server IP>\<share>\<path>
Run Code Online (Sandbox Code Playgroud)
当然,您的帐户需要有权访问该位置.如果您需要输入备用凭据,则可以使用预先验证net use \\<server IP>\<share> /user:[<domain>\]<user> <password>
| 归档时间: |
|
| 查看次数: |
21841 次 |
| 最近记录: |