More Related Content
Similar to 使ってみよう PowerShell (20)
More from Kazuki Takai (20)
使ってみよう 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 を使わないといけない、という訳ではない
- 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 のバージョン及び認証などに注意
- 18. PowerShell は遅い?
遅い…かもしれないし、速いかもしれない
「遅い」とは?
基本的に、コードの実行については、他の言語
(スクリプトベースの言語)と大きな差異はない
遅い(コストの高い)処理を多用するようなコードは遅い
PowerShell 実行エンジンの初期化には、少し時間がかかる
.NET Framework の実行環境を整えるのに時間がかかる
Windows 10 Ver.1803 だとかなり改善されている
- 20. [Appx.1] PowerShell を使う
PowerShell Console
PowerShell ISE
Visual Studio Code
PowerShell Gallery
yum のリポジトリみたいなもの
運営は Microsoft が行っているが、誰でも登録可能
PowerShell DSC
あるべき設定に実際の設定をあわせる機構
Ansible みたいなもの