0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【PowerShell】WindowsPCからLinux上のファイルをダウンロードする

Posted at

前置き

今回は 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

GetLogFile.ps1

################################## 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サーバからダウンロードするファイルのファイル名に日本語が入っていると文字化けしてダウンロードされます。
すごく調べましが解決策がみつかりませんでした。
もしご存知の方がいらしたらコメントで教えてください!

ここまで読んでいただき、ありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?