Powershell需要从远程机器复制到我的机器上

时间:2018-05-11 21:54:10

标签: powershell copy copy-paste paste

$Computers = Get-Content "C:\TEMP\MSGLOG\COPY.txt"

ForEach ($computer in $computers)
{
    Invoke-Command -ComputerName $computer -ScriptBlock {
        Copy-Item "C:\\Program Files (x86)\\DST\\messaging*.log" -Destination "MYMACHINE\temp\MSGLOG\$Computer\"
    }
}

所以我正在尝试将其从~400计算机复制日志到我的机器上。每台计算机都使用这些日志的日期命名格式,所以我想将这些文件复制到一个以它们来自哪台计算机命名的文件夹中,但经过多次尝试后,我无法弄清楚这一点。

3 个答案:

答案 0 :(得分:1)

在这种情况下,我认为不需要Invoke-Command。您应该可以从\\hostname\C$\.

进行复制

Ex(未经测试):

$Computers = Get-Content "C:\TEMP\MSGLOG\COPY.txt"
$MyMachine = "myMachine"

foreach($Computer in $Computers)
{
    Copy-Item -Path "\\$Computer\C$\Program Files (x86)\DST\" -Include "messaging*.log" -Destination "\\$MyMachine\temp\MSGLOG\$Computer\" -Verbose -WhatIf
}

如果这样可以为您提供所需的结果,只需删除-whatif然后再次运行。

注意:您的示例显示目标是共享。从MyMachine的名称我会认为这是本地的。如果是这样,请将-Destination更改为本地路径(只是为了避免不必要的减速)。此外,还包括-verbose,以便在Copy-Item流程

期间打印正在执行的操作

答案 1 :(得分:1)

file extension在本地计算机上定义,但scriptblock在远程计算机上运行。当远程计算机尝试使用$computer时,它会获得一个空字符串。

您需要$computer表单,该表单会将值带入scriptblock并转到远程计算机:

$using:computer

或者您需要一个远程计算机已经存在的变量,例如$Computers = Get-Content "C:\TEMP\MSGLOG\COPY.txt" ForEach ($computer in $computers) { Invoke-Command -ComputerName $computer -ScriptBlock { Copy-Item "C:\Program Files (x86)\DST\messaging*.log" -Destination "\\MYMACHINE\temp\MSGLOG\$using:Computer\" } }

答案 2 :(得分:0)

如果您在主机和遥控器上使用PowerShell 5.1,则可以将Copy-ItemFromSessionToSession参数一起使用。 microsoft的示例:

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\PattiFul"
Copy-Item "C:\MyRemoteData\test.log" -Destination "D:\MyLocalData\" -FromSession $Session