LoginSignup
18
21

More than 5 years have passed since last update.

Powershellを使ってFTPでデータ取得

Last updated at Posted at 2015-08-19

FTPサーバーからテキストデータを取得するという作業があります。

以前はコマンドプロンプトのバッチファイルで行っておりました。
以下の欠点がありました。

コマンドプロンプトのFTP送信の欠点

  • 相対パスでは動かずフォルダを動かすだけで動かなくなる
  • ソースが非常に読みにくい

ナウでヤングなWindowsユーザーであれば、
コマンドプロンプトは窓から投げ捨ててPowerShellを使うべきでしょう。

PowershellでFTP

Powershellで作ってみました。
スクリプトファイルのパスを取得するようになっているので、
どの場所に置いても動き出します。

FTPでデータを取得
$user     ='username'
$password = 'password'
$url      = 'ftp://serveripaddress'

# WebClientを生成
# FTP設定
$wc = New-Object System.Net.WebClient
$wc.Credentials = New-Object System.Net.NetworkCredential($user,$password)
$wc.BaseAddress = $url


# スクリプトファイルのパスを取得
$mypath=Split-Path ( & { $myInvocation.ScriptName } ) -parent

# ファイルをダウンロード
## %2f を付けると / (root) からのデータ取得になる。
## .DownloadFile(ダウンロード元ファイル名,ダウンロード先ファイル名)
$wc.DownloadFile("%2f/tmp/filename",$mypath+"\filename.txt")

# 終了
$wc.Dispose()

WindowsXPを管理する時代が長かったので、
System.Net.WebClientを直接呼び出しています。

PowerShell v3.0以降が動く環境であれば、
Invoke-WebRequestでもいいかもしれません。

Invoke-WebRequestでFTP

Invoke-WebRequestでFTPからダウンロードも作ってみました。
Invoke-WebRequestはダウンロードはできてもアップロードはできませんので、あしからず。

  • PowerShell v3.0 以降
InvokeWebRequestでFTP
$user     ='username'
$password = 'password'
$url      = 'ftp://serveripaddress'

# FTP認証 Nework.CredentialではなくPSCredentialを使用
$str=ConvertTo-SecureString $password -AsPlainText -Force
$cred=New-Object System.Management.Automation.PSCredential($user,$str)


# スクリプトファイルのパスを取得
$mypath=Split-Path ( & { $myInvocation.ScriptName } ) -parent


# データのダウンロード
## %2f を付けると / (root) からのデータ取得になる。
Invoke-WebRequest -Uri $url"$2f/tmp/filename.txt" -OutFile $mypath"\filename.txt" -Credential $cred

参考文献

相対パスと絶対パスのところを参照
FtpWebRequest、FtpWebResponseクラスを使ってFTPサーバーにアクセスする

実行しているスクリプトのパスを取得 (PowerShell)
Invoke-WebRequest - MSDN

18
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
21