批量拷贝文件到远程计算机的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"