目次
PowerShellとは?
PowerShellはMicrosoftが開発したシェル機能です。WindowsにはいわゆるDOS窓と言われるコマンドプロンプトが昔からありますが、それのパワーアップ版のようなものです。Windows 10に最初から入っているので、すぐに使えるのが大きな特長です。
PowerShellは2006年にオープンソースとなり、Windows以外でも自由に利用できるようになりました。それでも現状はWindows 10での利用が主になっています。
こちらは入門記事なります。是非ご覧ください。
PowerShell入門の第一歩
ではPowerShell入門を開始しましょう。まずはWindows 10のスタートメニューのWindows PowerShellのフォルダから「Windows PowerShell」を実行します。ウィンドウが開いて、
PS C:\Users\(ユーザー名)>
というプロンプトが表示されれば、コマンドを入力して使うことが出来ます。入門として、最初はユーザ名のフォルダにあるファイル一覧を見てみましょう。
Get-ChildItem
と入力してEnterキーを押してください。
Get-ChildItemでファイル一覧を取得
すると以下のように現在のユーザ名フォルダの一覧が出てきます。ディレクトリはフォルダと同じ意味です。
ディレクトリ: C:\Users\(ユーザー名)
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r--- 2020/11/12 8:44 3D Objects
d-r--- 2020/11/12 8:44 Contacts
d-r--- 2020/11/15 11:21 Desktop
d-r--- 2020/11/12 8:44 Documents
d-r--- 2020/11/12 8:44 Downloads
Get-ChildItemでは指定した場所のファイル一覧も見られる
指定した場所のファイル一覧を見ることもできます。例えば以下のようにすればCドライブのtestフォルダの中身を見られます。
Get-ChildItem c:\test
なおPowerShellで↑のキーを押すと前回入力したコマンドが表示されます。↑を押すたびに前のコマンドが順次表示されます。↓を押せば戻ります。こういったシェルでは一般的な動作ですが、便利なので覚えておきましょう。
パイプラインを活用しよう
PowerShellにはパイプラインと言う重要な機能があります。これを使いこなすことでPowerShellを使う意味が出てきます。以下の|がパイプラインです。
Get-ChildItem | Out-Host -Paging
このコマンドを実行すると、ファイル一覧の結果をページで区切って表示してくれます。パイプラインの|は左のコマンドの出力を右のコマンドに受け渡します。これを使うことで複数のコマンドをつなげることができるのです。
リダイレクトはとても便利
もう一つ、PowerShellにはリダイレクトという便利な機能があります。以下を実行すると、
Get-ChildItem > files.txt
テキストファイルにファイル一覧が出力されます。これはエクスプローラーではできないことで、便利に使えるでしょう。なお>が1つだけだと上書きモードですが、
Get-ChildItem >> files.txt
とすれば追記モードになります。
Set-Locationでフォルダを移動
いままでユーザ名フォルダの場所からファイル一覧を表示していましたが、この現在の位置を移動することもできます。以下のように入力すると、
Set-Location c:\test
Cドライブのテストフォルダに移動します。プロンプトが「PS C:\test>」に変わるのでわかります。また、以下のように入力すると、
Set-Location ..
一つ上の階層のフォルダに移動します。これは良く使うので覚えておきましょう。
エイリアスがあるので短いコマンド名も使える
フォルダの移動だけでSet-Locationと入力するのは面倒と感じる人もいるかもしれません。実は以下のように「cd」の2文字だけでもSet-Locationと同じ動作ができます。
cd c:\test
これはエイリアスという、コマンドを別の名前に置き換える機能があるからです。初期状態でどのようにエイリアスされているかは、以下のコマンドでわかります。
Get-Alias
実行すると以下のように定義されていることがわかります。cdやdirはコマンドプロンプトで使うコマンドですが、PowerShellもそれと同じ感覚で使うことができます。
Alias cd -> Set-Location
Alias dir -> Get-ChildItem
PowerShellを使う理由は?
この入門記事をここまで読んで、PowerShellだけしかできない事はあまり無いように感じるかもしれません。しかしそんなことはなく、PowerShellを使う理由としてあげられるのは、Select-Stringというコマンドの存在です。
このコマンドはフォルダにあるテキストファイルの中から、指定した文字列がある行を表示してくれます。この機能はWindowsのエクスプローラーにはありません。
Select-Stringで文字検索ができる
例えば以下のように入力すると、
Select-String c:\test\*.txt -Pattern PowerShell入門
testフォルダに「PowerShell入門」を含むテキストファイルがあった場合、以下のように該当する行が表示されます。
test\test1.txt:2:わかりやすいPowerShell入門
注意点は、文字コードがユニコードのファイルが対象であることです。これはPowerShellがWindows以外の動作環境でも動くことを前提にしていることが理由です。
Select-Stringは文字コードの変更も可能
Windowsを普通に使っていると、テキストファイルはShift_JISであることが多いでしょう。そういったファイルを対象にする場合は、以下のようにしてください。
Select-String c:\test\*.txt -Pattern あいうえお -Encoding default
これでWindowsのデフォルトの文字コードであるShift_JISのテキストファイルの検索ができます。
なおこのような検索機能は、実はコマンドプロンプトでもfindstrで実行できます。それでも今後はPowerShellを使ったほうが良いので、入門者はこちらをマスターしましょう。
スクリプトを作る
ここまで1行のコマンドラインを実行していましたが、次はプログラミングっぽいことをしてみましょう。スタートメニューから「Windows PowerShell ISE」を起動してください。するとプログラミング開発環境のようなアプリが起動します。
これで複数行のスクリプトを作ることができます。上のテキスト入力欄に以下を入力してください。そしてF5キーで実行できます。
1
2
3
4
5
6
7
8
|
foreach($file in Get-ChildItem 'c:\test')
{
$fullname = $file.FullName
if($fullname -like '*.txt'){
$output = $fullname.Replace('.txt',$file.CreationTime.ToString('yyyyMMdd')+'.txt')
Copy-Item $fullname $output
}
}
|
スクリプトの解説
上のスクリプトはtestフォルダにあるtxtファイルのファイル名に、作成日付を付けてコピーをします。Get-ChildItemの結果をforeachで順に処理して、拡張子が.txtだったら、.txtを作成日付+.txtに置換して、Copy-Itemで複製をしています。
$file、$fullname、$outputは変数といって、=で右辺を代入します。入門記事としては難しいかもしれませんが、PowerShellをマスターすれば高度な処理ができるということを感じてもらえれば今は十分です。
PowerShellをマスターすればとても便利
PowerShell入門の記事はいかがでしたでしょうか。終わりの方は入門としては少し難しい内容に感じたかもしれませんが、PowerShellでエクスプローラーではできない高度な処理もできることを理解していただければ幸いです。
インフラエンジニア専門の転職サイト「FEnetインフラ」
FEnetインフラはサービス開始から10年以上『エンジニアの生涯価値の向上』をミッションに掲げ、多くのエンジニアの就業を支援してきました。
転職をお考えの方は気軽にご登録・ご相談ください。