適材適所

WindowsやPowerShellやネットワーク、IBMなどのシステム系の話など気になったことも載せているブログです。

【PowerShell】スクリプト内でFTPコマンドを使いたいよーってときに読む記事その1

スクリプト内でFTPコマンドを使いたいときは、ちょっと面倒。

いちいちテキストにコマンドを書き出さないといけない。

そんないちいち書き出すの面倒だけど、FTPコマンドをスクリプト内で使いたい!!

というとき用に関数を書き残しておきます。

www.tekizai.net

なんで今時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コマンド用の関数も作ったので機会があればまた書きたいと思います。