ゆるおたノート

Tomorrow is another day.

【PowerShell】超簡単にソフトを取り込む準備を始めよう

前回、技術記事との闘いとパッケージ管理について少し語らせていただきました。

【PowerShell】プログラムのプの字も知らない事務職が、黒い画面と格闘した話。 - ゆるおたノート

「で、実際どうやるの?」と気になっている方も多いかと思います。

そこで、ここからは早速パッケージ管理の方法について説明していきます。
出来る限り噛み砕いて書いていますが、分からないところがあったらコメントやお問い合わせ等でご質問いただけると嬉しいです。

準備はいいですか?それではスタート!

…と、その前に。

覚えておいてください

今回の作業は、一時的にではありますがシステムの設定をいじる部分があります。

そのため、会社など、共有パソコンや機密情報を扱うマシンで勝手に以下の操作を行うことはオススメしません!

管理者の方に許可を頂いてから行いましょう。

勝手にいじった結果の動作不良や損害に関しては、当ブログでは責任を負いかねますので、あらかじめご了承ください。
発生したエラーに関しては、どうか自己責任でお願いいたします。

また、当ブログはあくまでも素人が調べて試した結果を再構成したものです。
勘違いや誤りは無いよう努めていますが、まだまだ残っている可能性もあります。(ごめんなさい…)

もしお気づきの際は、ぜひお知らせください…!

失敗から学ぶ

ただ、「これってどういう意味?」とか、「何故そういう動きをするの?」とか、失敗したり用語の意味がわからない時に調べては試す、調べては試すを繰り返して学ぶのはとても大事なことと*1 考えています。 私も、そのためにブログをはじめてみました。

環境が許せば、ぜひご自宅のパソコンなどでチャレンジして、いっぱい闘ってみてください。

それでは、今度こそスタート!

Windows PowerShellとは?

いきなり横文字が出ました。
Win10のパッケージ管理には、PowerShellなるWindowsの機能を使います。

PowerShell自体は、Windows7から標準搭載となったものです。
だから、エディターのダウンロードやらインストールやら、環境の準備は必要ありません

リリース時のニュースによると、

マイクロソフトが提供するコマンドライン環境とスクリプティング機能の1つである。

Windows 7ソフトウェアレビュー - 標準搭載されたWindows PowerShell編 (1) Windows PowerShellの基本 | マイナビニュース

う、うーん…。
私は、まずここで躓きました。

コマンドラインて?スクリプティングって何よ???、と。

要は、「あの」黒い画面で、PCに命令する手段が増えました、
というお話でした。

コマンドライン黒い画面(これをCUI*2 と呼びます)のことで、スクリプティングいろんなコマンドでPCに命令すること、と思ってください。
CUIは、古くは「MS-DOS」や「コマンドプロンプト」が当てはまります。

このCUIスクリプティング機能がいろいろパワーアップして、PowerShellとして提供されています。
もっと詳しく知りたい方は、ぜひググってみてくださいね*3

ここで、黒い画面を操作すると聞いて1度胸の奥の方で「うっ…!」となる方もいるかと思いますが、安心してください、簡単ですよ。(古い)

しつこいですが、英語の動詞と名詞の違いさえ理解できれば、あとは少しのコマンドと書く順番を覚えるだけです。
コマンドを使うだけなら、条件分岐やループ、型の指定なども使いません。

つまり、VBAよりカンタンです!安心してください!

ということで、まずは早速PowerShellを起動してみましょう。

PowerShellを起動!

まずは、画面左下のCortanaさん*4をクリックして、「PowerShell」を検索します。

「PowerShell」と入力。

検索して出てきたら、右クリックして「管理者として実行」を選択します。

今回は、ISEではなく(x86)でもない64bit版を選択してください。
「管理者として実行」を選択します。

もし「管理者として実行」ができなかったら、管理者権限のあるアカウントでやり直してみてください*5

…というわけで、

ででん!
これで、本日のメインゲスト、例の黒い画面の登場です!

PowerShellの初期画面です。

黒というか青いですね。笑

ここからパソコンに命令していきます!わくわく!

