SlideShare a Scribd company logo
1 of 21
Download to read offline
使ってみよう PowerShell
PowerShell とは
 シェル
 conhost 上でホストされる powershell.exe
 Desktop / Server Core で利用可能
 スクリプト言語
 固有の言語体系・構文
 固有のコマンド(コマンドレット)
 スクリプト実行環境
 powershell.exe を実行エンジンとしてスクリプトファイルを実行
実は…
 PowerShell には大きく2種類ある
 Windows PowerShell
 PowerShell 1.0 ~ 5.1
 Windows 専用 / Windows Server 2008 以降はビルトイン
 .NET Framework 依存 / WMF の一部
 PowerShell Core
 PowerShell 6.0 ~
 Windows / macOS / Linux
 .NET Core 依存
 互換性は、あったりなかったり
 言語としては互換
 ランタイムは(完全には)互換ではない
PowerShell の特徴
 オブジェクトベース
 処理(パイプライン)を流れるのはオブジェクト
 型がある・型を意識する
 但し、デフォルトの設定だとかなり緩い
 暗黙的にある程度型変換(キャスト)される
 システム管理系のコマンドレットが充実している
 Windows Server の管理作業はほぼ全て実行可能
 概ね、Windows Server 2012 R2 以降
 GUI の管理ツールは、裏で PowerShell のコマンドレットを実行
何ができるか?
 基本、何でもできる
 Linux のシェルでやっているような事
 プロセス一覧で、特定ユーザのプロセスをフィルタして、メモリ使用量の高い順から10件分を表示
 テキストを処理・整形して、特定の URL へ POST
 ファイルのハッシュ値の計算
 GUI を表示
 ASDK Installer
 .NET Framework のユーザインタフェースクラスのインスタンスを生成
 イベントを監視して、イベントトリガーで処理を実行
 特定のフォルダにファイルが置かれたら、zip圧縮
 リモート処理
 .NET Framework / Core のクラスを直接操作
 WMI へのアクセス
何に使うか?(得意な事)
 Windows の管理
 管理ツールのすべての操作は、基本的に実行可能
 Azure の管理
 Azure Cloud Shell
 Office 365 / Microsoft 365 の管理
 Non-Microsoft Products の管理
 VMware vSphere (vCenter / ESXi) 等
Azure 等は PowerShell に依存しない管理コマンドも存在
 Azure CLI (az コマンド) (for Windows / macOS / Linux)
 Docker image
必ずしも PowerShell を使わないといけない、という訳ではない
PowerShell で実行可能なコマンド
 コマンドレット(Cmdlets)
 Pure powershell command
 エイリアス
 PowerShell の環境で定義されたエイリアス
 システム(デフォルト)定義とユーザ定義
 関数(Function)
 外部コマンド
オブジェクト
 コマンド(外部コマンド以外)の返り値はオブジェクト
 Get-Service
 $s = Get-Service
 $s.GetType()
 Object[]
 $s[0]
 $s[0].GetType()
 ServiceController
 Get-Service -Name wuauserv
 Get-Service -Name wuauserv | Stop-Service
 Get-Service -Name wuauserv
 (Get-Service -Name wuauserv).Start()
? と %
 ? : Where-Object の Alias
 オブジェクト(の配列)にフィルターをかける
 条件式が $true となるオブジェクト(の配列)を返す
 Get-Service | ? { $_.Status -eq "Running" }
 Get-Service | ? Status -eq "Running"
 % : ForEach-Object の Alias
 オブジェクトの配列を受け取り各要素に対して処理を実行する
 1..6 | % { Test-Connection -ComputerName 10.0.0.$_ -Count 1 -ErrorAction SilentlyContinue }
 $Error[0]
Sort
 sort : Sort-Object のエイリアス
 オブジェクトの配列を受け取り、指定したプロパティでソート
 複数プロパティを指定可能
 昇順・降順指定可能
 Get-Process
 Get-Process | Sort-Object -Property Id
 Get-Process | Sort-Object -Property WorkingSet –Descending
 Get-Process | Sort-Object -Property WorkingSet,CPU -Descending
 Get-Command sort -All
Select と uniq
 select : Select-Object の Alias
 オブジェクトの配列を受け取り
