スクリプト内でFTPコマンドを使いたいときは、ちょっと面倒。
いちいちテキストにコマンドを書き出さないといけない。
そんないちいち書き出すの面倒だけど、FTPコマンドをスクリプト内で使いたい!!
というとき用に関数を書き残しておきます。
なんで今時FTPコマンド?
枯れっ枯れの技術であるFTP。
外部とのやり取りには使いたくないですが、組織内のネットワークではバリバリ現役です。
当初はPowerShellらしく、System.Net.WebClientを使ってやろうと思ったんです!!
でも他のシステムからアップロードされたファイルをGetしようとしたときにキャッシュの問題なのか、うまくGetできなかったんです。
色々調べたんですが回避できず。
というわけで仕方なしにFTPコマンドを使うことになりました。
(確かGetのときだったような・・・lsのときだったかな?前のことなのであやふや)
PowerShellのスクリプトの中でFTPコマンドを使ってGetする関数
function Invoke-FtpGet([string]$hostname,[string]$user,[string]$password,[string]$inputPath,[string]$outPath) { $ftpCmd = " open $hostname $user $password get <<in>> <<out>> Quit" $ftpFilePath=New-TemporaryFile $ftpCmd.Replace('<<in>>',$inputPath).Replace('<<out>>',$outPath)|Out-File -Encoding default -FilePath $ftpFilePath ftp -s:$ftpFilePath Remove-Item -Path $ftpFilePath }
$ftpCmd変数の中にベタのFTPコマンドを用意して、その内容をテキストファイルをテンポラリーファイルに書き出して、それを読み込んでGetしてます。
それだけ。
改めて言葉に起こすと、めちゃめちゃ単純ですね・・・
終わりに
本当はSystem.Net.WebClientを使いたかったんですがね。。。
小一時間ハマった結果、諦めましたよ。
これとは別にlsコマンド用の関数も作ったので機会があればまた書きたいと思います。