如何用PowerShell脚本通过SSH连接Mac并迁移指定格式CSV文件
用PowerShell通过SSH迁移Mac上指定格式的CSV文件
1. 确认Windows已安装OpenSSH客户端
Windows 10 1809及以上、Windows 11默认自带OpenSSH客户端,先验证是否可用:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Client*'
如果状态显示NotPresent,运行以下命令安装:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
2. 编写PowerShell迁移脚本
创建名为Migrate-MacCsv.ps1的脚本,替换其中的配置参数为你的实际信息:
# 核心配置 $macUser = "你的Mac用户名" $macHost = "Mac的IP地址/主机名" $macSourceDir = "/Users/$macUser/Downloads/" $localDestDir = "C:\本地存储文件夹路径\" # 示例:"C:\MacCsvBackup\" $filePattern = "??????????????????-202???????????.csv" # 确保本地目标文件夹存在 if (-not (Test-Path $localDestDir)) { New-Item -ItemType Directory -Path $localDestDir | Out-Null } # 1. 获取Mac上符合格式的文件列表 $remoteFiles = ssh "$macUser@$macHost" "ls -1 $macSourceDir$filePattern" if ($LASTEXITCODE -ne 0) { Write-Error "获取远程文件列表失败,请检查SSH连接或路径" exit 1 } # 2. 逐个迁移(复制+删除源文件) foreach ($file in $remoteFiles) { if ([string]::IsNullOrWhiteSpace($file)) { continue } # 复制文件到本地 scp "$macUser@$macHost`:$macSourceDir$file" "$localDestDir" if ($LASTEXITCODE -eq 0) { # 复制成功后删除Mac上的源文件 ssh "$macUser@$macHost" "rm $macSourceDir$file" Write-Host "已完成迁移: $file" } else { Write-Warning "文件复制失败: $file" } } Write-Host "本次迁移任务结束"
脚本说明
- 采用先复制再删除源文件的逻辑,避免复制失败导致文件丢失
ls -1确保每个文件名单独输出一行,方便后续循环处理- 自动检查并创建本地目标文件夹,无需手动提前创建
3. 设置定时自动迁移
通过Windows任务计划程序实现定时运行:
- 打开「任务计划程序」,点击「创建基本任务」
- 输入任务名称(如“Mac CSV自动迁移”),点击下一步
- 选择触发频率(每日/每周/特定时间),设置具体执行时间,点击下一步
- 选择「启动程序」,点击下一步
- 在「程序或脚本」中输入
powershell.exe,「添加参数」中填入:-ExecutionPolicy Bypass -File "C:\你的脚本存放路径\Migrate-MacCsv.ps1" - 点击下一步,勾选「完成时打开任务属性对话框」,点击完成
- 在属性窗口的「安全选项」中,勾选「不管用户是否登录都要运行」,并配置合适的权限
- (可选)免密登录设置:
- 在PowerShell中运行
ssh-keygen,一路回车生成密钥对 - 运行
ssh-copy-id $macUser@$macHost,输入Mac密码,后续即可免密SSH连接
- 在PowerShell中运行
内容的提问来源于stack exchange,提问作者Mirco
相关产品推荐
相关产品推荐