現在の設定を確認する

PowerShellの起動ができたら、どんなスクリプトの操作を許可するか(=実行ポリシー)を設定します。

まずは、いったん現在の設定を確認しましょう。
初めてであれば、PowerShellを開いた時から下記のように表示されていると思います。

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:Windows\system32>

「何のこっちゃ?」な方もいると思いますが、とりあえずそのまま4行目に
get-ExecutionPolicyというコマンドを入力してみてください。
コピペでもOKですよ。

こんな↓感じ。

PS C:Windows\system32> get-ExecutionPolicy

ちなみに、このとき単語やハイフン-との間にスペースは使いませんので、ご注意を!

また、PowerShellでは大文字・小文字は特に気にしなくても大丈夫ですが、スペルミスなどの誤字脱字には気を付けてください!
間違ったまま実行すると、「何言ってんの?そんなコマンド知りませんよ?」と
言われます…地味に傷つくやつです。笑

そこで、分かりやすくするために、わたしは↑のように
名詞の部分は単語ごとに1字目を大文字にして使っています。
Shiftボタンの分だけ操作は増えますが、読み間違えて失敗するよりはマシ、ということで。

コマンドの意味

さて、ここでEnterを押すと、さっきのコマンドとあわせて画面はこのような表示になるはずです。

PS C:Windows\system32> get-ExecutionPolicy
Restricted

このコマンドを日本語で置き換えると、こんな内容です。

PS 現在地> 動詞-名詞
結果

さらに、これをVBA的に言うとこんな感じ。

PS フォルダのパス> メソッド-オブジェクト
戻り値

(苦手な方もいるかと思いますが、上と見比べてみてくださいね。)

get-ExecutionPolicyは「現在の実行ポリシーの状態を取得する」という意味のコマンドで、Restrictedは、「外部のネットワーク等からのアクセス・操作を制限中」という意味です。

セキュリティで守られている状態ということですね。安心、安心。

ただ、このままだと目的のパッケージ管理ができないので、今回はこれを変更しましょう。

※なお、今回は保存場所(ルート・ディレクトリ)の部分は変更しないので、ここから先は、PS C:Windows\system32>の部分は省略して記載します。
実際の画面では書いてあるものとして適宜補完して読み進めて下さい。

実行ポリシーを変更する

では、早速これ↓を入力します。

set-ExecutionPolicy -Execution RemoteSigned

今度はset-ExecutionPolicy-ExecutionRemoteSignedの間にそれぞれ半角スペースが入りますので、ご注意ください!

いま宣言した実行ポリシーのRemoteSignedは、「遠隔で作成されてインターネットからダウンロードしたスクリプトは、署名されたもののみ端末へのアクセス・操作を許可します*6」という意味です。

つまり、「ある程度しっかり管理されているものだけを処理します」ということです。

オプションで条件を追加する

このコマンドも文法的に言うと、こんな感じになります。

動詞-名詞 -条件の対象 条件の内容
結果

こちらもVBA的に言い換えると、こうですね。

メソッド-オブジェクト -名前付き引き数の名前 名前付き引き数の引き数
戻り値

うん、ちょっと長い!

ちなみに名前付き引き数とは、例えばVBAで表をソートする時のkey:=Range("A1"),〜の部分のことです。

With Sheet1.sort.sortfields
  .add key:=Range("A1"),.apply
End With

名前はkey:=の部分、引き数はRange("A1")の部分ですね。

この名前付き引き数の部分を、PowerShellではオプションと呼びます。
「アレをアレして!ちなみに〇〇が××のやつで!」と言う時の、「ちなみに~」以下の部分を指します。

オプションを使うときは、上述の通り、それぞれコマンドの前に半角のスペースが入ることを覚えておきましょう。

質問に答える

さて、前置きが長くなりましたが、ここでEnterを押すと、今度はこんな風に長めのメッセージが出ます。

実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"):

いきなりビックリしますねぇ。笑

でも、焦らずじっくりメッセージを読みましょう。

セキュリティでパソコンを守ってくれているところを、私たち指揮官が「解放セヨ!」と命令するので「ホントに良いですか?後悔しませんか??」と確認してくれているのです。優しい。

