Powershell-”的;“复制项目”;Invoke命令的scriptblock中的命令

Powershell-”的;“复制项目”;Invoke命令的scriptblock中的命令,powershell,file-copying,Powershell,File Copying,我需要使用powershell脚本将文件从一个远程服务器复制到另一个远程服务器 我尝试过的:- 虽然我使用了下面的powershell命令,但工作正常。(表示文件从一台服务器复制到另一台服务器) 但当我使用下面的脚本时,它给出了错误“找不到路径…”,如下所示 实际上,该路径上存在文件 我已经尝试参考以下堆栈溢出问题的答案 我还尝试使用 Get-Help Invoke-Command 问题:- 如何在脚本(2)中的“调用命令(脚本块)”中使用“复制项”命令来复制文件 有没有

我需要使用powershell脚本将文件从一个远程服务器复制到另一个远程服务器

我尝试过的:-

虽然我使用了下面的powershell命令,但工作正常。(表示文件从一台服务器复制到另一台服务器)

但当我使用下面的脚本时,它给出了错误“找不到路径…”,如下所示

实际上,该路径上存在文件

我已经尝试参考以下堆栈溢出问题的答案

我还尝试使用

 Get-Help Invoke-Command
问题:-

  • 如何在脚本(2)中的“调用命令(脚本块)”中使用“复制项”命令来复制文件
  • 有没有更好的方法来实现这一点(意味着最佳实践)

  • Invoke命令
    具有参数
    -ArgumentList
    ,该参数可用于在远程会话中提供本地变量的值。问题是:它只是变量的值。没有文件

    你能做什么:
    在小文件上使用
    Get Content-Raw
    将contant保存在变量中。在目标系统上,使用该文件的
    -值创建一个
    新项目
    。然而,这不是很有效

    例如:

    $txt = Get-Content -Raw -Path "C:\test\oldFile.txt"
    $Session = New-PSSession 127.0.0.1
    Invoke-Command -Session $Session -ScriptBlock { Param($Txt) New-Item -Path c:\test\newFile.txt -Value $txt }  -ArgumentList $txt 
    #Get-PSSession | Remove-PSSession
    
    结果:

       Verzeichnis: C:\test    # Sry german OS
    
    
    Mode                LastWriteTime         Length Name                      PSComputerName           
    ----                -------------         ------ ----                      --------------           
    -a----       03.09.2020     12:23         658033 newFile.txt               127.0.0.1  
    
    你应该做什么:
    我认为使用
    Copy Item-ToSession$Session
    是正确的方法。它只是为你的目的而做的。缺点是,目标目录需要存在。但无论如何,这两个cmdlet都需要PSSession。因此,您可以在相同的PSSession中使用
    Invoke命令
    。首先创建一个PSSession。使用
    Invoke命令
    创建目录。然后使用
    Copy Item
    将文件移动到正确的位置。最后,您可以使用
    Invoke命令
    完成一些完成步骤。完成以下操作后,不要忘记
    删除PSSession

    $DestinationPath = "C:\test"
    Invoke-Command -Session $Session -ScriptBlock { Param($Destination) New-Item -Path $Destination -ItemType Directory }  -ArgumentList $DestinationPath
    Copy-Item -Path "C:\test\oldFile.txt" -ToSession $Session -Destination "c:\test\newFile.txt"
    Invoke-Command -Session $Session -ScriptBlock { write-host "Do some stuff" }
    $Session | Remove-PSSession
    

    C:\windows.txt仅在调用计算机上存在??如果您的命令成功,您只需在远程计算机上将windows.txt从C:\复制到C:\即可host@Dough莫勒:是的。为了现在的测试目的,我刚刚将windows.txt保存在一台机器(源)的C:\drive,一旦命令成功,文件将复制到另一台机器(目标)C:\drive。