Windows安装rsync命令一键脚本
在Windows上安装rsync通常需要使用诸如WSL2或Cygwin等解决方案。然而,这些方法可能会导致性能下降、系统资源占用高以及用户体验不佳等问题。因此,我们将通过一个简单的PowerShell脚本来安装cwRsync,避免上述问题。
请注意: 执行这个脚本意味着您同意cwRsync的相关协议。
如何执行脚本?
- 通过以下命令启动PowerShell窗口:
powershell.exe
- 在PowerShell窗口中,运行以下命令以执行远程脚本:
Invoke-Expression -Command ([System.Text.Encoding]::UTF8.GetString((Invoke-WebRequest -Uri "https://util.apio.xyz/public/InstallRsync.ps1" -UseBasicParsing).Content))
这个命令会下载并运行位于 https://util.apio.xyz/public/InstallRsync.ps1
的脚本。
脚本内容
# 检查是否具有管理员权限
function Test-IsAdmin {
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = New-Object Security.Principal.WindowsPrincipal($identity)
return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}
# 以管理员身份运行当前脚本
if (-not (Test-IsAdmin)) {
$arguments = "-NoProfile -ExecutionPolicy Bypass -Command & { $($ExecutionContext.InvokeCommand.ExpandString($MyInvocation.MyCommand.Definition)) }"
Start-Process powershell -Verb runAs -ArgumentList $arguments
exit
}
# 下载并解压文件
$Url = "https://itefix.net/dl/free-software/cwrsync_6.3.1_x64_free.zip"
$ZipFile = "$env:TEMP\cwrsync.zip"
$RsyncFolder = "C:\Program Files\rsync"
# 尝试下载文件
try {
Invoke-WebRequest $Url -OutFile $ZipFile -ErrorAction Stop
} catch {
Write-Host "Error downloading file: $($_.Exception.Message)"
exit
}
# 确认文件存在
if (-Not (Test-Path $ZipFile)) {
Write-Host "Download failed or file not found."
exit
}
# 解压缩文件, 使用 -Force 参数以覆盖现有文件
Expand-Archive -Path $ZipFile -DestinationPath $RsyncFolder -Force
# 赋予Users用户组写入权限
$Acl = Get-Acl -Path $RsyncFolder
$Users = New-Object System.Security.Principal.SecurityIdentifier (New-Object System.Security.Principal.NTAccount("Users")).Translate([System.Security.Principal.SecurityIdentifier])
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($Users, "Modify", "Allow")
$Acl.SetAccessRule($AccessRule)
Set-Acl -Path $RsyncFolder -ACLObject $Acl
# 在 C:\Windows\System32 下创建 rsync.bat 文件
$RsyncBatFile = "C:\Windows\System32\rsync.bat"
$RsyncBatContent = @"
@echo off
SETLOCAL
SET CWRSYNCHOME="C:\Program Files\rsync"
SET HOME=%USERPROFILE%
SET CWOLDPATH=%PATH%
SET PATH=%CWRSYNCHOME%\bin;%PATH%
SET KNOWN_HOSTS_PATH=%USERPROFILE%\.ssh\known_hosts
%CWRSYNCHOME%\bin\rsync.exe -e "\"C:\Program Files\rsync\bin\ssh.exe\" -o Compression=yes -o UserKnownHostsFile=%KNOWN_HOSTS_PATH%" %*
"@
# 检查文件是否已存在,如果不存在则创建
if (-not (Test-Path $RsyncBatFile)) {
Set-Content -Path $RsyncBatFile -Value $RsyncBatContent
}
# 添加到系统环境变量 Path
# $systemPathKey = [Environment]::GetEnvironmentVariable("Path", [EnvironmentVariableTarget]::Machine)
# if (-not ($systemPathKey.Contains("$RsyncFolder\bin"))) {
# $newSystemPathKey = $systemPathKey + ";$RsyncFolder\bin"
# [Environment]::SetEnvironmentVariable("Path", $newSystemPathKey, [EnvironmentVariableTarget]::Machine)
# }
# 更新当前 PowerShell 会话的环境变量
# $env:Path += ";$RsyncFolder\bin"
# 验证安装成功
$rsyncVersion = & rsync --version
if ($LASTEXITCODE -eq 0) {
Write-Host "Rsync installation successful!"
# Write-Host $rsyncVersion
} else {
Write-Host "Rsync installation failed."
}
# 暂停等待按键
Write-Host "Press any key to exit..."
$host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") | Out-Null
脚本做了什么事情?
这个脚本执行了以下操作:
- 检查管理员权限,如果没有,则以管理员身份重新启动。
- 下载并解压cwRsync到"C:\Program Files\rsync"。
将cwRsync的可执行文件添加到系统环境变量Path,以便在命令提示符或PowerShell中直接使用。使用bat脚本封装rsync命令,避免安装git
命令时同步安装的ssh与之冲突。- 验证安装成功,并显示rsync版本信息。
完成这些操作后,您可以在Windows上直接使用rsync命令。
2023年6月11日更新:
添加rsync.bat脚本,避免操作系统中存在多个ssh.exe
导致rsync
报错:rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
。
修复的主要报错信息类似:
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(228) [Receiver=3.2.7]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(228) [sender=3.2.7]
rsync error: error in IPC code (code 14) at pipe.c(85) [sender=3.2.7]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(231) [sender=3.2.7]
Error syncing files: exit status 12
2023年6月13日更新:
注释了无需用到的设置环境变量代码,赋予Users用户组写入rsync文件夹权限,避免Failed to add the host to the list of known hosts (/known_hosts).
错误。
2024年8月15日更新:
与ssh共用known_hosts
文件,同时升级最新版本的cwrsync
,修改脚本地址。支持覆盖升级(重新执行一次命令即可)。
除特别注明外,本站所有文章均为原创。原创文章均已备案且受著作权保护,未经作者书面授权,请勿转载。
打赏
交流区(3)
如遇问题,手动修改上述代码中的版本号为最新版即可。
2024年4月16日 08:14回复
关于您的博客,提个小建议:
点击右下角的下一页
,能否自动回到页头,以减少手动滚动到页头,提高阅读体验。
2024年9月23日 13:32回复
非常感谢您的建议🙏
2024年9月23日 14:03回复
老师你好,我希望能用一个openwrt路由器实现IPv4和IPv6的桥接,请问我该如何实现?我尝试了直接新增dhcpv6的接口,但是效果不甚理想(无法成功获取公网的ipv6,但是直连上级路由的其他设备是可以获取公网的ipv6地)
![%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE20241205230845.png](https://cdn.wyr.me/visitor-files/2024-12-05/1733411344287屏幕截图 2024-12-05 230845.png)你好
,为什么我这里是0039 813C 0600 0075 16xx xx xx,只有前6组是相同的,博客中要前8位相同,这个不同能不能照着修改呢?我系统版本是Win1124H2
大神你好,win11专业版24h2最新版26100.2033,文件如何修改?谢谢
win11专业版24h2最新版26100.2033,Windows Feature Experience Pack 1000.26100.23.0。C:\Windows\System32\termsrv.dll系统自带的这个文件,39 81 3C 06 00 00 0F 85 XX XX XX XX 替换为 B8 00 01 00 00 89 81 38 06 00 00 90。仍然无法远程连接。原来是win11 21h2系统,是可以远程链接的。共享1个主机,2个显示器,2套键鼠,各自独立操作 各自不同的账号,不同的桌面环境。
博主,win11专业版24h2最新版,C:\Windows\System32\termsrv.dll系统自带的这个文件,找不到应该修改哪个字段。我的微信:一三五73二五九五00,谢谢