1. 特定のプロパティのみのサブセットに変換して返す
2. 先頭から or 末尾から指定した個数を返す
 Get-Process | Select-Object -Property ProcessName
 Get-Process | Sort-Object -Property WorkingSet -Descending | Select-Object -First 10
 Get-Unique
 オブジェクトの配列を受け取り、重複を排除して返す
 Get-Process | Sort-Object ProcessName | Select-Object ProcessName | Get-Unique –AsString
 Get-Process | Sort-Object ProcessName | Select-Object ProcessName -Unique
その他
 cat
 Get-Content
 grep
 Select-String -Path
 Select-String -Path C:¥Apps¥config.ini -Pattern "^[^#]“
 Get-Content -Path C:¥Apps¥config.ini | Select-String -Pattern "^[^#]“
 wc
 (Object[]).Length
 (Get-Process).Length
 (Get-Process).Count
-match と -replace
 演算子 -match
 文字列 -match 正規表現
 "abcde" -match "bc“
 "abcde" -match "Bc“
 "abcde" -cmatch "Bc"
 演算子 -replace
 文字列 -replace 正規表現 置換表現
 "abcde" -replace "abc","ABC“
 "abcde" -replace "aBc","ABC“
 "abcde" -creplace "aBc","ABC“
 "abcde" -replace "^.*(bc).*$",'$1‘
表示する
 ft : Format-Table の Alias
 表形式に整形して、テキストとして出力
 Get-ChildItem C:¥ | ft Name,Mode,LastWriteTime,Length
 fl : Format-List の Alias
 リスト形式に整形して、テキストとして出力
 Get-ChildItem C:¥ | fl Name,Mode,LastWriteTime,Length
組み合わせると…
 Get-Process -IncludeUserName | ? UserName -eq “user1" | Sort-Object -
Property WorkingSet -Descending | Select-Object -First 10 | ft
Id,ProcessName,@{Label="Mem(GB)";Expression={[int]($_.WorkingSet/1024
/1024)}}
 プロセス一覧を取得
 ユーザ名でフィルタ
 メモリ使用量で降順ソート
 上位10件を取得
 整形して表示
リモーティング
 いくつかの操作方法
 -ComputerName パラメータ
 Invoke-Command
 New-PSSession / Enter-PSSession
 Get-VM
 $cred = Get-Credential
 $pass = ConvertTo-SecureString "Password" -AsPlainText -Force
 $cred = New-Object System.Management.Automation.PsCredential "Administrator",$pass
 $s = New-PSSession -VMName win2016 -Credential $cred
 Get-PSSession
 Enter-PSSession $s
 hostname
 Get-PSSession | Remove-PSSession
どの層でリモート処理されているのか注意
PowerShell のリモーティングを使用する場合、Remoting のバージョン及び認証などに注意
PowerShell の使い方
 PowerShell らしい使い方
 なるべくオブジェクトのまま取り扱う
 出力する際に変換する
 テキストへの変換
 テキストの整形
PowerShell は遅い?
 遅い…かもしれないし、速いかもしれない
 「遅い」とは?
 基本的に、コードの実行については、他の言語
(スクリプトベースの言語)と大きな差異はない
 遅い(コストの高い)処理を多用するようなコードは遅い
 PowerShell 実行エンジンの初期化には、少し時間がかかる
 .NET Framework の実行環境を整えるのに時間がかかる
 Windows 10 Ver.1803 だとかなり改善されている
困ったときには
 Get-Help
 Get-Command
 -Syntax
 Get-Member
 Object.GetType()
[Appx.1] PowerShell を使う
 PowerShell Console
 PowerShell ISE
 Visual Studio Code
 PowerShell Gallery
 yum のリポジトリみたいなもの
 運営は Microsoft が行っているが、誰でも登録可能
 PowerShell DSC
 あるべき設定に実際の設定をあわせる機構
 Ansible みたいなもの
[Appx.2] コマンドが無い…時には
 .NET Framework のオブジェクトを直接操作
 例 ハッシュ取得
 WMI / CIM のオブジェクトを取得して操作
 例 OS設定変更

More Related Content

What's hot

게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
Amazon Web Services Korea
 
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
IMQA
 

What's hot (20)

AWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべことAWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべこと
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
SPAのルーティングの話
SPAのルーティングの話SPAのルーティングの話
SPAのルーティングの話
 
MongoDB: システム可用性を拡張するインデクス戦略
MongoDB: システム可用性を拡張するインデクス戦略MongoDB: システム可用性を拡張するインデクス戦略
MongoDB: システム可用性を拡張するインデクス戦略
 
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
 
