1. ホーム
  2. powershell

[解決済み] PowerShellを使用してSFTPにファイルをアップロードする

2022-03-06 12:58:04

質問

あるサーバーからSFTPサイトへの自動アップロードを設定するよう依頼されました。毎週月曜日の朝にデータベースからファイラーにエクスポートされるファイルがあり、そのファイルを火曜日にSFTPにアップロードしてほしいとのことです。現在使用している認証方法は、ユーザー名とパスワードです(キーファイルを持つオプションもあったと思いますが、ユーザー名/パスワードのオプションが選択されました)。

私が想定している方法は、Windowsタスクスケジューラによって特定の時間(火曜日)に実行され、問題のファイルを取得してSFTPにアップロードし、バックアップ目的で別の場所に移動するスクリプトをサーバー上に配置することです。

例えば

  • ローカルディレクトリです。 C:\FileDump

  • SFTPディレクトリ。 /Outbox/

  • バックアップのディレクトリです。 C:\Backup

この時、いくつかのことを試しましたが、WinSCPもその一つでした。 SFTP PowerShell スナップイン が、今のところうまくいっていません。

Windows Server 2012R2上で動作させる予定です。
を実行すると Get-Host 私のコンソールホストのバージョンは4.0です。

ありがとうございます。

解決方法は?

現在、SFTPの部分を行うためのビルトインのPowerShellメソッドは存在しません。psftp.exeのようなものや、Posh-SSHのようなPowerShellモジュールを使用する必要があります。

を使用した例です。 Posh-SSH :

# Set the credentials
$Password = ConvertTo-SecureString 'Password1' -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential ('root', $Password)

# Set local file path, SFTP path, and the backup location path which I assume is an SMB path
$FilePath = "C:\FileDump\test.txt"
$SftpPath = '/Outbox'
$SmbPath = '\\filer01\Backup'

# Set the IP of the SFTP server
$SftpIp = '10.209.26.105'

# Load the Posh-SSH module
Import-Module C:\Temp\Posh-SSH

# Establish the SFTP connection
$ThisSession = New-SFTPSession -ComputerName $SftpIp -Credential $Credential

# Upload the file to the SFTP path
Set-SFTPFile -SessionId ($ThisSession).SessionId -LocalFile $FilePath -RemotePath $SftpPath

#Disconnect all SFTP Sessions
Get-SFTPSession | % { Remove-SFTPSession -SessionId ($_.SessionId) }

# Copy the file to the SMB location
Copy-Item -Path $FilePath -Destination $SmbPath

いくつかの補足説明をします。

  • Posh-SSHモジュールをダウンロードして、ユーザーモジュールディレクトリにインストールし(例:C: \Usersjon_dechiro ╱Documents╱WindowsPowerShell╱Modules)その名前を使ってロードするだけ、または上記のコードのようにどこかに置いてロードする必要があります。
  • スクリプトに資格情報を入れるのが嫌な場合は、資格情報ファイルを使用する必要があります。もし助けが必要なら、詳細をお知らせするか、リンクを紹介します。
  • 必要に応じて、パスやIPなどを変更してください。

これでまずまずのスタート地点に立てたのではないでしょうか。