运用powerShell及Curl在Windows(ftp)服务器和Linux服务器之间进行文件的上传和下载
PowerShell(只能在Windows平台运行的脚本语言)
编辑环境:任何一个可编辑文档的工具
运行方式:打开DOS界面,输入“powershell”按下回车键即表示进入了powershell的运行环境。
可直接运行PowerShell代码,也可运行PowerShell文件。
运行PowerShell文件方式:首先cd 文件的存放路径,其次".\文件名.ps1"按下回车即可
Curl(可用于跨平台的数据传输)
powershell中调用curl的方式:
curl.exe 后面直接写curl相关的命令等
案件1:将Windows服务器的东西上传到Linux服务器的指定路径
核心代码:curl.exe -u $user_pw -T $middleFile -a $outputFile $apiCode -w "%{http_code}\n" > $ResponceCode
-u:表示传入服务器的用户名和密码。$user_pw是自定义变量,值为用户名+冒号+密码的形式,例如test:1234
-T:表示要上传的文件。值为文件路径+文件名的形式。例如ftp://10.222.222.22:21/test.xlsm
-a:表示要将文件上传到的位置。值为文件路径+文件名的形式。例如ftp://10.222.222.22:21/test.xlsm
-w:表示前面步骤执行完成后将%{http_code}保存到$ResponceCode中
完整代码:
$apiCode=Get-Content $UploadFolder --获取$UploadFolder表示的文件内容
foreach($master in Get-Content $SourceFolder){
# アップロード対象のみを検索
$list=Get-ChildItem $master -include $content*.xlsm -exclude ~$* -Recurse -Name --遍历$master代表的文件夹下的所有文件,筛选出开头是 $content结尾是.xlsm的文件
foreach($targetFile in $list) {
$uploadFile=$master+'\'+$targetFile
# アップロード先ファイル名(要エンコード)
$encodeFile=$apiCode+$content+"_"+$Stamp+$seq.toString("0#")+".xlsm"
$outputFile=[System.Web.HttpUtility]::UrlPathEncode($encodeFile)
$user_pw=$user+":"+$password
# WebAPIでアップロード --#开头表示注释
"[From -> Middle] "+$uploadFile+" -> "+$middleFile >> $OutputLog --出力Log文件,可以调试用
Copy-Item $uploadFile -Destination $middleFile -recurse -force --将$uploadFile拷贝到 $middleFile
"[Middle -> To] "+$middleFile+" -> "+$outputFile >> $OutputLog
curl.exe -u $user_pw -T $uploadFile -a $outputFile $apiCode -w "%{http_code}\n" > $ResponceCode
"[Delete Middle] "+$middleFile >> $OutputLog
Remove-Item $middleFile -recurse
# 結果のチェック
$Code=(Get-Content $ResponceCode | Select-Object -First 1)
if($Code -like "226*"){
# レスポンス226:アップロード成功
# 直前フォルダにコピー
"[BackUp FR ] "+$uploadFile >> $OutputLog
"[BackUp TO ] "+$backupFolder+$backupFile >> $OutputLog
Copy-Item $uploadFile -Destination $backupFolder -recurse -force
"[RESULT ] OK "+$Code >> $OutputLog
} else {
# レスポンス226以外:アップロード失敗
# ログの出力
"[RESULT ] NG "+$Code >> $OutputLog
}
}
}
案件2:将Linux服务器的东西下载到Windows服务器的指定路径
核心代码:
curl.exe -u $user_pw $TargetFile -o $DownloadFile -w "%{http_code}\n" > $ResponceCode
-o:写入到指定文件
$TargetFile -o $DownloadFile:将$TargetFile(ftp://10.111.12.12:21/test.txt)文件下载到$Download(C:\FTP_DOwnLoad\test.txt)文件中
部分完整代码:
$user_pw=$user+":"+$password
$windowsPath=Get-Content $DownloadFolder
$linuxpath=Get-Content $TargetFolder
$linuxList=curl.exe -u $user_pw -l $linuxpath --获取到$linuxpath路径下的所有文件名包括后缀名(curl中的-l命令)
foreach($FileName in $linuxList){
if($FileName -match "^"+$content+".*.xls$"){ --$FileName是否以$content开头,以".xls"结尾的文件
$TargetFile=$linuxpath+$FileName
$DownloadFile=$windowsPath+$FileName
# WebAPIでアップロード
"[From -> TargetFile] "+$TargetFile+" -> "+$DownloadFile >> $OutputLog
curl.exe -u $user_pw $TargetFile -o $DownloadFile -w "%{http_code}\n" > $ResponceCode
}
}
# 結果のチェック
$Code=(Get-Content $ResponceCode | Select-Object -First 1)
if($Code -like "226*"){
# レスポンス226:ダウンロード成功
"[RESULT ] OK "+$Code >> $OutputLog
} else {
# レスポンス226以外:ダウンロード失敗
"[RESULT ] NG "+$Code >> $OutputLog
}