対話モードとスクリプト・モード

今回のように、


(人間) 命令 + Enter

(PC) (確認)

返答 + Enter

実行

結果

(結果を見る)


の形式でリアルタイムに入力・処理していくことを、対話モードと言います。
さっき、実行ポリシーを取得してRestrictedという結果をすぐに返してくれたのも、このためです。

対して、バッチ処理など、事前に「実行ファイル」というものを作ってまとめて出力・実行するスクリプト・モードもあります。
繰り返しや実行のタイミングなど手数のかかる処理をあらかじめ書くことで、作業を効率化できます*7

PowerShellでは、この「対話モード」と「スクリプト・モード」に分かれています*8
今回はひとつずつ指示を出して進めたいので、このまま、対話モードで進めて行きます。

※なお、通常は入力や命令と言ったらEnterを押すところまでを指します。
なので、ここからは基本的にEnterも省いて表記しますね。

代行をお願いする

それでいま、PowerShellさんには「本当に実行してもいいですか?」と聞かれています。

そこですかさず堂々と、

a

と答えてあげてください。超シンプル。笑


  • Y はい(Y)
  • A すべて続行(A)
  • N いいえ(N) ※規定値
  • L すべて無視(L)
  • S 中断(S)
  • ? ヘルプ

の選択肢の中で、すべて実行(A)Aを選んでいます。

これは、人間がソフトをダウンロードしてインストールする時のダブルクリックやはいボタンなどのクリックを、すべて自動で代行してもらうというイメージです。

この後も、メッセージは違えど同じような選択肢が何度か出ます。
基本はすべて実行で一気に代行してもらいますが、その代わり原則「何も考えず全部はいを押すのと同じ状態」になります。

インストール先のフォルダを変えるなど、インストール時の設定変更はその場では出来ないというものなので、頭の片隅に置いておいてください。

実行の結果!

指揮官(自分)からの命令後、パソコンの中で処理をすべて実行してもらって、実行ポリシーをRemoteSignedに変更してくれた結果、PowerShellさんも完了報告してくれます。

RemoteSigned

このように表示されましたか?

これで、めでたく実行ポリシーはRemoteSignedに設定変更されました!
お疲れさまでした!!

やったー!!これで颯爽と黒い画面を操れるよ!!
いぇい!どや顔!ぱちぱち!

…では終わりません。

ぬか喜びさせてごめんなさい。笑
念のため、最後にちゃんと変更できているか確認しましょう。

PowerShellは、こまめに警告してくれるし出力結果も正しく返してくれているのに、何故か処理はちゃんと実行できてないっていう、「テキトーか!」とツッコみたくなるようなことが結構あります。笑
私も何度か失敗されてます…

最初に管理者権限を使って起動できてないとか、パソコンの調子が悪いとか、「PowerShellだけが原因ではない」ことの方が多いようなのですが、この辺の原因は、私の力では特定できませんでした。ごめんなさい…
(そんな時は、めんどくさいので諦めて手動でインストールしましょう…)

だから、そもそもプログラムするときの基本的なお作法として、こまめにチェックするように癖をつけましょうね!

そんなわけで、最初と同じように↓を入力して、現在の状態を確認します。

get-ExecutionPolicy

結果はいかがでしょうか?

RemoteSigned

と出れば、今度こそ設定完了です!ここまでお疲れさまでした!

いぇーい!!ひゅーひゅー!

お疲れさまでした。

今回の操作で、カッコつけてコマンドでソフトを管理する準備が整いました。

個人的に苦労した概念的なところを、意識してちょっと長めに書きました。
何となくイメージは掴めたでしょうか?

あとは、中学英語レベルの簡単な文法さえ分かれば、あとは特に覚えることはありません。断言します。
分からなくなったら、Google先生に聞けばOKなので!

しかも実は、PowerShellにも入力補完の機能があるんですよ。

これから、そんな優しい易しいPowerShellを使って、実際にソフトのダウンロードやインストールを行っていきます。

わたしも早くつづきをアップできるように頑張ります。
(そもそも読者様がいらっしゃるかわからないですが…)

