PowerShellが動いているプラットフォームである「.NET」では、FTP通信に関するクラス類が廃止されてきています。
Powershell上でもInvoke-werbrequestというコマンドレットがありますがいろんなサイトを調べてInvoke-werbrequest使用したFTPサーバとの接続が書いてあるのですがうまく動作しません。
Windows10から標準で実装されているcurl.exeを使用すれば、これを解決できそうです。
PoweShellで使用する場合、curl が Invoke-werbrequest のエイリアスになっている場合があるようで(私の使用しているPowershell7.4.2では、そうなっていないのですが、いろいろなサイトにそう書いてありました)curl.exeを明示して使用します。
# curl.exe の パス
$curl = 'curl.exe'
#FTPサーバ
$serverurl = '127.0.0.1'
#ユーザ名
$user = 'user'
#パスワード ※本当は暗号化などのセキュリティ対策があったほうが良いかも
$password ='12345'
#リモート先フォルダー
$remotefolder = 'folder'
#保存先のローカルフォルダー
$localfolder = 'c:\csvfolder\'
#リモート先のCSVファイルのリストを取得する
$ftplist= & $curl -u "$user`:$password" "ftp://$serverurl/$remotefolder/*.csv" --list-only
#リストから一つずつファイル名を取り出してファイルを保存する
foreach ($file in $ftpFileList -split "`r`n") {
$remoteFilePath = "ftp://$serverurl/$remotefolder/$file"
$localFilePath = Join-Path $localfolder $file
#ファイルを取得する
& $curl -u "$user`:$password" -o $localFilePath $remoteFilePath
}
curl.exeを使用してFTPサーバ上のファイルを削除するには、直接FTPのコマンドを打つ必要があるとのこと
-Q オプションは、quote オプションでFTPに任意のコマンドを送信できます。このコマンドは、パスワード送信直後 ファイル転送前に送信されます。転送が成功した後にコマンドを実行するには、ダッシュ「-」をつけると書いてあります
詳しくは、curlのサイトを確認👉curl - How To Use
ここでFTPのコマンドDELEの前にハイフンをつけることがポイントのようです。
# curl.exe の パス
$curl = 'curl.exe'
#FTPサーバ
$serverurl = '127.0.0.1'
#ユーザ名
$user = 'user'
#パスワード ※本当は暗号化などのセキュリティ対策があったほうが良いかも
$password ='12345'
#削除したいリモート先ファイル
$remotefile = '/log0/data.csv'
#リモート先のCSVファイルを削除する
$ftpdel = & $curl -u "$user`:$password" -Q "-DELE $remotefile" "ftp://$serverurl/"