マイナビニュースマイナビ

PowerShell 7をシェルスクリプトとして使う - パスの存在確認

【連載】

PowerShell Core入門 - 基本コマンドの使い方

【第144回】PowerShell 7をシェルスクリプトとして使う - パスの存在確認

[2021/04/16 08:00]後藤大地 ブックマーク ブックマーク

前回は、PowerShellのスクリプトを書いていく上で最初のテンプレートとも言える部分の説明を行った。Windows、Mac、Linuxのすべてにおいて使用できるPowerShellスクリプトの書き方だ。成果物は次の通りである。

#!/usr/bin/env pwsh

これだけかと思うかもしれないが、こうやって一つ一つ理解して解決していくことが大切だ。地道に続けることで、いずれはスラスラとPowerShellスクリプトを書けるようになる。

スクリプトの勉強は実際のコードで進める

スクリプトの学習方法はいくつかある。本連載の初期は、できるだけPowerShellの仕様に沿うかたちでPowerShellの機能を取り上げてきたつもりだ。初めてプログラミング言語の学習に取り掛かるときはそれでよいかと思うが、ある程度できるようになったら、次は実際のスクリプトやスニペットなどから学習を進めたほうが理解が深まるだろう。

そこでしばらくは、Microsoftが公開するブログ「PowerShell Community Blog」の内容をピックアップするかたちで学習を進めていこうと考えている。

PowerShell Community


上記は2021年2月から始まった新しい試みで、Microsoftの説明によれば「This is a blog by the community and for the community. And we have made it easier than ever for you to contribute to the new blog. (筆者意訳:これはコミュニティのによるコミュニティのためのブログです。この新しいブログに寄稿する方法もこれまでにないくらい簡単になりました)」ということになる。

Microsoftはもともと「Scripting Blog | A place to learn about PowerShell and share stories of automation」で16年間に渡って同社のスクリプト技術に関する記事を掲載してきた。最初はVBScriptとWindowsバッチファイルに焦点を当てたブログだったが、2008年ごろからPowerShellの記事が掲載されるようになり、総記事数は5400を超えるまでに成長したものの、ここ3、4年は停滞していた。上記コミュニティブログはこれに代わる新しいブログということだ。実際、Scripting BlogはPowerShell Community Blogの登場と共に、正式に終了している。

2021年2月21日に最初の投稿が行われ、2021年4月2日に11本目の記事が追加されている。約1カ月半で10本程度が投稿された計算だ。これを多いと見るか少ないと見るかは別として、このブログでフレッシュな情報を定期的に入手できる状態になる(と、Microsoftは期待している)のは喜ばしいことだろう。本連載でも、このブログに掲載されるトピックから興味深いものを取り上げ、PowerShellスクリプトを勉強していく際のネタとして使うことにしよう。

もちろん、このまま投稿が増えることなく静かに消えてしまう可能性も否めない。だが、今のところ公式にPowerShellの情報が手に入る場所としてはそこそこ有望だ。しばらくウォッチを続けていこう。

試しにシェルスクリプトを作ってみる

最初のネタとして、次の記事を選んでみた。

Determine if a folder exists | PowerShell Community


上記の投稿は「フォルダーが存在するかどうか知る方法はありますか」という質問に対して、「方法はいくつもある。例えば、Test-Pathコマンドレットを使う方法がある」と回答されているものだ。内容としては、シンプルでわかりやすい。具体的には、次のサンプルコードが掲載されており、これがすべてを物語っている。

$Folder = 'C:\Windows'
"Test to see if folder [$Folder]  exists"
if (Test-Path -Path $Folder) {
    "Path exists!"
} else {
    "Path doesn't exist."
}

上記サンプルを一言で表すと、「『Test-Path フォルダパス』というコマンドレットの使い方を説明している」ということになる。「Test-Path フォルダパス」は指定したフォルダが存在していれば「True」を返し、存在していなければ「False」を返す。

では、これを使ってスクリプトを作ってみよう。投稿内でも説明されているが、上記サンプルの処理はMacやLinuxで使われるtestコマンドに-dオプションを指定したときの動作に似ている。このため、「test-d.ps1」というファイル名で次のようなスクリプトを書いてみる。

#!/usr/bin/env pwsh

Test-Path -Path $args[0]

これで引数に指定したパスが存在するかどうかを調べ、「True」または「False」を返すというスクリプトになっている。実行すると次のようになる。

「test-d.ps1」の実行サンプル

動作していることが確認できた。

シンプルなサンプルから機能を広げながら学ぶ

上記サンプルを見るとわかるが、上記サンプルではパスとしてフォルダパスではなくファイルパスを与えた場合も、「True」と判断されている。対象が「存在しているかどうか」だけをチェックしているので、それがファイルなのかフォルダなのかという判定は行っていないのだ。

また、引数に何も指定されなかった場合の処理も行っていない。大抵使い方を忘れるものなので、何も指定せずに実行したときには使い方を出力するようにしておくと便利だ。

このように、簡単なスクリプトからも学びを広げていくことができる。こうして一つ一つ学んでいくことで、そこそこ使えるスクリプトが仕上がっていくし、スクリプトを作成するときの定型パターンのようなものも身に付くはずだ。今後は、この要領でPowerShellスクリプトを書いていく方法を整理していこうと思う。

参考

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

もっと知りたい!こちらもオススメ

【連載】RPA入門 - ツールで学ぶ活用シーン

【連載】RPA入門 - ツールで学ぶ活用シーン

AIには、ルールベース、機械学習、深層学習(ディープラーニング)の3つのレベルがあり、レベルが上がるに連れてより高度な人工知能を実現しますが、AIのスピンオフという位置付けで、Digital Labor(仮想知的労働者)によるホワイトカラー業務の自動化を実現するRPAが注目されています。

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で TECH+ の人気記事をお届けします
注目の特集/連載
[解説動画] Googleアナリティクス分析&活用講座 - Webサイト改善の正しい考え方
Slackで始める新しいオフィス様式
Google Workspaceをビジネスで活用する
ニューノーマル時代のオウンドメディア戦略
ミッションステートメント
次世代YouTubeクリエイターの成長戦略
IoTでできることを見つけるための発想トレーニング
教えてカナコさん! これならわかるAI入門
AWSではじめる機械学習 ~サービスを知り、実装を学ぶ~
Kubernetes入門
SAFeでつくる「DXに強い組織」~企業の課題を解決する13のアプローチ~
マイクロサービス時代に活きるフレームワーク Spring WebFlux入門
AWSで作るマイクロサービス
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

会員登録(無料)

ページの先頭に戻る