批量拷贝文件到远程计算机的PowerShell脚本

问题:应用安装文件经常需要拷贝到多台Windows 2012服务器,网络共享文件夹已分配写权限。安装文件较多,且各子目录中的文件会不同程度继续增加,使用FTP或资源管理器拷贝均比较麻烦

解决:编写PowerShell脚本,映射网络驱动器,只拷贝新增的文件

$SharePath_S = "\\ip\Setup"
$SharePath_D = "\\ip\Setup"

# 使用指定的用户帐号映射网络共享为驱动器,也可以使用 NET USE L: $SharePath_S "密码" /USER:"用户"
$Network = New-Object -com WScript.Network 
$Network.MapNetworkDrive("X:", $SharePath_S, $true, "帐号", "密码") 
$Network.MapNetworkDrive("Y:", $SharePath_D, $true, "帐号", "密码") 

# 获取目录结构,可进行条件筛选 Where-Object -FilterScript {$_.Mode -notlike "*d*"}
$Files_S = Get-ChildItem X: -Recurse 
$Files_D = Get-ChildItem Y: -Recurse 

Clear-Host 
foreach ($File in $Files_S) {
    # 在目标中查找是否已存在源文件,不做覆盖
    $SameFile = $Files_D | Where-Object  -FilterScript { $_.Fullname -eq ("Y" + ($File.Fullname).Substring(1)) }
    $Date = (Get-Date).ToString()
    if ( $SameFile.Exists ) {
        # 目录的文件长度为空,转换为0
        if ( ([Long] $File.Length) -eq 0 ){
            ($Date) + " Skip Directory:" + ($File.Fullname)
        } else {
            ($Date) + " Skip File:" + ($File.Fullname)
        }
    }   else  {
        if ( ([Long] $File.Length) -eq 0 ){
            ($Date) + " Create Directory:" + ($File.Fullname) 
        } else {
            ($Date) + " Copying File:" + ($File.Fullname) + "  " + [int] ($File.Length / 1024 / 1024) + "MB"
        }
        Copy-Item $File.Fullname ("Y" + ($File.Fullname).Substring(1))
    }
}

$Network.RemoveNetworkDrive("X:",$true,$true)
$Network.RemoveNetworkDrive("Y:",$true,$true)
"Done"

 

posted on 2015-09-26 10:59  波谲云诡  阅读(1962)  评论(0)    收藏  举报