Goss入門
Goss入門Goss入門
Goss入門
 
[Citrix on Nutanix] LoginVSI による MCSとPVS の比較検証
[Citrix on Nutanix] LoginVSI による MCSとPVS の比較検証[Citrix on Nutanix] LoginVSI による MCSとPVS の比較検証
[Citrix on Nutanix] LoginVSI による MCSとPVS の比較検証
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
 
CleanArchitecture 第4部 「コンポーネントの原則」
CleanArchitecture 第4部 「コンポーネントの原則」CleanArchitecture 第4部 「コンポーネントの原則」
CleanArchitecture 第4部 「コンポーネントの原則」
 
AWS Black Belt Techシリーズ Elastic Load Balancing (ELB)
AWS Black Belt Techシリーズ  Elastic Load Balancing (ELB)AWS Black Belt Techシリーズ  Elastic Load Balancing (ELB)
AWS Black Belt Techシリーズ Elastic Load Balancing (ELB)
 
HSM超入門講座
HSM超入門講座HSM超入門講座
HSM超入門講座
 
Elasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライドElasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライド
 
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)모니터링 영역의 변천사_클라우드, 디지털 경험까지)
모니터링 영역의 변천사_클라우드, 디지털 경험까지)
 
オンプレを少しずつコンテナ化する
オンプレを少しずつコンテナ化するオンプレを少しずつコンテナ化する
オンプレを少しずつコンテナ化する
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
Java version 11 - les 9 nouveautes
Java version 11 -  les 9 nouveautesJava version 11 -  les 9 nouveautes
Java version 11 - les 9 nouveautes
 
AWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザAWS で Presto を徹底的に使いこなすワザ
AWS で Presto を徹底的に使いこなすワザ
 
Gohan
GohanGohan
Gohan
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
Amazon DynamoDB Under the Hood: How We Built a Hyper-Scale Database (DAT321) ...
Amazon DynamoDB Under the Hood: How We Built a Hyper-Scale Database (DAT321) ...Amazon DynamoDB Under the Hood: How We Built a Hyper-Scale Database (DAT321) ...
Amazon DynamoDB Under the Hood: How We Built a Hyper-Scale Database (DAT321) ...
 

Similar to 使ってみよう PowerShell

Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v3 (もっと新しいバージョンがあります)Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v3 (もっと新しいバージョンがあります)
Tetsu Yama
 
Powershell勉強会 v2 (もっと新しいバージョンがあります)
Powershell勉強会 v2 (もっと新しいバージョンがあります)Powershell勉強会 v2 (もっと新しいバージョンがあります)
Powershell勉強会 v2 (もっと新しいバージョンがあります)
Tetsu Yama
 
実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive Extensions
Shin Ise
 
PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようPHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めよう
Yuya Takeyama
 

Similar to 使ってみよう PowerShell (20)

Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
Clrh 20121215
Clrh 20121215Clrh 20121215
Clrh 20121215
 
AWS Tools for Windows PowerShell
AWS Tools for Windows PowerShellAWS Tools for Windows PowerShell
AWS Tools for Windows PowerShell
 
Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v3 (もっと新しいバージョンがあります)Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v3 (もっと新しいバージョンがあります)
 
Powershell勉強会 v2 (もっと新しいバージョンがあります)
Powershell勉強会 v2 (もっと新しいバージョンがあります)Powershell勉強会 v2 (もっと新しいバージョンがあります)
Powershell勉強会 v2 (もっと新しいバージョンがあります)
 
CLRH_120414_WFTDD
CLRH_120414_WFTDDCLRH_120414_WFTDD
CLRH_120414_WFTDD
 
構築手順 Ssis イベントログ取込み 第2版
構築手順 Ssis イベントログ取込み 第2版構築手順 Ssis イベントログ取込み 第2版
構築手順 Ssis イベントログ取込み 第2版
 
Version管理 1
Version管理 1Version管理 1
Version管理 1
 
Play framework 2.0のちょっとした紹介
Play framework 2.0のちょっとした紹介Play framework 2.0のちょっとした紹介
Play framework 2.0のちょっとした紹介
 
Spring AMQP × RabbitMQ
Spring AMQP × RabbitMQSpring AMQP × RabbitMQ
Spring AMQP × RabbitMQ
 