ここで一旦離脱する方は、戻ってくるまで実行ポリシーはRestrictedに戻しておいてくださいね。

というわけで、ここまでお付き合いいただきありがとうございました!
また次回!

このシリーズについて

黒い画面(CUI)でPCを操作するテクニックをご紹介。

以下の方を対象に、Windows10のPowerShellを使ってパッケージを導入する手順をお送りしています。

プログラムには少し興味があって仕事でVBA触ったりはするけど、
『あの』黒い画面はちょっと怖くて触れない…という方。

疑問点・不明点がありましたら、コメント欄で頂ければと思います!

次回

【PowerShell】「そもそもパッケージって何?」っていうあなたに、少し説明します。 - ゆるおたノート

連載目次

  1. 【PowerShell】プログラムのプの字も知らない事務職が、黒い画面と格闘した話。 - ゆるおたノート
  2. 当記事【PowerShell】超簡単にソフトを取り込む準備を始めよう - ゆるおたノート
  3. 【PowerShell】「そもそもパッケージって何?」っていうあなたに、少し説明します。 - ゆるおたノート
  4. 【PowerShell】コマンドを使ってパッケージ・プロバイダをインストールしよう - ゆるおたノート
  5. 【PowerShell】パッケージ・プロバイダからパッケージを貰おう - ゆるおたノート
  6. 【おまけ】PowerShellで出来ることを知って、もう1つだけレベルを上げよう - ゆるおたノート

蛇足

本文とは逆に、もしここまでの操作をVBAっぽく書くとすれば
こんな感じになるのかな。*9

Dim CurrentDir As SystemFolder
Dim SystemConfig As SystemFileObjects
Set CurrentDir = Cdrive.Windows.system32
Set SystemConfig = Computer.CurrentDir.ConfigData
 
'get-ExecutionPolicyと入力。
Dim tmpStatus As Variant
tmpStatus = SystemConfig("ExecutionPolicy").value
 
Debug.Print tmpStatus 'Restrictedと出力。
 
'set-ExecutionPolicy -Execution RemoteSignedと入力し、すべて実行と指定。
With SystemConfig("ExecutionPolicy")
  .value = "RemoteSigned"
  .setPolicy Execution:=xlAllYes
End With
 
'念のためget-ExecutionPolicyと入力して確認。
tmpStatus = SystemConfig("ExecutionPolicy").value
 
Debug.Print tmpStatus 'RemoteSignedと出力。

注釈

*1: これは受け売りです!笑

*2: Character User Interfaceの略。
Characterは「文字」という意味で、文字や文章を書いていくことによって、直接システムに指示を出して操作する画面のことをCUIと呼びます。
ほぼ同じ意味で、CLI(Command Line Interface)と呼ぶこともあります。

また、対義語はGUI(=Graphical User Interface)です。
ボタンやアイコンなどの「グラフィック」に前もって指示をインプットしておいて、それをタッチしたりクリックしたりすることで間接的にシステムを操作するものを指します。

*3: べ、別に説明がめんどくさいわけでは…もごもg

*4: Cortana(コルタナ)と言って、Windows10から登場した
「エージェント機能」です。iPhoneのSiriや、docomoのひつじのしつじくん、
Amazon EchoのAlexaなどが仲間。

私は使ってないですが、天気を知らせてくれたり、リマインダーしてくれたりするみたいですね。

*5: 会社のPCや家族で共有しているPCなどは、システム設定やソフトウェアのインストールが制限されていることがあります。

ここで「管理者として実行」が出来ない場合は、残念ながら今回の操作は出来ないのです。諦めましょう…

*6: あと、ローカルのスクリプトも使えます。

*7: 詳しくは、こちら↓が参考になるかと思います。

*8: VBAでは、このようなモードの概念は無いかと思いますが、強いて言えば前者がイミディエイト・ウィンドウ、後者が通常のモジュールに当たります。

*9: 名前とか文法とかいろいろ適当に書いてますので、くれぐれも真に受けないでください。
VBAでは100%動かないと思いますので悪しからず…