[解決済み] 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などを変更してください。
これでまずまずのスタート地点に立てたのではないでしょうか。
関連
-
[解決済み】Invoke-Command エラー "Parameter set cannot be resolved using specified named parameters".
-
[解決済み] "get-wmiobject win32_process -computername" でエラー "Access denied , code 0x80070005" が発生する。
-
[解決済み] cmdletbinding()】とは何ですか、どのように機能するのですか?
-
[解決済み] PowerShellで文字列がifで始まる場合 [重複]。
-
[解決済み] Windows PowerShellでファイルが存在するかどうかをチェックする?
-
[解決済み] インストールされたPowerShellのバージョンを確認する
-
[解決済み] PowerShellで「このシステムではスクリプトの実行が無効になっています」と言われる。
-
[解決済み] PowerShellでコードをコメントアウトする方法とは?
-
[解決済み] Windows PowerShellの環境変数を設定する
-
[解決済み】PowerShellスクリプトを実行する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】powershellにターミネーターがない。"
-
[解決済み] Get-ADUserとフィルタを含むForEach-Objectループ
-
[解決済み] Get-ChildItem -force で My Documents フォルダとその他の接続ポイントに "Access Denied" を報告する。
-
[解決済み] 管理者として実行しても、「要求されたレジストリへのアクセスは許可されません」と表示される。
-
[解決済み] Windows PowerShellでファイルが存在するかどうかをチェックする?
-
[解決済み] PowerShellの文字列補間構文
-
[解決済み] Write-ErrorとThrowはいつ使い分ける?終端エラーと非終端エラー
-
[解決済み] グローバル変数名が関数に渡された変数である関数からPowerShellのグローバル変数を設定する
-
[解決済み] Powershellでギャラリーが利用できないというエラーが発生しました。
-
[解決済み] PowerShellでコマンド出力に改行を追加するにはどうすればよいですか?