cheshire-boy

コア関数・その他

【Get-Verb】PowerShellで使える動詞は何?モジュール読込時に警告が出る原因

投稿日:2017年2月22日 更新日:

こんにちは。チェシャ男です。(-皿-)

今回は、

【PowerShell の自作関数で使える動詞の種類】

についてご紹介します。

PowerShell で作成した自作モジュールを、いざインポートしてみると「~名前に承認されていない動詞を含むものがあり~」と警告が表示されることがあります。

「この警告って大丈夫なの?」「モジュールの作り方間違えた?」というあなたの疑問にお答えします。

スポンサーリンク

モジュールをインポートすると警告が表示された!

あなたも PowerShell に慣れてきたら自作の関数コマンドレットを記述したモジュールを作成することになるかもしれません。

苦労してモジュールを作成し「いざ!インポート!」した時に、こんな警告が表示されるかもしれません。

警告: モジュール '○○○○'
からインポートされたコマンドの中には、名前に承認されていない動詞を含むものがあり、このようなコマンドは検出される可能性
が低くなる場合があります。承認されていない動詞を含むコマンドを見つけるには、Verbose パラメーターを使用してもう一度
Import-Module コマンドを実行してください。承認されている動詞の一覧を表示するには、「Get-Verb」と入力してください。

いきなりこんな文量の警告が表示されたら誰だって焦ります。では上の警告の正体は一体何なんでしょうか。

名前に承認されていない動詞が含まれている

警告を見てみると"承認されていない動詞を含むものがあり"とあります。この承認された動詞というのがカギなんです。

PowerShell は実用性を高めるため、基本的に「コマンドレット」や「関名」は”動詞-名詞”の形式をしています。さらに、母国語が英語ではなく普段は英語を話さないユーザにでも予測しやすいように使える動詞に一定のルールを制定しています。

この一定のルールに含まれる動詞が”承認された動詞”の事なんです。

確かに PowerShell のコマンドは

  • Get-Host
  • Get-Item
  • Set-Date
  • Set-Location
  • Test-Connection
  • Test-Path

のように同じような体形で連想しやすい動詞が使われていると思いませんか?
※一部の例外はあります。

警告の正体は、「あなたが自作する関数コマンドレットの名前にも”承認された動詞”を使ってくださいね」というものだったんですね。

※ちなみにこの警告は処理自体に影響があるわけではなく無視しても一応大丈夫です。

承認された動詞を取得する

承認されている動詞の一覧を表示するコマンドレットに

Get-Verb

というものがあります。

【コマンドレット】

Get-Verb

【オプション】

-Verb <承認された動詞>

【入力】

なし

【出力】

 Selected.Microsoft.PowerShell.Commands.MemberDefinition

【エイリアス】

なし

承認された動詞は何があるの?

承認された動詞を使えと言われても何を使えばいいんだろう。

その疑問にお答えするのが ”Get-Verb” コマンドレットです。

実際に実行してみると...

かなりずらーっと列挙されましたが、左の Verb 列が承認された動詞の一覧のようです。

あなたが関数やコマンドレットを自作する場合は、この一覧にある動詞から選びましょう。

右側に表示された Group とは?

承認済みの動詞は検索や比較をしやすくするために一定の条件でグルーピングされて割り当てられています。

「それぞれの動詞がどんな意味でどんな場面で使われるべきか」についてがグループで定義されているんですね。

それぞれのグループについては下表をご覧ください。

グループ 動詞の種類
Common(共通) 「Add」など、ほぼすべてのコマンドレットに適用できる汎用アクションを定義します。
Communications(通信) 「Connect」などの通信に適用されるアクションを定義します。
Data(データ) 「Backup」などのデータ処理に適用されるアクションを定義します。
Diagnostic(診断) 「Debug」などの診断に適用されるアクションを定義します。
Lifecycle(ライフサイクル) 「Complete」のようなライフサイクルに適用されるアクションを定義します。
Security(セキュリティ) 「Revoke」のようなセキュリティに適用されるアクションを定義します。
Other(その他) その他のタイプのアクションを定義します。

コマンド名を決めるときもいろいろと考えないといけないんですね~。

では実際に自作モジュールを作り、「承認された動詞」と「承認されていない動詞」の違いを見てみましょう。

承認されていない動詞を使って名前付け

まずは承認されていない動詞の場合です。自作したモジュールはこちらです。

Hoge ってそもそも動詞ですらないですね 笑

 Import-Module で実際にインポートしてみると

とこのように警告が表示されましたね。"Verbose" パラメータを使用すると承認されていない動詞が使われている場所を教えてくれるみたいです。

確かに 'Hoge-Message' 関数が悪いと教えてくれました。非常に親切です。

ちなみに、あくまで警告ですのでこの状態でも作成した関数使用することができます。

承認された動詞を使って名前付け

次に承認された動詞の場合です。自作したモジュールはこちらです。

ご覧のように、今回は"Write"を使用しました。

Communications グループに属している承認された動詞ですね。

この状態でモジュールをインポートしてみましょう。

結果のように、問題なくインポートすることができています。読み込ませた関数も問題なく実行できていますね。

このように、インポート時の警告を回避するためには自作関数・コマンドレットに対し”承認された動詞”を使って名前付けする必要があります。

まとめ

自作関数や自作コマンドレットを作成する場合、

承認された動詞

を使って名前付けをする。

承認された動詞を確認するには

Get-Verb

を実行する。

ただし、警告のままでも実行することはできる。

スポンサーリンク

-コア関数・その他
-, , , ,

Copyright© 【チェシャわら】PowerShellとは、から学ぶ入門者の教科書-脱コマンドプロンプト- , 2018 AllRights Reserved Powered by micata2.