[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]] * 目次 [#sdb05f6b] #contents *概要 [#e894f3c3] -シェルとは対話型でOSをControl可能なUIのことである。 -CUI型のものとGUI型のものがある。 --Windows ---CUI:CMD、PowerShell ---GUI:Windows shell、Windows Explorer **シェルとスクリプトの違い [#sff26232] -シェルは対話型で実行可能。スクリプト化してバッチ実行可能。 -スクリプトはバッチ実行のみ可能。 *GUIシェル [#q276082e] 現代の Microsoft Windows はシェルとして~ Windows shell を使用しており、その代表として Windows Explorer がある。~ Windows shell は、デスクトップ環境、スタートメニュー、タスクバーを含めた全体を意味し、~ Windows Explorer はファイル管理機能にアクセスするグラフィカルユーザインタフェースである。 *CUIシェル [#e202f383] **テキストベースのシェル [#x963265d] テキストベースのシェルには、以下のものがある。 -シェル - 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 テキストベースのシェルの変数に文字列:"・・・・.exe" を代入して、~ 変数に入れた文字列(というか文字列しか入らない)を「使う」と、~ あたかもコマンドを手打ちしたようにそのまま動いてしまう。 >(これがOSと人間のCUI = シェル)、 これは、プログラマにとって違和感があるが、~ プログラマ的には、 -[[VBS]]:WScript.Shellオブジェクト -.NET:Processオブジェクト を使わないとEXE起動できないと思ってしまう。~ (文字列の変数そのままでEXEが起動できる違和感) これはテキストベースのシェルの特性であると割り切ると理解しやすい。 **オブジェクトベースのシェル [#f2c4b0d9] ***Powershell [#g819ccd0] 以前から、オブジェクトベースのプログラム、スクリプト(perl、[[WSH>VBS]])などは存在したが、~ Powershellが唯一のオブジェクト・ベースのシェル(perlに似ている)である。~ #OSレイヤから少々遠いためシェルというよりシェルスクリプトという意見もある。 -PowerShell:Windowsでおそらく最高のシェル~ http://programming-aip.blogspot.jp/2013/01/powershellwindows.html --最近は、コマンドレットも充実してきて人気も出てきていると思います。 --分析中で面白いのは、~ 「大量の出力を扱う場合は、オブジェクト・ベースが仇となる場合もある」~ という所である。 ---理由は、大量テキスト処理可能なCUIのEXEにパイプさせれば上手く編集できるため。~ しかし、Windowsの場合、強力なテキスト処理を実装するCUIのEXEが充実していない。 *参考 [#p4066126] **Junichi Anno’s slideshows on SlideShare [#q5c2ac02] http://www.slideshare.net/junichia/tag/powershell -Windows PowerShell 3.0 によるWindows Server 2012 管理の自動化 v2.2 2012.10.1...~ http://www.slideshare.net/junichia/windows-powershell-30-windows-server-2012 --2012以降は管理コンソールの裏はPowerShellコマンドレットになる。 ---現行、管理コンソールはCUI → [[WMI]]で構成されている。 ---コマンドレットの裏は.NET、その裏は[[WMI]](Windows Management Instrumentation)。~ --MS的には、今後PowerShell押し。 ---コマンドレットは<操作>-<ターゲット>の名称ルールに準拠。 ---[[WSH>VBS]]([[VBS]]とJS)は凍結される。 ---[[BAT]]は今後もエンハンス有り。 ---[[PowerShell]]から[[BAT]]や、[[WSH>VBS]]を実行可能。 ---また、Get-WmiObjectで[[WMI]]も実行可能。 ---難しい事をやるなら、まだ[[WMI]]が必要。 --windows management framework 3.0 RC(Win2008 sp2以降にインストール可能)~ 標準化:[[PowerShell]] → WS-Management → CIMOM、SMI-S(WS-Management 以下から他のPFも管理できる) ---Windows PowerShell 3.0 ---WinRM ---[[WMI]](アップデート ---Windows PowerShell Web Service(WPWS) ---Server Manager CIM Provider -皆、テキストベース → オブジェクトベースのShellの違いに混乱する。 --パイプで渡せる型はある。 --パイプで何が渡るかはGet-Memberコマンドレット調べる~ http://mojibake.seesaa.net/article/53585441.html ---シェルだが、プログラム、スクリプト(perl)のような仕様。 ---変数、配列、Property、Method(.NETライク)、また、~ 無名関数、delegate、検索条件をラムダ式的に・・・なども可能。~ Like This ↓パイプ ↓ラムダ式的な get-service | where-object {$_.Status -eq "Running"} パイプしなくてもキャスト(暗黙)でつなげられる。 -エイリアスを使ってUnix風にできる。 -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を指定すれば処理中のジョブ等に再接続することも可能。 --ワークロフロー ---ファイルとして登録 ---クライアントでもサーバでも実行できる。 ---サーバが停止しても処理をレジュームできる。~ #非同期ジョブジョブと異なり、結果は永続化されている。 ---その他、並列処理等も可能。