前置き
今回は Putty を使用して WindowsPC から Linux サーバのファイルを取得するサンプルプログラムを紹介します。
毎日シェルの実行結果をとってくる単純作業を「自動化できたらいいな」と思い、作りました。
PowerShellから他のCLIツールにコマンドの実行について記載しているため、Putty 以外のツールをご利用されている方でも参考になるのではないかと思ってます。
別の記事でLinuxサーバのシェルを実行する記事も書かせていただいております。
一連の流れで「シェルの実行」 → 「実行結果ログのダウンロード」のような場合に使えると思いますので、是非見ていってください。
【PowerShell】WindowsPCからLinux上のShellファイルを実行する
シナリオ
1.ローカルに日付フォルダを作成する
2.PuttyでLinuxサーバにログイン
3.「1」で作成したフォルダに$TARGET_FILE_PATH
のパターンに該当するファイルをダウンロード
サンプルプログラム
サンプルプログラムをコピーして、拡張子「.ps1」で保存してください。
下記のサンプルプログラムのConfig
部分に必要な情報を入力してください。
基本的に下記の項目を見直していただきたいと思います。
・$PUTTY_PATH
・$USER_NAME
・$IP_ADDRESS
・$PASSWORD
・$TARGET_FILE_PATH
################################## Config ##################################
# 取得したいファイルのパターン用で使用
$NEW_DATE = Get-Date -Format "yyyyMMdd"
# 格納先フォルダ名で利用
$NEW_DATE_TIME = Get-Date -Format "yyyyMMdd_HHmmss"
# PUTTY情報
$PUTTY_PATH = "C:\Tools\PuTTY"
$PSFTP_PATH = Join-Path $PUTTY_PATH "psftp.exe"
# Linux接続情報
$USER_NAME = "user"
$IP_ADDRESS = "XX.XX.XX.XX"
$PASSWORD = "password"
<# 取得先設定
今回のデフォルトは実行PowerShellと同一のフォルダ配下に
日付フォルダを作成して、その中に取得したファイルを格納する
#>
$DOWNLOAD_PATH = Join-Path $PSScriptRoot $NEW_DATE_TIME
# 取得したいファイル名パターン
# 今回の例だと「/users/app」配下の「test_20210212_1111.log」などが取得できる
$TARGET_FILE_PATH = "/users/app/test_${NEW_DATE}*.log"
############################################################################
########################## 文字コードをUTF8に変更 ##########################
chcp 65001
############################################################################
############################# ファイル取得処理 #############################
# 格納先フォルダ作成・移動
if (!(Test-Path $DOWNLOAD_PATH)) {
New-Item $DOWNLOAD_PATH -Type Directory
}
Set-Location $DOWNLOAD_PATH
# Linux上で実行したいコマンドを上から順番に記述
# mgetコマンドにすることでパターンが一致するものを取得できる。
# パターンに該当するファイルが複数存在する場合は全て取得する。
$executionCommadn = @(
"mget ${TARGET_FILE_PATH}"
, "exit"
)
# 配列に入っているコマンドを上から順番に実行する
$executionCommadn | & $PSFTP_PATH “${USER_NAME}@${IP_ADDRESS}” -pw $PASSWORD
############################################################################
終わりに
今回はシェルの実行結果ログファイルをダウンロードする想定で書かせていただきました。
まぁ、使う機会は極めてまれだと思いますが、定例業務の効率化ができるので、よかったら試してみてください。
あと、Linuxサーバからダウンロードするファイルのファイル名に日本語が入っていると文字化けしてダウンロードされます。
すごく調べましが解決策がみつかりませんでした。
もしご存知の方がいらしたらコメントで教えてください!
ここまで読んでいただき、ありがとうございました。