将多个文件复制到远程位置,并在powershell中显示进度详细信息

将多个文件复制到远程位置,并在powershell中显示进度详细信息,powershell,Powershell,我正在尝试将文件从本地计算机复制到远程位置。 当我运行脚本时,它将检查远程位置上是否存在文件夹。如果未创建,则将创建一个目录。创建目录后,它将从源位置复制所有文件 我的脚本可以正常工作,但我希望在屏幕上输出要复制的文件 下面的代码可以很好地复制文件,但没有显示正在复制的文件名 $machine = $env:COMPUTERNAME $dest= "\\192.168.1.5\d$\test\" $source = "C:\windows\logs\" $newPath = Join-Pa

我正在尝试将文件从本地计算机复制到远程位置。 当我运行脚本时,它将检查远程位置上是否存在文件夹。如果未创建,则将创建一个目录。创建目录后,它将从源位置复制所有文件

我的脚本可以正常工作,但我希望在屏幕上输出要复制的文件

下面的代码可以很好地复制文件,但没有显示正在复制的文件名

$machine = $env:COMPUTERNAME

$dest= "\\192.168.1.5\d$\test\"

$source = "C:\windows\logs\"

$newPath = Join-Path $dest -childpath $machine

 if(!(Test-Path -Path $newPath )){
        New-Item $newPath -type directory
             foreach ($file in $source)
             {
                    write-host "Copying Files: " $file  -foregroundcolor DarkGreen -backgroundcolor white
                    Copy-Item $file -Destination $newPath -force

             }

        }else{
        foreach ($file in $source)
        {
        write-host "Copying Files: " $file  -foregroundcolor DarkGreen -backgroundcolor white
    Copy-Item -Path $file -Destination $newPath -recurse -Force

        }   
    }

这个代码应该可以工作。我修改了if语句,这样您就不会有多余的代码和修改的$source,这样foreach将与您的编写进度一起工作

$machine = $env:COMPUTERNAME

$dest= "\\192.168.1.5\d$\test\"

$sourcePath = 'C:\windows\logs\'

$source = Get-ChildItem $sourcePath

$newPath = Join-Path $dest -childpath $machine

if(!(Test-Path -Path $newPath )){
    New-Item $newPath -type directory
}

$count = $source.count
$operation = 0

foreach ($file in $source)
{
    $operation++
    write-host 'Copying File: ' $file  -foregroundcolor DarkGreen -backgroundcolor white
    Write-Progress -Activity 'Copying data' -Status 'Progress' -PercentComplete ($operation/$count*100)
    Copy-Item $file -Destination $newPath -force

}

有一个commandlet
Write Progress
,应该很方便。下面是:为什么在if块和else块中有相同的复制代码?为什么不直接使用if来确保文件夹存在,并在一次操作中复制所有文件夹下的内容呢?此脚本仍处于开发阶段。如果文件夹不存在,它将创建文件夹并复制文件。所以,我把一个复制文件命令放在测试路径下,另一个没有测试路径。谢谢你的回答。投票通过。