运用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
                        }

           

posted @ 2018-09-07 11:09  皮皮豹和布朗熊  阅读(1004)  评论(0编辑  收藏  举报