ゆるおたノート

Tomorrow is another day.

【PowerShell】超簡単にソフトを取り込むための設定をしよう

2019/04/22(Mon) Rewrited.

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

yuru-wota.hateblo.jp

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

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

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

…と、その前に。

覚えておいてください

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

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

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

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

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

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

失敗から学ぶ

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

私も、そのためにブログをはじめてみました。

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

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

Windows PowerShellとは?

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

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

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

マイクロソフトが提供するコマンドライン環境とスクリプティング機能の1つである。
マイナビニュース)
https://news.mynavi.jp/article/20091104-windows7soft/

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

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

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

コマンドライン黒い画面(これをCUI*2 と呼びます)のことで、
スクリプティングいろんなコマンドでPCに命令すること
と思ってください。

古くは「MS-DOS」や「コマンドプロンプト」が当てはまりますが、
これらがいろいろパワーアップしています。
もっと詳しく知りたい方は、ぜひググってみてくださいね*3

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

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

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

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

PowerShellを起動!

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

f:id:yuricks7:20180408222032p:plain
PowerShell」と入力。

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

f:id:yuricks7:20180401211830p:plain
今回は、ISEではなく(x86)でもない64bit版を選びます。

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

…というわけで、

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

f:id:yuricks7:20180408222842p:plain
初期画面です。黒というか青いですね。笑

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

現在の設定を確認する

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)<br>[A] すべて続行(A)<br>[N] いいえ(N)<br>[L] すべて無視(L)<br>[S] 中断(S)<br>[?] ヘルプ (既定値は "N"):

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

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

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

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

今回のように、
-------------------------------
[人間] 命令+Enter

[PC] (確認)

[人間] (返答+Enter

[PC] 実行

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

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

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

※なお、通常は入力や命令と言ったら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触ったりはするけど、
『あの』黒い画面はちょっと怖くて触れない…という方。

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

次回

yuru-wota.hateblo.jp

連載目次

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

蛇足

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

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は「文字」という意味で、文字や文章を書いていくことによって、
直接システムに指示を出して操作することです。

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

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

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

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

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

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

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

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

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