以下脚本在servers.txt中的服务器上创建一个名为指定日期的文件夹,然后将运行脚本的文件夹复制到该文件夹。
例如,它会创建文件夹" 3-22-15(night)"在SERVER1,SERVER2等上,然后复制"包含脚本的目录"到" 3-22-15(夜晚)"。
$CurrentLocation = get-location
$DeploymentDate = "3-22-15 (night)"
Foreach($server in get-content "servers.txt"){
New-Item -ErrorAction SilentlyContinue -ItemType directory -Path \\$server\C$\Deployments\$DeploymentDate
copy-item -Path $CurrentLocation -Destination \\$server\C$\Deployments\$DeploymentDate\ -ErrorAction SilentlyContinue -recurse
}
如何修改脚本以包含复制到\\$server\C$\Deployments\$DeploymentDate\
的每个文件的文件验证?
我希望它输出一条错误消息,其中包含未通过验证检查的文件,但是要继续复制。
我打算尝试这样的事情:
function SafeCopy ($SourcePath,$DestinationPath,$SourceFileName) {
#MD5 Check Function
function Check-MD5 ($FilePath) {
$md5=New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash=[System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::ReadAllBytes($FilePath)))
Return $hash
} # EndOf function Check-MD5
$MD5Source=Check-MD5 $SourcePath
Copy-Item $SourcePath\$SourceFileName $DestinationPath
$MD5Destination=Check-MD5 $DestinationPath
if (Test-Path $DestinationPath) {
if ($MD5Destination -match $MD5Source) {
Write-Host "`nThe file `"$SourcePath`" has been copied in `"$DestinationPath`" successfully.`n" -ForegroundColor DarkGreen
} else {
Write-Host "`nThe file `"$SourcePath`" has been copied in `"$DestinationPath`" but the CRC check failed!`n" -ForegroundColor DarkRed
}
} else {
Write-Host "`nThe file `"$SourcePath`" has not been copied in `"$DestinationPath`"!`n" -ForegroundColor DarkRed
}
} # EndOf function SafeCopy
但我不确定如何实施它。
答案 0 :(得分:0)
我不是一个有才华的脚本编写者,也不是我在收音机上播放一个,但我把它放在一起似乎有效。如上所述,比较的文件大小越大,它就越慢。
Param
(
[parameter(Mandatory=$true,Position=1,ValueFromPipeLine=$true)][string]$source,
[parameter(Mandatory=$true,Position=2,ValueFromPipeLine=$true)][string]$dest
)
$countsource = @(Get-ChildItem -Path $source -Directory)
$countdest = @(Get-ChildItem -Path $dest -Directory)
IF($countsource = $countdest){
"$source equals $dest"
}
Else{
"$source does not match $dest"
}
示例使用和输出。 TODO:如果文件夹没有相同数量的项目(子文件夹和文件),则添加文件夹项目计数比较,警告或中断。
因此,复制文件夹,然后在复制完成后将Folder-Compare作为函数运行。
PS C:\Scripts> .\Folder-Compare.ps1 -source C:\Scripts\temp -dest C:\aaa
C:\Scripts\temp does not match C:\aaa