Open棟梁Project - マイクロソフト系技術情報 Wiki
目次 †
概要 †
- シェルとは対話型でOSをControl可能なUIのことである。
- CUI型のものとGUI型のものがある。
- Windows
- CUI:CMD、PowerShell
- GUI:Windows shell、Windows Explorer
シェルとスクリプトの違い †
- シェルは対話型で実行可能。スクリプト化してバッチ実行可能。
- スクリプトはバッチ実行のみ可能。
GUIシェル †
現代の Microsoft Windows はシェルとして
Windows shell を使用しており、その代表として Windows Explorer がある。
Windows shell は、デスクトップ環境、スタートメニュー、タスクバーを含めた全体を意味し、
Windows Explorer はファイル管理機能にアクセスするグラフィカルユーザインタフェースである。
CUIシェル †
テキストベースのシェル †
テキストベースのシェルには、以下のものがある。
テキストベースのシェルの変数に文字列:"・・・・.exe" を代入して、
変数に入れた文字列(というか文字列しか入らない)を「使う」と、
あたかもコマンドを手打ちしたようにそのまま動いてしまう。
(これがOSと人間のCUI = シェル)、
これは、プログラマにとって違和感があるが、
プログラマ的には、
- VBS:WScript.Shellオブジェクト
- .NET:Processオブジェクト
を使わないとEXE起動できないと思ってしまう。
(文字列の変数そのままでEXEが起動できる違和感)
これはテキストベースのシェルの特性であると割り切ると理解しやすい。
オブジェクトベースのシェル †
Powershell †
以前から、オブジェクトベースのプログラム、スクリプト(perl、WSH)などは存在したが、
Powershellが唯一のオブジェクト・ベースのシェル(perlに似ている)である。
#OSレイヤから少々遠いためシェルというよりシェルスクリプトという意見もある。
- 最近は、コマンドレットも充実してきて人気も出てきていると思います。
- 分析中で面白いのは、
「大量の出力を扱う場合は、オブジェクト・ベースが仇となる場合もある」
という所である。
- 理由は、大量テキスト処理可能なCUIのEXEにパイプさせれば上手く編集できるため。
しかし、Windowsの場合、強力なテキスト処理を実装するCUIのEXEが充実していない。
参考 †
Junichi Anno’s slideshows on SlideShare? †
http://www.slideshare.net/junichia/tag/powershell
- 2012以降は管理コンソールの裏はPowerShellコマンドレットになる。
- 現行、管理コンソールはCUI → WMIで構成されている。
- コマンドレットの裏は.NET、その裏はWMI(Windows Management Instrumentation)。
- windows management framework 3.0 RC(Win2008 sp2以降にインストール可能)
標準化:PowerShell → WS-Management → CIMOM、SMI-S(WS-Management 以下から他のPFも管理できる)
- Windows PowerShell Web Service(WPWS)
- Server Manager CIM Provider
- 皆、テキストベース → オブジェクトベースのShellの違いに混乱する。
- Windows2012からuiのアンインストール可能で、サーバコア風に運用可能。
- 探し方いろいろ
- Get-Command
- Get-Module
- Get-WmiObject?
- Get-Member
- PSドライブ、
いろいろなDirectoryがDirできる。
HDD、レジストリ、AD Directoryサービス、環境変数.etc
- 非同期ジョブ
- start-job - scriptblock { ・・・コード・・・ }
- start-job - filepath ファイルパス
- #結果はSessionの範囲でしか有効では無い。
- リモート接続
- invoke-command マシン名やSessionを指定 -scriptblock { ・・・コード・・・ }
- invoke-command マシン名やSessionを指定 -filepath ファイルパス
- #Sessionを指定すれば処理中のジョブ等に再接続することも可能。
- ワークロフロー
- ファイルとして登録
- クライアントでもサーバでも実行できる。
- サーバが停止しても処理をレジュームできる。
#非同期ジョブジョブと異なり、結果は永続化されている。