運用構築技術者の為のPSプログラミング第2回
運用構築技術者の為のPSプログラミング第2回運用構築技術者の為のPSプログラミング第2回
運用構築技術者の為のPSプログラミング第2回
 
実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive Extensions
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
分散ストリーム処理フレームワーク Apache S4
分散ストリーム処理フレームワーク Apache S4分散ストリーム処理フレームワーク Apache S4
分散ストリーム処理フレームワーク Apache S4
 
20080524
2008052420080524
20080524
 
PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようPHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めよう
 
AWS SDK for Haskell開発
AWS SDK for Haskell開発AWS SDK for Haskell開発
AWS SDK for Haskell開発
 
PowerShell 紹介
PowerShell 紹介PowerShell 紹介
PowerShell 紹介
 
Powershell勉強会 v4 (もっと新しいバージョンがあります。)
Powershell勉強会 v4 (もっと新しいバージョンがあります。)Powershell勉強会 v4 (もっと新しいバージョンがあります。)
Powershell勉強会 v4 (もっと新しいバージョンがあります。)
 
Selenium 触ってみよう
Selenium 触ってみようSelenium 触ってみよう
Selenium 触ってみよう
 

More from Kazuki Takai

More from Kazuki Takai (20)

Azure Arc Automanage Machine Configuration による構成の管理と適用
Azure Arc Automanage Machine Configuration による構成の管理と適用Azure Arc Automanage Machine Configuration による構成の管理と適用
Azure Arc Automanage Machine Configuration による構成の管理と適用
 
Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築
Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築
Azure Arc Jumpstart - Azure ArcBox を使った Azure Arc 対応 SQL MI 学習環境の構築
 
Azure Arc Jumpstart Update - HCIBox Edition
Azure Arc Jumpstart Update - HCIBox EditionAzure Arc Jumpstart Update - HCIBox Edition
Azure Arc Jumpstart Update - HCIBox Edition
 
ArcBox のおさらいと最新情報
ArcBox のおさらいと最新情報ArcBox のおさらいと最新情報
ArcBox のおさらいと最新情報
 
Arc 対応サーバーへの SSH アクセス
Arc 対応サーバーへの SSH アクセスArc 対応サーバーへの SSH アクセス
Arc 対応サーバーへの SSH アクセス
 
Insight into Azure Active Directory #02 - Azure AD B2B Collaboration New Feat...
Insight into Azure Active Directory #02 - Azure AD B2B Collaboration New Feat...Insight into Azure Active Directory #02 - Azure AD B2B Collaboration New Feat...
Insight into Azure Active Directory #02 - Azure AD B2B Collaboration New Feat...
 
Insight into Azure Active Directory - Azure AD Custom Role & Scope
Insight into Azure Active Directory - Azure AD Custom Role & ScopeInsight into Azure Active Directory - Azure AD Custom Role & Scope
Insight into Azure Active Directory - Azure AD Custom Role & Scope
 
Windows Server 2022 Datacenter Azure Edition Overview
Windows Server 2022 Datacenter Azure Edition OverviewWindows Server 2022 Datacenter Azure Edition Overview
Windows Server 2022 Datacenter Azure Edition Overview
 
Azure Arc 概要
Azure Arc 概要Azure Arc 概要
Azure Arc 概要
 
Past and Future of PowerShell
Past and Future of PowerShellPast and Future of PowerShell
Past and Future of PowerShell
 
Introducing Windows Terminal
Introducing Windows TerminalIntroducing Windows Terminal
Introducing Windows Terminal
 
Recap: Windows Server 2019 Failover Clustering
Recap: Windows Server 2019 Failover ClusteringRecap: Windows Server 2019 Failover Clustering
Recap: Windows Server 2019 Failover Clustering
 
5分で分かる Windows Server 2019 HCI 超概要
5分で分かる Windows Server 2019 HCI 超概要5分で分かる Windows Server 2019 HCI 超概要
5分で分かる Windows Server 2019 HCI 超概要
 
Application Platform としての Windows Server 2019
Application Platform としての Windows Server 2019Application Platform としての Windows Server 2019
Application Platform としての Windows Server 2019
 
Windows Server 2019 で Container を使ってみる
Windows Server 2019 で Container を使ってみるWindows Server 2019 で Container を使ってみる
Windows Server 2019 で Container を使ってみる
 
