[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]

-[[戻る>Windows OSの基礎的トピック]]

* 目次 [#sdb05f6b]
#contents

*概要 [#e894f3c3]
-シェルとは対話型でOSをControl可能なUIのことである。
シェルとは対話型でOSをControl可能なUIのことである。

-CUI型のものとGUI型のものがある。
--Windows
---CUI:CMD、PowerShell
---GUI:Windows shell、Windows Explorer 
*詳細 [#y6cfa999]

**シェルとスクリプトの違い [#sff26232]
-シェルは対話型で実行可能。スクリプト化してバッチ実行可能。
-スクリプトはバッチ実行のみ可能。
**インタラクティブ・シェルのUI [#jd4325a8]
インタラクティブ・シェルのUIには、~
CUI型のものとGUI型のものがある。

*GUIシェル [#q276082e]
現代の Microsoft Windows はシェルとして~
Windows shell を使用しており、その代表として Windows Explorer がある。~
***CUI [#zc4dadea]
-OSと人間のUIがCUI = CUIシェル

Windows shell は、デスクトップ環境、スタートメニュー、タスクバーを含めた全体を意味し、~
Windows Explorer はファイル管理機能にアクセスするグラフィカルユーザインタフェースである。
-Windowsでは、
--[[CMD>#q601ab70]]
--[[PowerShell>#i25604bd]]
--[[Windows Terminal>#n418ff33]]

*CUIシェル [#e202f383]
**テキストベースのシェル [#x963265d]
***GUI [#dc054249]
-OSと人間のUIがGUI = GUIシェル

テキストベースのシェルには、以下のものがある。
-Windowsでは、
--[[Windows shell]]
--[[Windows Explorer]]

**シェル・スクリプト [#mcfc0a41]
-シェルのプログラミング言語をシェル・スクリプト
-シェル・スクリプトによるプログラミングをシェル・[[スクリプティング]]

と呼ぶ。

***シェル言語のタイプ [#s6b0795d]
シェルで使用される言語には以下の様なタイプがある。

-テキストベースのシェル言語

-オブジェクトベースのシェル言語

※ リダイレクションとパイプがテキストか?オブジェクトか?(→[[詳細>#m31b9845]]

***シェル・[[スクリプティング]]とは? [#tf0eb368]
シェル言語やスクリプト言語を使用した、シェル向けの[[スクリプティング]]。

-[[CMD>#q601ab70]]や[[PowerShell>#i25604bd]]は、~
[[インタラクティブ・シェル>#jd4325a8]]とシェル・[[スクリプティング]]の機能も持つ。

-一方で、[[WSH]](の標準言語である[[VBS]])などは、[[スクリプティング]]の機能しか持たない。

**インタラクティブ・シェルとシェル・スクリプトの違い [#sff26232]

***インタラクティブ・シェル [#cdb9fd3e]
対話的に実行可能

***シェル・スクリプト [#f7e5a59a]
スクリプト化して対話的にバッチ実行。

*Windowsシェル [#cf4a832e]

**インタラクティブ・シェルのUI [#ad9d45ac]

***GUIシェル [#q276082e]
現代の Microsoft Windows はシェルとして[[Windows shell]] を使用している。

***CUIシェル [#e202f383]
CUIシェルには、以下のものがある。

-シェル - Wikipedia > テキストベースのシェル~
http://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%A7%E3%83%AB#.E3.83.86.E3.82.AD.E3.82.B9.E3.83.88.E3.83.99.E3.83.BC.E3.82.B9.E3.81.AE.E3.82.B7.E3.82.A7.E3.83.AB
--4DOSMS~
DOS、OS/2、Windows NT 用のシェル。
--cmd.exe~
OS/2、Windows CE、Windows NTのシェル。
--[[PowerShell>#i25604bd]]~
cmd.exeの後継のオブジェクト指向型シェル

テキストベースのシェルの変数に文字列:"・・・・.exe" を代入して、~
**シェル・スクリプト [#ua19656e]

***CUIシェルを持つスクリプト言語 [#m31b9845]
-テキストベースのシェル言語、オブジェクトベースのシェル言語がある。
--テキストベース:[[BAT]]
--オブジェクトベース:[[PowerShell>#i25604bd]]

-変数に文字列:"*.exe" を代入して、~
変数に入れた文字列(というか文字列しか入らない)を「使う」と、~
あたかもコマンドを手打ちしたようにそのまま動いてしまう。

>(これがOSと人間のCUI = シェル)、
-CUIシェルの仕様は、プログラミング言語的には、違和感があるが、~
これがCUIシェルの特性であると割り切ると理解しやすい。

これは、プログラマにとって違和感があるが、~
***CUIシェルを持たないスクリプト言語 [#obc96349]
-CUIシェルを持たないスクリプト言語では、

プログラマ的には、
--[[VBS]]:WScript.Shellオブジェクト
--.NET:Processオブジェクト
--Perl:system関数か、exec関数
--[[Python>Visual Studio Code#red23b04]]:subprocessモジュール

-[[VBS]]:WScript.Shellオブジェクト
-.NET:Processオブジェクト
>を使わないとEXE起動できない。

を使わないとEXE起動できないと思ってしまう。~
(文字列の変数そのままでEXEが起動できる違和感)
-また、起動したEXEとは、標準入出力で明示的に通信する必要がある。

これはテキストベースのシェルの特性であると割り切ると理解しやすい。
-[[Python>Visual Studio Code#red23b04]]&[[Notebook>Azure DatabricksのNotebook#p84bd61d]]では、[[Notebook>Azure DatabricksのNotebook#p84bd61d]]がインタラクティブなので、~
CUIシェルを持たないスクリプト言語でも、インタラクティブに実行可能。

**オブジェクトベースのシェル [#f2c4b0d9]
***Powershell [#g819ccd0]
以前から、オブジェクトベースのプログラム、スクリプト(perl、[[WSH>VBS]])などは存在したが、~
Powershellが唯一のオブジェクト・ベースのシェル(perlに似ている)である。~
#OSレイヤから少々遠いためシェルというよりシェルスクリプトという意見もある。
*UNIX / Linuxのシェル [#b3fc9ad7]

-PowerShell:Windowsでおそらく最高のシェル~
http://programming-aip.blogspot.jp/2013/01/powershellwindows.html
**インタラクティブ・シェルのUI [#mc2b6a95]

--最近は、コマンドレットも充実してきて人気も出てきていると思います。
***GUIシェル [#q697f01b]
[[Linuxのデスクトップ環境>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?Linux%E3%81%AE%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E7%92%B0%E5%A2%83]]

--分析中で面白いのは、~
「大量の出力を扱う場合は、オブジェクト・ベースが仇となる場合もある」~
という所である。
***CUIシェル [#nc3a45b6]
Windowsの様に特別、名称は付与されていない~
(ソフトウェアが複数存在したりしない)。

---理由は、大量テキスト処理可能なCUIのEXEにパイプさせれば上手く編集できるため。~
しかし、Windowsの場合、強力なテキスト処理を実装するCUIのEXEが充実していない。
-[[シェル]]の外枠

*参考 [#p4066126]
--コンソール
---昔のハードの延長上で使われる言葉
---物理的なハードウェア直でホストを触るケース

**Junichi Anno’s slideshows on SlideShare [#q5c2ac02]
http://www.slideshare.net/junichia/tag/powershell
--ターミナル
---TSS⁠でネットワーク経由でホストを触るケース
---リモート・シェルの[[SSH>#nf70d6ec]](プロトコル)が代表的な手段

-Windows PowerShell 3.0 によるWindows Server 2012 管理の自動化 v2.2 2012.10.1...~
http://www.slideshare.net/junichia/windows-powershell-30-windows-server-2012
**シェル・スクリプト [#w1e35128]

--2012以降は管理コンソールの裏はPowerShellコマンドレットになる。
---現行、管理コンソールはCUI → [[WMI]]で構成されている。
---コマンドレットの裏は.NET、その裏は[[WMI]](Windows Management Instrumentation)。~
***CUIシェルを持つスクリプト言語 [#r40d2638]
-B系
--[[Bash]](Bourne-Again Shell)
--sh(Bourne Shell)
--ksh(Korn Shell)

--MS的には、今後PowerShell押し。
---コマンドレットは<操作>-<ターゲット>の名称ルールに準拠。
---[[WSH>VBS]]([[VBS]]とJS)は凍結される。
---[[BAT]]は今後もエンハンス有り。
---[[PowerShell]]から[[BAT]]や、[[WSH>VBS]]を実行可能。
---また、Get-WmiObjectで[[WMI]]も実行可能。
---難しい事をやるなら、まだ[[WMI]]が必要。
-C系
--csh
--tcsh

--windows management framework 3.0 RC(Win2008 sp2以降にインストール可能)~
標準化:[[PowerShell]] → WS-Management → CIMOM、SMI-S(WS-Management 以下から他のPFも管理できる)
***CUIシェルを持たないスクリプト言語 [#r70fe254]
Perl、[[Python>Visual Studio Code#red23b04]]などの単なるスクリプト言語をシェル用に使うケース

---Windows PowerShell 3.0
---WinRM
---[[WMI]](アップデート
*その他、様々なシェル [#w594b422]

---Windows PowerShell Web Service(WPWS)
---Server Manager CIM Provider 
**ターミナル・アプリ [#mfd684c2]
ターミナルとは[[シェル]]の外枠を意味する。

-皆、テキストベース → オブジェクトベースのShellの違いに混乱する。
--パイプで渡せる型はある。
--パイプで何が渡るかはGet-Memberコマンドレット調べる~
http://mojibake.seesaa.net/article/53585441.html
---シェルだが、プログラム、スクリプト(perl)のような仕様。
---変数、配列、Property、Method(.NETライク)、また、~
無名関数、delegate、検索条件をラムダ式的に・・・なども可能。~
 Like This
 
  ↓パイプ    ↓ラムダ式的な
  get-service | where-object {$_.Status -eq "Running"} 
 
  パイプしなくてもキャスト(暗黙)でつなげられる。
***Windowsのターミナル [#c13d7865]
-Windowsには、[[UNIX / Linux>#nc3a45b6]]と異なり、~
多くのCUI系のターミナルのソフトウェアがある。
--[[CMD]]
--[[PowerShell]]
--[[WSL>Windows Subsystem for Linux]]
--[[Windows Terminal]]

-エイリアスを使ってUnix風にできる。
-参考
--Windowsで使えるターミナルとシェルのまとめ - Qiita~
https://qiita.com/Ted-HM/items/9a60f6fcf74bbd79a904

-Windows2012からuiのアンインストール可能で、サーバコア風に運用可能。
***エミュレータ・シェルの類 [#sf0f437a]
-エミュレータ機能部分が[[シェル]]の外枠となるケース。
-「[[Linuxサブシステム]]」(特にWSLなど)が参考になる。

-探し方いろいろ
--Get-Command
--Get-Module
--Get-WmiObject
--Get-Member
***[[リモート・シェル>#zdfde8b9]]の類 [#a6d3b364]
リモート機能部分が[[シェル]]の外枠。

-PSドライブ、
>いろいろなDirectoryがDirできる。~
HDD、レジストリ、AD Directoryサービス、環境変数.etc
**リモート・シェル [#zdfde8b9]

-非同期ジョブ、リモート、ワークフローなど。
***Windows [#k83db5f4]
[[RDP]]、WinRM

--非同期ジョブ
---start-job - scriptblock { ・・・コード・・・ }
---start-job - filepath ファイルパス
---#結果はSessionの範囲でしか有効では無い。
***Linux [#nf70d6ec]
-[[SSH]]のソフトウェアである[[OpenSSH>SSH#gb195be7]]、Tera Term、KiTTY(PuTTY)

--リモート接続
---invoke-command マシン名やSessionを指定 -scriptblock { ・・・コード・・・ }
---invoke-command マシン名やSessionを指定 -filepath ファイルパス
---#Sessionを指定すれば処理中のジョブ等に再接続することも可能。
-かつては、Telnetやrsh(remote shell)、rloginといった~
プロトコル(ソフトウェア)も使用されていたらしい。

--ワークロフロー
---ファイルとして登録
---クライアントでもサーバでも実行できる。
※ 其々のプロトコルやソフトウェアのスタックがどうなっているか?は未調査

---サーバが停止しても処理をレジュームできる。~
#非同期ジョブジョブと異なり、結果は永続化されている。
**[[Azureのシェル]] [#yf839a72]

---その他、並列処理等も可能。
***[[Azure PowerShell]] [#ybc84305]

***[[Azure Cloud Shell]] [#e01d8858]

***[[Azure CLI]] [#z12c6f70]

*参考 [#p4066126]
-Windowsスクリプティング環境比較:PowerShell vs WSH(1/4) - @IT
--1.PowerShellのインストールと動作確認~
http://www.atmarkit.co.jp/fwin2k/operation/pshvswsh/pshvswsh_01.html
--2.アプリケーションとしての比較~
http://www.atmarkit.co.jp/fwin2k/operation/pshvswsh/pshvswsh_02.html
--3.スクリプト機能の比較(1)~
http://www.atmarkit.co.jp/fwin2k/operation/pshvswsh/pshvswsh_03.html
--4.スクリプト機能の比較(2)~
http://www.atmarkit.co.jp/fwin2k/operation/pshvswsh/pshvswsh_04.html

**UI (CUI) [#f8900168]
***[[CMD]] [#q601ab70]
***[[PowerShell]] [#i25604bd]
***[[Windows Terminal]] [#n418ff33]
***[[Azureのシェル]] [#k4947194]

**UI (GUI) [#k4c102ca]
***[[Windows shell]] [#f775ffdd]
***[[Windows Explorer]] [#z2278d5a]
***[[自作CUI(CLI)の話]] [#y632fad4]

**体で覚えるLinuxの基本 [#k76e87d6]
-再入門 体で覚えるLinuxの基本 - 再入門 体で覚えるLinuxの基本:ITpro~
http://itpro.nikkeibp.co.jp/article/COLUMN/20060301/231446/

***シェルの基本操作法前編 [#d2651d9e]
+シェルの役割と種類
+シェルの使い方
+オンライン・マニュアルの使い方
+リダイレクションとパイプ

***シェルの基本操作法後編 [#ka48697f]
+エイリアスやヒストリの使い方
+名前の補完とプロセスの実行
+シェル変数と環境変数
+シェルの設定ファイル
+シェルのプロンプト文字列

***シェル・スクリプト [#l3942116]
+シェル・スクリプトとは
+スクリプトのプログラミング
+シェルの基本文法
+スクリプトの引数
+引数の高度な利用法

***システム管理に役立つコマンド [#yd5de934]
+uname,hostname,uptime
+ps,date,whoami,last

----
Tags: [[:シェル]], [[:インフラストラクチャ]], [[:Windows]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS