Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Recap: PowerShell Core

1,589 views

Published on

Interact 2018 Session #T32 の資料です。

Published in: Technology
  • Be the first to comment

Recap: PowerShell Core

  1. 1. #T32 Recap: PowerShell Core Interact 2018 (2018.06.30) Kazuki Takai
  2. 2. 自己紹介  高井 一輝 (Takai Kazuki)  某ISP勤務  クラウドサービスの開発、設計、設備維持  Windows Server / System Center / Linux / etc…  Microsoft MVP - Cloud and Datacenter Management  System Center User Group Japan (SCUGJ)  Twitter : @zhuky7 / Facebook : kazuki.takai  Blog : http://operationslab.wordpress.com/
  3. 3. セッションの内容  お話しすること  PowerShell Core とは何か  Windows PowerShell との違い  PowerShell Core を使うべきか  お話ししないこと  PowerShell の構文  PowerShell の使い方  Windows Server 2016 Nano Server 上の PowerShell Core 5 / 5.1
  4. 4. セッションのゴール  Windows PowerShell と PowerShell Core の違いについて理解する  何となく使い所が分かる  PowerShell Core を使うための準備ができる  使おうと思ったときに利用できる
  5. 5. ところで…  Windows PowerShell を使っている方  PowerShell Core を使っている方  PowerShell を Windows の管理に使っている方  PowerShell を Linux の管理に使っている方  PowerShell を Azure の管理に使っている方  Microsoft Azure を使っている方  PowerShell を Office 365 の管理に使っている方  Office 365 を使っている方  PowerShell をアプリケーションの処理(の一部)に使っている方  PowerShell のモジュールを開発している方
  6. 6. Agenda  PowerShell Core とは  PowerShell Core を使う(ことを検討する)べき人  PowerShell Core のインストール  PowerShell Core と Remoting  Azure Cloud Shell と PowerShell Core
  7. 7. はじめる前に  本資料の内容は個人的な検証結果に基づきます  所属する会社や組織、マイクロソフト社の公式な見解を記載するものではありません  表記や内容に誤りがあるなど、お気づきの点があれば、ご連絡いただけると幸いです  本セッションでは PowerShell 6.0.2 及び 6.1.0 Preview 3 を使用します  今後のリリースで機能や動作が変更、削除される可能性があります
  8. 8. PowerShell 6.0 is Generally Available  PowerShell Core 6.0 GA – 2018/01/10  PowerShell Team Blog – PowerShell Core 6.0: Generally Available (GA) and Supported!  PowerShell 6.0.1 – 2018/01/25  Engine updates  Address vulnerabilities  PowerShell 6.0.2 – 2018/03/15  Engine updates  Address vulnerabilities  Fix some bugs and Improvements
  9. 9. PowerShell Core とは  Full .NET Framework に依存しない PowerShell  .NET Core ベース  クロスプラットフォーム  Windows Client, Windows Server, Ubuntu, Debian, CentOS, Red Hat Enterprise Linux, OpenSUSE, Fedora, macOS, Arch Linux, Kali Linux, AppImage (Linux), Windows on ARM32/ARM64, Raspbian (Stretch) 注:公式にはサポートされないものや実験的なリリースも含む  PowerShell 6 は PowerShell Core としての最初のリリース(Nano を除く)  PowerShell 2.0 – 5.x : Windows PowerShell  PowerShell Core 5.x : PowerShell Core for Windows Server 2016 Nano Server  PowerShell 6 : PowerShell Core
  10. 10. PowerShell Core と Windows PowerShell の主な違い PowerShell Core Windows PowerShell Latest Version PowerShell 6.0.2 / 6.1.0 Preview 3 PowerShell 5.1 (with WMF 5.1) Platform / OS Windows (x86/x64/arm), Linux, macOS Windows (x86/x64) Runtime .NET Core (.NET Core 2.0) .NET Framework Edition ($PSEdition) Core Desktop Executable binary pwsh (pwsh.exe) powershell.exe WMF Independent Required Remoting (PSRP) SSH or WinRM WinRM Default Encoding UTF-8 (with NO BOM) UTF-16 Lifecycle Microsoft Modern Lifecycle Policy Depends on OS Lifecycle Licensing MIT license Depends on OS license
  11. 11. Windows における PowerShell  Windows PowerShell は引き続きサポートされる  OS 及び Windows Management Framework のサポートポリシーに基づく  大幅な機能追加やエンハンスは行われない予定  GitHub label:Consider-WindowsPowerShell51  PowerShell Core は個別にインストールが必要  In-box ツールとして OS に含まれるかどうかは未定(現時点で予定無し)  Windows PowerShell を置き換える予定は、現時点では無し  PowerShell Core と Windows PowerShell は共存可能  バイナリやパスは基本的に異なる  Remoting については注意が必要
  12. 12. PowerShell Core への移行  全ての人が PowerShell Core / PowerShell 6 へ移行すべきか? No  PowerShell Core は Windows PowerShell の全てをカバーするものではない  少なくとも現時点では  互換性は継続的に改善される予定
  13. 13. PowerShell Core を使うべき人  PowerShell Core を使ってみる・使い始めた方がよい人  クロスプラットフォーム / マルチプラットフォームで PowerShell を利用したい人  Container などの、開発スピードが速いプロダクトを利用している(したい)人  Windows Server Semi-Annual Channel を利用している人  Microsoft Azure や Office 365 などの管理に PowerShell を使用している人  アプリケーションの処理の一部に PowerShell を使用したい人  アプリケーション固有のパッケージングをしたい人  PowerShell モジュールを開発している人  PowerShell の動作を変えたい人(PowerShell のコードを改修したい人)
  14. 14. PowerShell Core を使わなくてもよい人  必要がなければ、Windows PowerShell を使い続ければよい人  Windows Server の管理のみに PowerShell を使用している人  Windows Server を Long Term Servicing Channel で使用している人  Windows のプリミティブな操作を、提供済みの PowerShell モジュールを使用して実行し ている人  同じ構成・バージョンで長期間サポートされることが重要なシステム(で使用する人)  新規のコード:PowerShell Core でも動作するように書いたほうが良い  既存のコード:必要がないなら、今すぐ書き直す必要はない  今後のメンテナンス性を考慮した場合に、書き直したほうが良いのであれば、併せて PowerShell Core との互換性を考慮する
  15. 15. その他の変更点  インストールパス、モジュールパス、プロファイル PowerShell Core Windows PowerShell $PSHOME C:¥Program Files¥PowerShell¥6.0.2 C:¥Windows¥System32¥WindowsPowerShell¥v1.0 $env:PSModulePath C:¥Users¥<user>¥Documents¥PowerShell¥Modules C:¥Program Files¥PowerShell¥Modules c:¥program files¥powershell¥6.0.2¥Modules C:¥Users¥<user>¥Documents¥WindowsPowerShell¥Modules C:¥Program Files¥WindowsPowerShell¥Modules C:¥WINDOWS¥system32¥WindowsPowerShell¥v1.0¥Modules $PROFILE.AllUsersAllHosts C:¥Program Files¥PowerShell¥6.0.2¥profile.ps1 C:¥Windows¥System32¥WindowsPowerShell¥v1.0¥profile.ps1 $PROFILE.AllUsersCurrentHost C:¥Program Files¥PowerShell¥6.0.2¥Microsoft.PowerShell_profile.ps1 C:¥Windows¥System32¥WindowsPowerShell¥v1.0¥Microsoft.PowerShel l_profile.ps1 $PROFILE.CurrentUserAllHosts C:¥Users¥<user>¥Documents¥PowerShell¥profile.ps1 C:¥Users¥<user>¥Documents¥WindowsPowerShell¥profile.ps1 $PROFILE.CurrentUserCurrentHost C:¥Users¥<user>¥Documents¥PowerShell¥Microsoft.PowerShell_ profile.ps1 C:¥Users¥<user>¥Documents¥WindowsPowerShell¥Microsoft.PowerShe ll_profile.ps1
  16. 16. その他の変更点  Path の区切り文字は “/” と “¥” の両方を利用可能  Linux と macOS の PowerShell Core は Case sensitive  実行モジュールのデフォルトオプションが -Command から -File に変更  pwsh <script path> と書ける  OS の判定に組み込み変数が利用可能  $IsWindows  $IsLinux  $IsMacOs  etc...
  17. 17. Support Lifecycle  PowerShell Core Support Lifecycle  https://docs.microsoft.com/en-us/powershell/scripting/powershell-core- support?view=powershell-6  あくまで例です!
  18. 18. 注意点  多数の破壊的な変更  Workflow はサポートされない  カスタムスナップインはサポートされない  WMI v1 コマンドレットはサポートされない  Microsoft.PowerShell.LocalAccounts 及び *-Counter はサポートされない  その他、Windows 固有のモジュールは、現時点で大多数が移植されていない  ComputerName スイッチが *-Computer 及び *-Service コマンドレットから削除  etc...  https://docs.microsoft.com/en-us/powershell/scripting/whats- new/breaking-changes-ps6?view=powershell-6
  19. 19. PowerShell Core のインストール  最新の情報は GitHub  https://github.com/PowerShell/PowerShell  一部は Microsoft Docs へのリンク  https://docs.microsoft.com/en-us/powershell/scripting/powershell- scripting?view=powershell-6  https://docs.microsoft.com/en-us/powershell/scripting/setup/installing- powershell-core-on-windows?view=powershell-6  https://docs.microsoft.com/en-us/powershell/scripting/setup/installing- powershell-core-on-linux?view=powershell-6
  20. 20. GitHub / PowerShell コンパイル済みの Package を 直接ダウンロードしたい場合は こちら インストール手順の参照はこちら (Package Repository を使用した インストール方法もこちら)
  21. 21. Docs / PowerShell  英語版を推奨 PowerShell 6 を選択 Overview → Install → PowerShell Core インストール対象の Platform を選択 PowerShell Core と Windows PowerShell の ドキュメントが入り混じっているので注意!
  22. 22. PowerShell Core を試す  OS にインストールする  Windows, Linux, macOS / 物理 or VM  周辺環境を含めてテスト可能  PowerShell Remoting など  Docker コンテナーを実行  Windows, Linux  PowerShell Core と、その上で実行するモジュールのテストが可能  管理対象(操作対象)は、コンテナーの外側で別途用意
  23. 23. Docker コンテナーの使用  一般的なコンテナーの実行と同様  https://github.com/PowerShell/PowerShell/tree/master/docker  docker search  docker pull  docker run  Microsoft の Repository  https://hub.docker.com/r/microsoft/powershell/  利用したいベース OS 環境が無い場合等は、自分で Build  docker build  Docker for Winodows の現時点での最新版(stable channel : 18.03.1-ce-win65)だと Linux Container の Build に失敗するので注意(edge channel の最新では修正されているはず)
  24. 24. Demo PowerShell Core on Docker
  25. 25. Windows へのインストール  Prerequisites  Windows 7 SP1 又は Windows Server 2008 R2 以降(かつサポート期間内)の OS  Windows 10 Universal C Runtime  Windows 8.1 又は Windows Server 2012 R2 以前の場合は、KB3118401 等をインストール  WMF 4.0 以降  WMF 5.1 を推奨  インストール  PowerShell-<version>-win-<os-arch>.msi をダウンロードして実行
  26. 26. Windows へのインストール  Windows Server 2016 の場合、 Microsoft Visual C++ 2015 Redistributable Update 3 のイ ンストールは不要になりました
  27. 27. Server Core へのインストール  PowerShell (Windows PowerShell) を起動して  [Net.ServicePointManager]::SecurityProtocol += [System.Net.SecurityProtocolType]::Tls12  Invoke-WebRequest -Uri "https://github.com/PowerShell/PowerShell/releases/download/v6.0.2/PowerSh ell-6.0.2-win-x64.msi" -UseBasicParsing -OutFile PowerShell-6.0.2-win-x64.msi  msiexec.exe /i PowerShell-6.0.2-win-x64.msi /qn
  28. 28. Ubuntu へのインストール  curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -  curl https://packages.microsoft.com/config/ubuntu/$(grep DISTRIB_RELEASE /etc/lsb-release | cut -d= -f2)/prod.list | sudo tee /etc/apt/sources.list.d/microsoft.list  sudo apt update  sudo apt install powershell
  29. 29. CentOS / RHEL へのインストール  curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo  sudo yum install powershell
  30. 30. PowerShell Core と Remoting  PowerShell Remoting Protocol (PSRP) のトランスポート プロトコルとして、 以下を利用可能  WinRM (Windows Remote Management) / WS-Management  Windows Remote Management (WS-Management) Service  PSRP-Server with OMI  SSH (Secure Shell)  OpenSSHd
  31. 31. PowerShell Remoting Stack WS-Management WinRM SSH PowerShell Remoting Protocol PowerShell Remoting Protocol SSH PowerShell PowerShell cmd.exe / bash Objects Objects Text Windows PowerShell PowerShell Core
  32. 32. Demo PowerShell Remoting
  33. 33. PSRP over WinRM / WSMan  Windows の場合  PowerShell Core に接続するよう設定を登録する必要がある  接続先で PowerShell Core を起動して以下を実行  $PSPath = "C:¥Program Files¥PowerShell¥6.0.2"  Set-LocalGroup $PSPath  .¥Install-PowerShellRemoting.ps1 -PowerShellHome $PSPath  接続する場合は、Session Configuration を指定する  Linux の場合  omi-psrp-server をインストールして構成すればできるかも(開発中)
  34. 34. PSRP over WinRM / WSMan  注意点  Windows to Windows  Windows PowerShell と同様  ワークグループ環境で NTML を使う場合は、TrustedHosts を適切に設定する、等  Linux to Windows  Basic Auth over HTTP はサポートされない  https://github.com/PowerShell/PowerShell/pull/6787  受け側で HTTPS Transport を設定して、over HTTPS で接続  PowerShell Core に New-PSSessionOption が無い!!
  35. 35. PSRP over SSH  Windows の場合  Win32-OpenSSH をインストール(もしくは Windows の機能として有効化)  https://github.com/PowerShell/Win32-OpenSSH/releases  リリースファイルを展開して install-sshd.ps1 を実行  Windows Firewall で 22/tcp の Inbound を許可  サービスを自動的に開始するよう設定、サービスを開始  sshd_config で PowerShell を Subsystem として登録  Subsystem powershell c:¥pwsh¥pwsh.exe -sshs -NoLogo –NoProfile ※ PowerShell Core のパスにスペースが含まれていると sshd がうまく処理できない(バグ)  sshd を再起動
  36. 36. PSRP over SSH  Linux の場合  sshd_config で PowerShell を Subsystem として登録  Subsystem powershell /usr/bin/pwsh -sshs -NoLogo -NoProfile  sshd を再起動  全般として  sshd としての設定は、通常通り  パスワード認証の許可 / 拒否  鍵認証の許可 / 拒否
  37. 37. Azure Cloud Shell  これ  Bash と PowerShell が選択可能  Bash (on Linux Container)  PowerShell (on Windows Container ??)
  38. 38. 2017/10 のスクリーンショット
  39. 39. ???  本日の(私の)サブスクリプション
  40. 40. Azure Cloud Shell – PowerShell  作成を進めると…
  41. 41. 結局  Windows でした…
  42. 42. 何はともあれ  Azure Cloud Shell の PowerShell は Linux 上の PowerShell Core へ移行予定  Changes coming to PowerShell (preview) in Azure Cloud Shell  https://azure.microsoft.com/ja-jp/blog/pscloudshellrefresh/  Linux コンテナーの方が起動が速い等の理由による
  43. 43. Azure Cloud Shell を使うには  Portal 右上のシェルボタンをクリック  Bash か PowerShell かを選択  ストレージアカウントを作成するサブスクリプションを選択  Cloud Shell 環境で使用するストレージ  待つ
  44. 44. Demo Azure Cloud Shell
  45. 45. Tips: ファイルの永続化  Azure Cloud Shell の Compute リソースは適宜リサイクルされる  永続化ストレージ領域(CloudDrive)が自動的にマウントされる  永続化が必要なファイルは CloudDrive へ配置  Cloud Shell 上でユーザーがインストールしたモジュールは、自動的に CloudDrive へ保存される  PowerShell 版の場合、$HOME は永続化されないので注意
  46. 46. Tips: Cloud Drive  実体は、Cloud Shell 利用開始時に作成したストレージアカウント  ストレージアカウント内に作成されたファイル共有  $HOME/CloudDrive へ自動マウント  Y:¥ でもアクセス可能  Cloud Shell の稼働リージョンと同一リージョンのファイル共有を利用可能  利用している Cloud Shell のインスタンス稼働リージョンと同一である必要がある  $env:ACC_LOCATION  CloudDrive を介して、Azure Cloud Shell 内とファイルのやり取りが可能
  47. 47. Tips: Azure Drive  “Azure:” PSDrive  Azure リソースを取り扱う PSDrive  他の PSDrive と同様、Azure リソースへのシームレスなアクセスを提供  コンテキスト依存で応答が変化  Resource Group の自動判定  利用可能な Resource Manager Command の自動判定
  48. 48. まとめ  とりあえず PowerShell Core を使ってみてもよいのでは?
  49. 49. 参考資料  PowerShell Team Blog  https://blogs.msdn.microsoft.com/powershell/  GitHub  https://github.com/PowerShell

×