我需要编写Windows批处理文件来解决以下问题。
我需要确保文件从其原始服务器(Unix)完全传输到目标服务器(Windows)。
我正在尝试比较两个服务器之间的文件大小,解决方案需要在Windows批处理文件中(我在使用DOS批处理文件中的SSH连接到远程Unix服务器时遇到问题)
答案 0 :(得分:0)
从您可以使用SSH的事实来看,我假设您还拥有SFTP访问权限。
您可以使用WinSCP .NET assembly使用以下PowerShell脚本。
param (
$sessionUrl = "sftp://user:mypassword;fingerprint=ssh-rsa-xxxxxxxxx...=@example.com/",
$localPath = "C:\path\file.dat",
$remotePath = "/path/file.dat"
)
$localSize = (Get-Item $localPath).Length
Write-Host "$localPath has $localSize bytes"
# Load WinSCP .NET assembly
Add-Type -Path (Join-Path $PSScriptRoot "WinSCPnet.dll")
# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions.ParseUrl($sessionUrl)
$session = New-Object WinSCP.Session
# Connect
$session.Open($sessionOptions)
$remoteSize = $session.GetFileInfo($remotePath).Length
$session.Dispose()
Write-Host "$remotePath has $remoteSize bytes"
# Compare cheksums
if ($localSize -eq $remoteSize)
{
Write-Host "Match"
$result = 0
}
else
{
Write-Host "Does NOT match"
$result = 1
}
exit $result
甚至更好,比较文件校验和,而不仅仅是大小,如果您的服务器支持,请参阅: Verify checksum of a remote file against a local file over SFTP/FTP protocol
(我是WinSCP的作者)