2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowerShellで始める自動化入門:面倒な作業を一瞬で終わらせる技

Last updated at Posted at 2024-07-19

はじめに

こんにちは!今回は、PowerShellを使って日々の面倒な作業を自動化する方法をご紹介します。PowerShellは強力なスクリプト言語で、Windows環境での作業を劇的に効率化できるツールです。では、具体的な例を通じて自動化の世界に飛び込んでみましょう!

image.png

1. ファイル操作の自動化

例:日付ごとにファイルを整理する

毎日大量のログファイルが生成され、それを日付ごとのフォルダに整理する必要があるとしましょう。以下のスクリプトで自動化できます。

# 整理するフォルダのパス
$sourceFolder = "C:\Logs"
# 整理先のルートフォルダ
$destinationRoot = "C:\SortedLogs"

# ソースフォルダ内のすべてのファイルを取得
Get-ChildItem -Path $sourceFolder -File | ForEach-Object {
    # ファイルの作成日を取得
    $creationDate = $_.CreationTime.ToString("yyyy-MM-dd")
    # 整理先のフォルダパスを作成
    $destinationFolder = Join-Path -Path $destinationRoot -ChildPath $creationDate
    
    # フォルダが存在しない場合は作成
    if (!(Test-Path $destinationFolder)) {
        New-Item -ItemType Directory -Path $destinationFolder
    }
    
    # ファイルを移動
    Move-Item -Path $_.FullName -Destination $destinationFolder
}

Write-Host "ファイルの整理が完了しました。"

このスクリプトを実行するだけで、ログファイルが自動的に日付ごとのフォルダに整理されます。

image.png

2. システム管理タスクの自動化

例:定期的なシステムチェックとレポート生成

システムの状態を定期的にチェックし、レポートを生成する作業を自動化してみましょう。

# レポートの保存先
$reportPath = "C:\Reports\SystemCheck_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt"

# システム情報を取得
$systemInfo = Get-ComputerInfo | Select-Object WindowsProductName, OsVersion, OsArchitecture

# ディスク使用量を取得
$diskInfo = Get-WmiObject Win32_LogicalDisk | Where-Object { $_.DriveType -eq 3 } |
    Select-Object DeviceID, @{Name="Size(GB)";Expression={[math]::Round($_.Size/1GB, 2)}},
                  @{Name="FreeSpace(GB)";Expression={[math]::Round($_.FreeSpace/1GB, 2)}}

# メモリ使用量を取得
$memoryInfo = Get-WmiObject Win32_OperatingSystem | Select-Object @{Name="TotalMemory(GB)";Expression={[math]::Round($_.TotalVisibleMemorySize/1MB, 2)}},
    @{Name="FreeMemory(GB)";Expression={[math]::Round($_.FreePhysicalMemory/1MB, 2)}}

# レポートを生成
"システムチェックレポート - $(Get-Date)" | Out-File $reportPath
"" | Out-File $reportPath -Append
"1. システム情報:" | Out-File $reportPath -Append
$systemInfo | Format-Table | Out-File $reportPath -Append
"" | Out-File $reportPath -Append
"2. ディスク使用量:" | Out-File $reportPath -Append
$diskInfo | Format-Table | Out-File $reportPath -Append
"" | Out-File $reportPath -Append
"3. メモリ使用量:" | Out-File $reportPath -Append
$memoryInfo | Format-Table | Out-File $reportPath -Append

Write-Host "システムチェックレポートが生成されました: $reportPath"

このスクリプトを定期的に実行するようにスケジュールすれば、システムの状態を常に把握できます。

image.png

3. ネットワーク関連タスクの自動化

例:複数サーバーの稼働状況チェック

複数のサーバーの稼働状況を一度にチェックする作業も自動化できます。

# チェックするサーバーのリスト
$servers = @("server1", "server2", "server3", "server4")

# 結果を格納する配列
$results = @()

foreach ($server in $servers) {
    $result = Test-Connection -ComputerName $server -Count 1 -Quiet
    $status = if ($result) { "稼働中" } else { "停止" }
    
    $results += [PSCustomObject]@{
        サーバー名 = $server
        状態 = $status
    }
}

# 結果を表示
$results | Format-Table -AutoSize

# 結果をCSVファイルに出力
$results | Export-Csv -Path "C:\ServerStatus_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv" -NoTypeInformation -Encoding UTF8

Write-Host "サーバーの稼働状況チェックが完了しました。"

このスクリプトを実行すると、指定したサーバーの稼働状況が一目で分かります。

image.png

4. 自動化のためのスケジューリング

作成したスクリプトを定期的に実行するには、Windowsのタスクスケジューラーを使用します。

  1. タスクスケジューラーを開きます。
  2. 「基本タスクの作成」を選択します。
  3. タスクの名前と説明を入力します。
  4. トリガー(実行するタイミング)を設定します。
  5. アクションで「プログラムの開始」を選択し、以下のように設定します:
    • プログラム/スクリプト: powershell.exe
    • 引数の追加: -ExecutionPolicy Bypass -File "C:\Path\To\Your\Script.ps1"

これで、指定したスケジュールでスクリプトが自動実行されるようになります。

まとめ

PowerShellを使った自動化の基本を紹介しました。これらの例を参考に、自分の日常業務で自動化できそうな作業を探してみてください。最初は小さな作業から始めて、徐々に複雑なタスクにチャレンジしていくのがおすすめです。

自動化のコツは、繰り返し行う作業を特定し、それをステップバイステップで分解することです。そして、各ステップをPowerShellコマンドに置き換えていくのです。

これらの技を磨いていけば、面倒な作業が一瞬で終わるようになり、より創造的で価値のある業務に時間を使えるようになるでしょう。

PowerShellで自動化の第一歩を踏み出してみませんか?Happy scripting!

image.png

2
6
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
2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?