【PowerShell】業務効率化

仕事の中で、業務を効率化していきたいと思う人も多いでしょう。

業務効率化ができるPowerShell について学習していきたいと思います。

コマンドプロンプトやバッチファイルとの違いや、どんな場面で使えるのか確認していきましょう。

1. PowerShell とは

PowerShell とは、自動化や構成管理に役立つクロスプラットフォームのシェルスクリプトのことです。

Microsoft社が開発したスクリプト言語であり、コマンドラインインターフェース(CUI)の1つです。

以前はWindows専用のシェルだったのですが、現在はOSを問わず動作する「PowerShell Core」という名称でオープンソースソフトウェアとして公開されています。


※CUIとは、Character User Interfaceの略で、すべてキーボードで操作します。

GUIとよく対比されますが、GUIはマウスや指などで操作できる画面のことになります。

コマンドを打って実行するだけで、Windowsの操作や設定ができます。

2. コマンドプロンプトとの違い

Windowsでは同じようにCUIで操作できるものにコマンドプロンプトがあります。

PowerShellはコマンドプロンプトよりもさらに強力になった機能になります。


2-1. コマンドプロンプトでできること

基本的なパソコンの操作ができます。

OSのバージョン確認、IPアドレスを表示、ファイルやディレクトリー(フォルダ)の作成・コピー・移動・削除 などです。


例:pingコマンドを使用した接続確認(下記の図)

(接続ができていない時は、応答がなく、「要求がタイムアウトしました。」や「宛先ホストに到達できません」と表示されます)


2-2. PowerShellでできること

コマンドプロンプトで行えることは、PowerShellでも行うことができます。

まず、「PowerShell」でしかできないこととして、「コマンドレット(cmdlets)」という独自のコマンドが入力できることです。

「コマンドレット」とはあらかじめ用意されたコマンド群のことで、これを呼び出すことで複数の機能を呼び出しやすく操作を簡単にすることができます。


また、「PowerShellスクリプト」という機能も利用できます。

実行するコマンドをファイルに記述して保存し、あとでまとめて実行することができる機能になります。

PowerShellの活用例として、連番のフォルダ作成、ログの監視、ファイル名の一括修正などがあります。

■補足

バッチファイルとPowerShellについて

バッチで作業ができるのでは?と思ったのですが、PowerShellではバッチファイルで行えない高度な処理が行えるようです。

また、バッチファイルだと使わないといけないものを書くのになんかいなものがあったり、サードパーティーのソフトを入れなければいけない時でも、PowerShellでは一行で片付くこともあります。

少し複雑な自動化のパターンとかでもPowerShellは利用しやすいのです。

簡単なものであればバッチでもいいので、使い分けて仕事を進めていきたいですね。

3. PowerShellの操作

■PowerShellの画面の表示の仕方について

①Windowsのボタンをクリックし検索窓に「PowerShell」と入力します。

②「Windows PowerShell」をクリックします。


③下記のような画面になります。


4. PowerShellメリット

メリットを3つ紹介します。


 ①環境構築不要で使用できる

 ②コマンドレットが使える

 ③自動化処理がすぐに作れる

4-1. ①環境構築不要で使用できる

Windows7から標準機能として搭載されたので、それ以降の新しいOSのPCであれば、ソフトをインストールする必要がありません。

4-2. ②コマンドレットが使える

コマンドレットについて

コマンドレットは、「動詞-名詞」という英語の意味に従って作られているため、直観的にコマンドの内容が把握しやすいです。

コマンドレットの動作が英単語の意味から読み書きしやすいのが最大のメリットになります。

また、利用可能なコマンドレットについては、「Get-Command」と入力すると一覧が表示されます。

例:下図のような画面が表示されます。


実際に、コマンドレットの一覧にあったCopy-Itemコマンドを使用してみました。

今回テストで作成したテキスト「0828test.txt」をコピーして、コピー後のファイル名「test_2」にして作成してみました。





簡単にコピーができました。

コピー元とコピー後のものについて、すぐに作成できました。