Getting started with Windows Containers
Getting started with Windows ContainersGetting started with Windows Containers
Getting started with Windows Containers
 
Recap: PowerShell Core
Recap: PowerShell CoreRecap: PowerShell Core
Recap: PowerShell Core
 
Windows とコンテナの話
Windows とコンテナの話Windows とコンテナの話
Windows とコンテナの話
 
DSC 再入門
DSC 再入門DSC 再入門
DSC 再入門
 
Azure Stack の使い道 - 2017年11月版 -
Azure Stack の使い道 - 2017年11月版 -Azure Stack の使い道 - 2017年11月版 -
Azure Stack の使い道 - 2017年11月版 -
 

Recently uploaded

Recently uploaded (7)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

使ってみよう PowerShell

  • 2. PowerShell とは  シェル  conhost 上でホストされる powershell.exe  Desktop / Server Core で利用可能  スクリプト言語  固有の言語体系・構文  固有のコマンド(コマンドレット)  スクリプト実行環境  powershell.exe を実行エンジンとしてスクリプトファイルを実行
  • 3. 実は…  PowerShell には大きく2種類ある  Windows PowerShell  PowerShell 1.0 ~ 5.1  Windows 専用 / Windows Server 2008 以降はビルトイン  .NET Framework 依存 / WMF の一部  PowerShell Core  PowerShell 6.0 ~  Windows / macOS / Linux  .NET Core 依存  互換性は、あったりなかったり  言語としては互換  ランタイムは(完全には)互換ではない
  • 4. PowerShell の特徴  オブジェクトベース  処理(パイプライン)を流れるのはオブジェクト  型がある・型を意識する  但し、デフォルトの設定だとかなり緩い  暗黙的にある程度型変換(キャスト)される  システム管理系のコマンドレットが充実している  Windows Server の管理作業はほぼ全て実行可能  概ね、Windows Server 2012 R2 以降  GUI の管理ツールは、裏で PowerShell のコマンドレットを実行
  • 5. 何ができるか?  基本、何でもできる  Linux のシェルでやっているような事  プロセス一覧で、特定ユーザのプロセスをフィルタして、メモリ使用量の高い順から10件分を表示  テキストを処理・整形して、特定の URL へ POST  ファイルのハッシュ値の計算  GUI を表示  ASDK Installer  .NET Framework のユーザインタフェースクラスのインスタンスを生成  イベントを監視して、イベントトリガーで処理を実行  特定のフォルダにファイルが置かれたら、zip圧縮  リモート処理  .NET Framework / Core のクラスを直接操作  WMI へのアクセス
  • 6. 何に使うか?(得意な事)  Windows の管理  管理ツールのすべての操作は、基本的に実行可能  Azure の管理  Azure Cloud Shell  Office 365 / Microsoft 365 の管理  Non-Microsoft Products の管理  VMware vSphere (vCenter / ESXi) 等 Azure 等は PowerShell に依存しない管理コマンドも存在  Azure CLI (az コマンド) (for Windows / macOS / Linux)  Docker image 必ずしも PowerShell を使わないといけない、という訳ではない
  • 7. PowerShell で実行可能なコマンド  コマンドレット(Cmdlets)  Pure powershell command  エイリアス  PowerShell の環境で定義されたエイリアス  システム(デフォルト)定義とユーザ定義  関数(Function)  外部コマンド
  • 8. オブジェクト  コマンド(外部コマンド以外)の返り値はオブジェクト  Get-Service  $s = Get-Service  $s.GetType()  Object[]  $s[0]  $s[0].GetType()  ServiceController  Get-Service -Name wuauserv  Get-Service -Name wuauserv | Stop-Service  Get-Service -Name wuauserv  (Get-Service -Name wuauserv).Start()
  • 9. ? と %  ? : Where-Object の Alias  オブジェクト(の配列)にフィルターをかける  条件式が $true となるオブジェクト(の配列)を返す  Get-Service | ? { $_.Status -eq "Running" }  Get-Service | ? Status -eq "Running"  % : ForEach-Object の Alias  オブジェクトの配列を受け取り各要素に対して処理を実行する  1..6 | % { Test-Connection -ComputerName 10.0.0.$_ -Count 1 -ErrorAction SilentlyContinue }  $Error[0]
  • 10. Sort  sort : Sort-Object のエイリアス  オブジェクトの配列を受け取り、指定したプロパティでソート  複数プロパティを指定可能  昇順・降順指定可能  Get-Process  Get-Process | Sort-Object -Property Id  Get-Process | Sort-Object -Property WorkingSet –Descending  Get-Process | Sort-Object -Property WorkingSet,CPU -Descending  Get-Command sort -All
  • 11. Select と uniq  select : Select-Object の Alias  オブジェクトの配列を受け取り 1. 特定のプロパティのみのサブセットに変換して返す 2. 先頭から or 末尾から指定した個数を返す  Get-Process | Select-Object -Property ProcessName  Get-Process | Sort-Object -Property WorkingSet -Descending | Select-Object -First 10  Get-Unique  オブジェクトの配列を受け取り、重複を排除して返す  Get-Process | Sort-Object ProcessName | Select-Object ProcessName | Get-Unique –AsString  Get-Process | Sort-Object ProcessName | Select-Object ProcessName -Unique
  • 12. その他  cat  Get-Content  grep  Select-String -Path  Select-String -Path C:¥Apps¥config.ini -Pattern "^[^#]“  Get-Content -Path C:¥Apps¥config.ini | Select-String -Pattern "^[^#]“  wc  (Object[]).Length  (Get-Process).Length  (Get-Process).Count
  • 13. -match と -replace  演算子 -match  文字列 -match 正規表現  "abcde" -match "bc“  "abcde" -match "Bc“  "abcde" -cmatch "Bc"  演算子 -replace  文字列 -replace 正規表現 置換表現  "abcde" -replace "abc","ABC“  "abcde" -replace "aBc","ABC“  "abcde" -creplace "aBc","ABC“  "abcde" -replace "^.*(bc).*$",'$1‘
  • 14. 表示する  ft : Format-Table の Alias  表形式に整形して、テキストとして出力  Get-ChildItem C:¥ | ft Name,Mode,LastWriteTime,Length  fl : Format-List の Alias  リスト形式に整形して、テキストとして出力  Get-ChildItem C:¥ | fl Name,Mode,LastWriteTime,Length
  • 15. 組み合わせると…  Get-Process -IncludeUserName | ? UserName -eq “user1" | Sort-Object - Property WorkingSet -Descending | Select-Object -First 10 | ft Id,ProcessName,@{Label="Mem(GB)";Expression={[int]($_.WorkingSet/1024 /1024)}}  プロセス一覧を取得  ユーザ名でフィルタ  メモリ使用量で降順ソート  上位10件を取得  整形して表示
  • 16. リモーティング  いくつかの操作方法  -ComputerName パラメータ  Invoke-Command  New-PSSession / Enter-PSSession  Get-VM  $cred = Get-Credential  $pass = ConvertTo-SecureString "Password" -AsPlainText -Force  $cred = New-Object System.Management.Automation.PsCredential "Administrator",$pass  $s = New-PSSession -VMName win2016 -Credential $cred  Get-PSSession  Enter-PSSession $s  hostname  Get-PSSession | Remove-PSSession どの層でリモート処理されているのか注意 PowerShell のリモーティングを使用する場合、Remoting のバージョン及び認証などに注意
  • 17. PowerShell の使い方  PowerShell らしい使い方  なるべくオブジェクトのまま取り扱う  出力する際に変換する  テキストへの変換  テキストの整形
  • 18. PowerShell は遅い?  遅い…かもしれないし、速いかもしれない  「遅い」とは?  基本的に、コードの実行については、他の言語 (スクリプトベースの言語)と大きな差異はない  遅い(コストの高い)処理を多用するようなコードは遅い  PowerShell 実行エンジンの初期化には、少し時間がかかる  .NET Framework の実行環境を整えるのに時間がかかる  Windows 10 Ver.1803 だとかなり改善されている
  • 19. 困ったときには  Get-Help  Get-Command  -Syntax  Get-Member  Object.GetType()
  • 20. [Appx.1] PowerShell を使う  PowerShell Console  PowerShell ISE  Visual Studio Code  PowerShell Gallery  yum のリポジトリみたいなもの  運営は Microsoft が行っているが、誰でも登録可能  PowerShell DSC  あるべき設定に実際の設定をあわせる機構  Ansible みたいなもの
  • 21. [Appx.2] コマンドが無い…時には  .NET Framework のオブジェクトを直接操作  例 ハッシュ取得  WMI / CIM のオブジェクトを取得して操作  例 OS設定変更