powershellでFTPファイルアップロード

引数でアップロードするファイル指定するバージョン

hogehoge.ps1として保存

foreach ($arg in $args) {

	[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
	
	$filename = $(Get-ChildItem $arg).Name

	#「検証プロシージャによると、リモート証明書は無効です。」みたいなエラーが出たら、サーバー証明書の警告を無視するようにスクリプト内で宣言
	[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

	$ftpReq = [System.Net.FtpWebRequest]::Create("ftp://FTPサーバーのアドレス/" + $filename)
	$ftpReq.Credentials = New-Object System.Net.NetworkCredential("ユーザー名","パスワード")
	$ftpReq.Method = [System.Net.WebRequestMethods+ftp]::UploadFile
	$ftpReq.EnableSsl = $true
	$ftpReq.KeepAlive = $true
	$ftpReq.UseBinary = $true
	$ftpReq.UsePassive = $true
	$ftpReq.TimeOut = 10000

	$stream = $ftpReq.GetRequestStream()
	$fileStream = New-Object System.IO.FileStream($zipfile, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read)
	$bytes = New-Object System.Byte[](1024)
	while($true){
		$size = $fileStream.Read($bytes, 0, $bytes.Length)
		if($size -eq 0){
			break;
		}
		$stream.Write($bytes, 0, $size)
	}
	$fileStream.Close()
	$stream.Close()

}

batファイルでは

PowerShell -ExecutionPolicy RemoteSigned -file hogehoge.ps1 アップロードしたいファイル名