また、コピー後の名称についてもコマンドですぐに作成できました。

コピー作業だけだとしても、時短できそうです。

やりたいことと変更したいものがセットで表現されています。


4-3. ③自動化処理がすぐに作れる

Windowsのさまざまな操作を自動化処理を簡単に作成できます。

コマンドレットを使用するとすぐにできます。


例:フォルダ内のファイル名を一括で変更

  PowerPointのスライドを全て画像化

  大量のアドレス宛てにメールを自動で送信

5. PowerShellの活用例

実際にどんな場面で使用しているのか確認して、業務の中で似た場面で活用できるようにしていくために活用例をいくつか紹介していきます。


 ・連番のフォルダ作成

 ・Windows OSの構築・設定

 ・リモート接続でのサーバ管理

 ・Active Directory管理

 ・ファイル操作

 ・ログ監視

 ・xmlファイルの操作

 ・csvファイルの集計

 ・ファイル名の一括変更

 ・同名ファイル一覧の作成

6. 活用例をもとにPowerShellを使用してみる


6-1. 連番のフォルダ作成

連番のフォルダを作成してみたいと思います。

1~100までの連番のフォルダを作成するためのコマンドが以下になります。

mkdir (1..100 | % { "test\folder_{0:000}" -f $_})

連番のフォルダを作成しようと上記のコマンドを実行すると、「引数がnullであるためパラメータpathにバインドできません」と表示されてフォルダが作成できませんでした。


下記の図を参照


「引数がnullであるためパラメータpathにバインドできません」の表示が出た時の対処方法について

変数にNULLを代入する

PowerShellで変数にNULLをセットするためには、下記のコードを使用します。

if($a -eq $null)
{
    Write-Host '変数は NULL です。';
}
else
{
    Write-Host '変数は NULL ではありません。';
}
 
$a = $null;
 
if($a -eq $null)
{
    Write-Host '変数は NULL です。';
}
else
{
    Write-Host '変数は NULL ではありません。';

上記のコマンドを実行後、連番フォルダを作成することができました。


以下、実際にできたフォルダ


6-2. ●今回実行したコマンドの理解

使用したコマンドと特殊文字等について簡単に説明します。

mkdir (1..100 | % { "test\folder_{0:000}" -f $_})

「mkdir」フォルダやディレクトリを作成します。


「..」について

 範囲演算子で指定した数値間で連続する要素を持つ配列を生成します。

「|」(バーチカルバー、縦棒、パイプ記号)について

「|」はパイプラインとも呼ばれていて、右側のコマンド結果を左のコマンドに渡してあげるものになります。

「% 」は foreach(Foreach-Object)を意味します。ForEach-Object の別名を意味します。
 %は他にも剰余演算でも使われます。

上記のコマンドでの、「$_」の意味について

パイプラインに渡っているオブジェクトを表す自動変数のことで、現在処理しているものをさします。Foreach-objectやWhere-Objectなどと一緒によく使ったりします。

「ダブルクォーテーション」について

ダブルクォーテーションは、文字列を囲んだ場合、変数は展開された文字列として扱われます。

{}波括弧について

条件式を ()丸括弧で括り、 条件式の後に波括弧 {}で処理部分を括ります。

 PowerShellでは ()丸括弧と {}波括弧のどちらも省略することはできません。

PowerShellで変数にNULLをセットする際に$nullを使用します。

7. まとめ

PowerShellでいろいろ便利に作業ができることが分かりました。

また、コマンドレットの種類はたくさんありますが、どんな処理ができるのか把握しておくと業務で役立つと思います。

コマンド一覧で確認しながらでも自動化処理できるようにコマンドの使い方を理解しておくといいと思います。


実際に業務で使えそうなタイミングがあればどんどん使用していきたいです。

今回はどんなことができるのかという点でざっくりと見てきました。

また実際にコマンドの一覧の表示のさせ方や簡単な使い方を確認してきました。


もう少し用語やPowerShellについて学習して理解を深めていきたいと思います。