Windowsに搭載されている標準機能のうち、認知度が低い代表的なビジネスツールであるPowerShell。
業務の効率化や自動化を検討している企業にとって、何度インターネットで調べてもPowerShellの正体が分からず、使い始めることができていないケースも多いのではないでしょうか。
パソコンをクリック操作するのではなく、わざわざコード入力する真意は何なのか?
PowerShellはどのような業務でも有効に活用できるのか?
この記事では、PowerShellの基本的な概要と活用例を、非IT企業でもわかるようにやさしく解説します。
Windows標準搭載のPowerShell
この章では、まずWindowsに標準搭載されているPowerShellについて、最も基本的な概要を説明します。端的に、PowerShellはどのようなビジネスツールなのか、さっそく見ていきましょう。
GUIとCUI
一般に、Windowsはデスクトップ上のファイルや各アプリケーションに対して、マウス操作することがメインのOSです。このような操作方式のことをGUI、グラフィカル・ユーザー・インターフェースといいます。
また、スマホやタブレットもGUI方式です。現代ではコンシューマー向けのコンピューターデバイスの入力方式は、GUI方式が主流です。
一方、PowerShellは、CUI方式のツールです。CUIとはコマンドライン・ユーザー・インターフェースの略で、パソコンの操作にアイコンやクリック操作は用いずに、コード入力で操作する方式のことです。
CUIは「Character User Interface」の略で、「キャラクター・ユーザー・インターフェース」と訳されることもあります。
ここでいう「キャラクター」とは、文字、数字、記号などのテキスト要素を指します。CUIではグラフィカルな要素(アイコンやビジュアルエフェクト)は使用せず、主にキーボードを通じて操作を行います。
「コマンドライン・ユーザー・インターフェース(CLI)」と混同されることがありますが、両者は同じような概念を指しているため、通常は区別する必要はありません。
PowerShellの場合、スクリプト言語の機能とコマンドラインシェルを兼ね備えています。そのため、PowerShellは「コマンドライン・ユーザー・インターフェース」と見なすのが一般的です。
PCをコマンドで操作する
多くのコンピューターデバイスではGUI方式が主流ですが、PowerShellはCUI方式のツールです。
よって、PowerShellの操作ではマウスは使いません。キーボードでコードを入力する、一般的にイメージしやすい「プログラミング」のような操作感です。
ここで理解してほしいのは、GUI・CUIどちらでも、コンピューターが受け取る「ユーザーからの命令」には違いがありません。つまり、ファイルをダブルクリックするのも、コードで「Open-File〜〜」と入力するのも、コンピューターから見れば大差はないのです。
GUIとCUI、操作は異なってもOSに届く命令語は変わらない。
PowerShellとコマンドレット
PowerShellの操作には、コマンドレットと呼ばれるPowerShell専用のコードが使われます。この章では、コマンドレットについて説明します。
コマンドレットとは
PowerShellを効果的に使用するためには、コマンドレットという独自の概念を理解することが重要です。
コマンドレットは、PowerShell専用に設計された軽量のコマンドラインプログラムであり、他のシェルやプログラミング環境では使用されません。
汎用性はありませんが、非技術者やスクリプト、プログラミングに不慣れなユーザーでも、学習しやすく扱いやすい利点があります。
CUIという専門寄りのユーザーインターフェースを持ちながら、PowerShellが(認知度は低いものの)コアなユーザーから支持を受けているのは、コマンドレットの功績も大きいのです。
コマンドレットの構文
PowerShellのコマンドレットは、簡潔で一貫した構文性質を持っています。
基本的に、「動詞-名詞」形式で命名されており、その機能が直感的に理解しやすいのです。下記でいくつかのコマンドレットの例を挙げます。
Get-Content
: ファイルの内容を取得します。Set-Date
: システムの日付を設定します。Get-ChildItem
: 指定されたパス内のアイテムをリストアップします。Remove-Item
: ファイルやフォルダを削除します。New-Item
: 新しいファイルやフォルダを作成します。Start-Service
: サービスを開始します。Stop-Service
: サービスを停止します。
このような「動詞-名詞」の命名規則により、コマンドレットが何をするものかを容易に推測することができます。
たとえば、「Get-」で始まるコマンドレットは何かを取得する操作、「Set-」で始まるものは何かを設定する操作、「Remove-」で始まるものは何かを削除する操作です。
また、コマンドレットはパラメータを使ってさまざまなオプションを指定できます。たとえば、「Get-ChildItem -Path “C:\MyFolder”」は「C:\MyFolder」ディレクトリ内の項目をリストアップします。
このように、コマンドレットの構文は明瞭で簡単に理解できるため、非技術者でもPowerShellの基本的な操作を効率よく学ぶことができます。
PowerShellを使うメリット
この章では、PowerShellを使うメリットについて説明します。GUI方式が主流の中、あえてCUI方式のPowerShellを使うメリットは何なのか?当記事の核心的な章です。
大量処理の実行
PowerShellは、Windowsで実施する大量処理に大きなパフォーマンスを発揮します。たとえば、「1つのファイルを作成する」や「数個のファイルをリネームする」であれば、通常、GUIのほうが早いです。
ただし、同様の操作を数百〜数千件、実施する必要がある場合、GUI方式で作成するとかなり大変です。1件1件の処理につき、マウスの右クリックとキーボードの文字入力をくり返す必要があるためです。
一方、このように同じ作業を大量にくり返す場合、PowerShellは圧倒的に正確かつ効率的です。たとえば、Wordを100ファイル作成する場合、下記のコードを実行するだけで、瞬時に完了します。
1..100 | ForEach-Object { New-Item "document$_" -ItemType "file" }
この単純な一行のコマンドで、document1
、document2
、…、document100
という100個のファイルが一瞬で作成されます。
<PowerShellで100ファイルを作成>
PowerShellでコマンドを実行
100ファイルが一瞬で作成される
このようにPowerShellを使用することで、時間を要する大量作業を効率化し、生産性を大幅に向上させることができるのです。
定形作業の自動化
PowerShellを使用するもう一つのメリットは、定形作業の自動化です。GUI操作では時間を要するくり返しのタスクも、PowerShellを使えば自動実行できます。
例として、PCのストレージ容量やシステム情報を毎日チェックし、その結果をテキストファイルに保存するタスクを考えてみましょう。GUI方式の場合、この作業は毎日定刻に実施する必要がありますが、PowerShellを使えば自動化できます。
下記は、システムの状態をチェックし、その結果をファイルに保存するPowerShellの例です。
# ストレージの使用状況を取得
$storageInfo = Get-PSDrive C | Select-Object Used, Free
# システム情報を取得
$systemInfo = Get-ComputerInfo | Select-Object OsName, OsVersion
# レポートをテキストファイルに保存
$report = "Storage Info: `r`n" + $storageInfo + "`r`nSystem Info: `r`n" + $systemInfo
$report | Out-File "C:\path\to\your\report.txt"
このスクリプトでは、Get-PSDrive
コマンドレットを使用してストレージの使用状況を確認し、Get-ComputerInfo
コマンドレットでシステム情報を取得しています。そして、結果の情報をテキストファイルに保存しています。
このようなスクリプトをWindowsのタスクスケジューラでスケジュール化することで、毎日定刻にタスクを自動実行し、PCの状態を定期的にチェックすることができます。
PowerShell の使い方
この章では、PowerShellの基本的な使い方について説明します。PowerShellの起動方法から、コマンドの入力と実行まで説明します。
PowerShellの起動
WindowsでPowerShellを起動するためには、いくつかの方法があります。
Windowsキーと[Xキー]
Windowsキーと[Xキー]を押下して表示されるメニューからPowerShellを選択します。
Windowsキーと[Rキー]
Windowsキーと[Rキー]を押下して表示されるコマンドプロンプトにPowerShellと入力し実行します。
タスクバーの検索で起動
タスクバーの検索枠にPowerShellと入力し表示されたアプリをクリックします。
ファイルエクスプローラーから起動
ファイルエクスプローラーで[Shiftキー]を押しながら右クリックし表示されるメニューからPoweShellを選択します。
コード(コマンドレット)の入力と実行
PowerShellが起動したら、コマンドレットを入力してタスクを実行できます。コマンドレットは、特定の操作を実行するためのコマンドです。たとえば、システムの情報を表示するには、以下のように入力します
Get-ComputerInfo
このコマンドをPowerShellに入力し、Enterキーを押すと、システムに関する詳細な情報が表示されます。他にも、ファイルやディレクトリの操作、プロセスの管理など、さまざまなコマンドレットが利用可能です。
ぜひ、さまざまなコマンドレットの実行を試して、GUIとCUIの操作感の違いや、結果は同じになることを体感してみてください。この体験がPCの仕組みを詳しく理解するきっかけにもなります。
さらに、コマンドレットを組み合わせることで、より複雑なタスクも効率的に実行できるようになります。
PowerShellの活用事例
この章では、具体的かつ実践的にPowerShellをどのように活用できるかの事例を紹介します。どれも用途は限定的ですが、大きな効率化を実現できることがご理解いただけるでしょう。
PowerShellでファイル作成
PowerShellを使って、一度に複数のファイルを作成することができます。たとえば、特定のディレクトリに100個のテキストファイルを作成するには、次のようにします。
1..100 | ForEach-Object { New-Item -Path "C:\path\to\directory\file$_.txt" -ItemType File }
空のフォルダ
100個のファイルを1秒で作成
このスクリプトは、file1.txt
, file2.txt
, … といった形で100個のファイルを作成します。大量のファイルを迅速に生成する際に非常に便利です。
PowerShellでリネーム
PowerShellを使用してディレクトリ内の複数のファイルの名前を一括で変更することが可能です。下記は、特定のパターンに基づいてファイル名を変更するコマンドの例です。
Get-ChildItem -Path 'C:\path\to\directory\' -Filter '*.txt' | Rename-Item -NewName { $_.Name -replace '旧パターン', '新パターン' }
filexx.txt
ファイルxx.txt
このコマンドは、指定されたディレクトリ内のすべてのテキストファイルを検索し、ファイル名に含まれる特定のパターンを新しいパターンに置き換えてリネームします。
なお、このリネームのコマンドはパターンに拡張子を指定することで、拡張子を一括変更することも可能です。
Get-ChildItem -Path 'C:\path\to\directory\' -Filter '*.txt' | Rename-Item -NewName { $_.Name -replace '.txt', '.docx' }
拡張子.txt
拡張子.docx
PowerShellで一括コピー
PowerShellを使って、特定のディレクトリから別のディレクトリに大量のファイルを一括でコピーすることもできます。たとえば、特定の拡張子を持つすべてのファイルを別の場所にコピーするには、次のようにします。
Get-ChildItem -Path 'C:\path\to\source\directory\' -Filter '*.txt' | Copy-Item -Destination 'C:\path\to\destination\directory\'
testフォルダのファイル
test2フォルダに1秒でコピー
このコマンドは、指定したコピー元ディレクトリ内のすべてのテキストファイル(*.txt
)を検索し、それらを指定したコピー先ディレクトリにコピーします。これは、データのバックアップや大量のファイルの移動が必要な場合に特に便利です。
あとがき
今回は、業務効率化の観点で高いポテンシャルを持つにも関わらず、活用事例や実用的情報が少ないPowerShellを紹介しました。
Windowsは単なるパソコンOSではなく、無料で高いパフォーマンスを持つビジネス向けの機能・アプリケーションが多く搭載されています。
PowerShellもそのひとつであり、実際にどのように活用できるのか、当記事でお伝えできたのであれば幸いです。
うまく活用すれば、ローコストで業務の生産性を飛躍的に高めることができます。今回紹介した事例以外でも、タスクスケジューラーと組み合わせた自動化や、メール送信など、さまざまな可能性を秘めています。
当サイトでは引き続きPowerShellの実用的かつ高度な活用方法の情報を発信していきます。