320 likes | 545 Views
PowerShell ハンズオン. 2012/03/24 第 27 回 .NET 勉強会 / ヒーロー 島 牟田口大介. PowerShell ハンズオンの準備、諸注意. 講師自己紹介. 牟田口大介 ライターやってます 2008 Windows PowerShell ポケットリファレンス(技術評論社) 2009 PowerShell による Windows サーバ管理術(ソフトバンククリエイティブ、共著)
E N D
PowerShellハンズオン 2012/03/24 第27回 .NET 勉強会 / ヒーロー島 牟田口大介
講師自己紹介 • 牟田口大介 • ライターやってます • 2008 Windows PowerShell ポケットリファレンス(技術評論社) • 2009 PowerShellによるWindowsサーバ管理術(ソフトバンククリエイティブ、共著) • 2010~PowerShell的システム管理入門(@IT) http://www.atmarkit.co.jp/fwin2k/operation/pshsys01/pshsys01_01.html • Microsoft MVP for PowerShell • 昨年7回目の受賞をさせていただきました • http://winscript.jp/ • http://twitter.com/mutaguchi • http://www.facebook.com/daisuke.mutaguchi
アジェンダ • PowerShellハンズオンの準備、諸注意 • 第一部:コンソールを使ってみよう • 休憩 • 第二部:スクリプトを書いてみよう • 第三部:PowerShellリモート体験 • ↑時間があれば… • 本日のまとめと後処理
本日の目標 • PowerShellコンソールの使い方を理解する • 簡単なPowerShellスクリプトを作成して実行する方法を理解する • PowerShellリモートの概念を理解し、バックグラウンド処理とリモート処理の仕方を理解する(時間があれば)
ハンズオンの諸注意 • PowerShellはシステム管理シェルで、その名の通り強力です。よって、オペレーションミスでファイルや設定などを壊してしまう可能性があります。 • PowerShellはUACをオンにした上で昇格せずに起動してください。(指示があるときを除く) • Get-*以外のコマンドレットを実行する際は以下の共通パラメータを使い確認を • -whatIf (実行した場合何が起こるか表示) • -confirm (実行する前に実行確認表示) • 分からないことがあればいつでも聞いてください!!
準備 • PowerShellのインストールは済んでいますか?(XP,Vistaの方!) • 「スタート」-「すべてのプログラム」-「アクセサリ」-「Windows PowerShell」 • まだの方はインストールをお願いします。 • 検索:「Windows PowerShell 2.0」 • PowerShell ISEが起動しない方は休憩後のスクリプト演習までに.NET Framework 3.5 Service Pack 1 のインストールをお願いします。 • 検索:「 .NET Framework 3.5 sp1」
第一部 コンソールを使ってみよう
コンソールを使ってみよう • 起動 • スタートメニュー • Win7ならタスクバーにピン留め • ファイル名を指定して実行→powershell.exe • まずはコマンドプロンプト感覚でフォルダの中身を見てみましょう • cd:カレントディレクトリ移動 • dir:カレントディレクトリのファイル一覧表示 • タブ補完でフォルダ名補完
コマンドレットの基本 • cd,dirなどはコマンドレットです。 • これらはエイリアス(別名)です。正式名称は「動詞-名詞」です。 • cd: Set-Location • dir: Get-ChildItem • パラメータの指定 • cd FolderNameSet-Location -path ".\FolderName" • パラメータ名、パラメータ値は省略可能なものがある • コマンドレット名、パラメータ名もタブ補完できます。
コマンドレットを調べる • コマンドレット情報取得 • Get-Command • Get-Command -noun Location • Get-Command *wmi* -type cmdlet • ヘルプを引く • Get-Help Set-Location • Set-Location -? • Get-Help Set-Location -detailed • Get-Help -category helpfile • help Set-Location • HTMLヘルプもあります。
ファイルシステムの操作 • -whatIfと -confirmパラメータで実行確認を! • フォルダ作成(作業用フォルダ) • New-Item -type Directory PSハンズオン • カレントフォルダをエクスプローラで開く • Invoke-Item . • テキストファイル作成 • Set-Content test.txt -Value てすと! • テキストファイルの表示 • Get-Content test.txt • ファイルコピー • Copy-Item test.txt test2.txt • ファイルリネーム • Rename-Item test2.txt backup.txt • ファイル削除 • Remove-Item *.txt
レジストリドライブ • レジストリドライブを表示する • Get-PSDrivecd HKCU:dirGet-ItemProperty.\Console • ファイルシステム以外のリソースに対しても共通のコマンドレットが使える
選択と列挙 • コマンドレットが返すオブジェクト配列をパイプラインを通して後続コマンドレットに。 • プロパティとメソッド列挙:Get-Member • dir|Get-Member • フィルタ:Where-Object • dir|Where {$_.Extension -eq ".txt"} • 選択:Select-Object • dir|SelectName, CreationTime,Extension • 列挙:ForEach-Object • dir|ForEach {Write-Host $_.FullName}
結果の整形、出力形式、出力先変更 • 出力フォーマット変更 • 表:Format-Table • リスト:Format-List • 一覧:Format-Wide • 出力テキスト形式変更 • CSV:ConvertTo-CSV • HTML:ConvertTo-HTML • XML:ConvertTo-XML • 出力先変更 • ウィンドウ:Out-GridView • ファイル • プレーンテキスト:Out-File • CSV:Export-CSV • XML:Export-CliXml • 文字列化:Out-String
各種システム情報を取得 • プロセス取得:Get-Process • サービス取得:Get-Service • イベントログ取得:Get-EventLog • イベントログの種類:Get-EventLog -list • Windowsイベントログ:Get-WinEvent • 必要な情報をフィルタ、選択したり、出力形式を変更したりしてみよう!
システム情報取得・設定(WMI) • WMIを利用するコマンドレット • Get-WmiObject-list • Get-WmiObject Win32_OperatingSystem • Invoke-WmiMethod • Get-HotFix • Restart-Computer
第一部のまとめ • コンソールにコマンドレットを入力するとシステム情報の取得や設定ができる。 • 色々なリソースをPSドライブとして扱え、共通のコマンドレットが使用できる。 • コマンドレットが返すオブジェクト配列はフィルタや列挙ができる。 • コマンドレットの出力先や形式を変更できる。
第二部 スクリプトを書いてみよう
ISEでスクリプトを書いてみよう • スタートメニューorタスクバーから起動 • 基本はコンソールに入力していたコマンドを改行区切りで記述していくだけ! • スクリプトペインにスクリプトを書き、コマンドペインでそれを呼び出し、結果ペインに結果が表示される。
スクリプトを実行してみよう • ExecutionPolicy設定 • Set-ExecutionPolicyRemoteSigned • 実行 • ISEで • powershell.exeで • ショートカット作成 • タスクスケジューラ • プロファイル
PowerShell構文 • 変数 • $変数名 • 文字列 • "文字列"か'文字列' • コメント • #コメント行 • 演算子 • 算術:+ - 比較:-eq -lt -le -gt -ge論理:-or -and • 配列 • $a=@(1,2,3 ) • $a[0] • if(条件){} • foreach($item in $items){} • 関数 • function Get-Text{param($text)Write-Host $text}
.NETの呼び出し • インスタンス作成 • $client=New-Object System.Net.WebClient • スタティックメンバ呼び出し • スタティックメンバの調査 • [System.Environment]|Get-Member -static • [System.Environment]::OSVersion • [Math]::Sqrt(4)
第三部 PowerShellリモート体験
リモート準備 • PSリモートを有効に(要管理者権限) • Enable-PSRemoting • PSリモート接続先を指定(要管理者権限) • Set-Item WSMan:\localhost\Client\TrustedHosts -value *
バックグラウンドジョブ実行 • ジョブの開始 • Start-Job {スクリプト} • ジョブの結果を受け取る • Get-Job|Wait-Job|Receive-Job
リモートコンピュータでコマンド実行 • リモート実行(ここではローカルPCに対してテスト。要管理者権限) • Invoke-Command {スクリプト}-ComputerNameコンピュータ名 • ローカルPCならコンピュータ名は「.」
リモートセッション • 固定接続セッションをリモートコンピュータに対して作成(ここではローカルに対して。要管理者権限) • $session=New-PSSession.Invoke-Command {スクリプト} -Session $session • 対話型セッションの開始 • Enter-PSSession $session
設定を元に戻す • ExecutionPolicy • Set-ExecutionPolicy restricted • PSリモート • Disable-PSRemoting • PSリモートの接続先 • Set-Item WSMan:\localhost\Client\TrustedHosts -value ""
本日のまとめ • PowerShellを用いるとWindowsシステム管理が行えます。 • コンソールで対話的に実行することも、スクリプト化して繰り返し処理、自動処理、定期実行処理なども可能です。 • リモート機能を使うとサーバーやPCの管理を遠隔で行えます。複数コンピュータで同じ処理を同時に行うことも。
Have a happy PowerShell Life! お疲れ様でした!