Cloud OS MVP Roadshow 2014 年 6 月 Cloud OS Tech Day!
IT Pro のための
PowerShell スクリプティング
高井 一輝
自己紹介
• 高井 一輝 (Takai Kazuki)
• 某 ISP 勤務
• クラウドとオンプレミスを組み合わせたインテグレーション • 見積り、提案書の作成から設計、構築、試験、運用まで • ネットワーク、サーバ (Windows、Linux)• System Center User Group Japan (SCUGJ)
• Twitter : @zhuky7 / Facebook : kazuki.takai
• Blog : http://operationslab.wordpress.com/
本日の内容
• お話すること
• PowerShell についてのおさらい – スクリプトを記述するうえで必要となる内容 – スクリプトを実行するために必要となる内容 • スクリプトでやりたいことを実現するためのパーツ • スクリプトを作成するうえで注意すべきこと• お話しないこと
• PowerShell コマンドレットの実行方法 • PowerShell Remoting の仕組み • PowerShell Workflow • 個々の製品の具体的な管理方法このセッションのゴール
• 簡単な PowerShell スクリプトを作成できる
• 目的に応じてスクリプトを作成できる
本日の環境
• Windows 7 Professional with WMF 4.0
• Windows Server 2012 R2
アジェンダ
• Windows PowerShell の基礎
• スクリプトを作成する
• スクリプトの動作を確認する
• スクリプトを展開する
PowerShell とは
• Windows で利用可能な新しいシェル / スクリプト言語
• Windows Server 2008 R2 以降で標準搭載
• コマンドプロンプトよりも高度な処理 / 制御が可能
• WSH よりもスクリプトの記述が容易
• Character-based User Interface
• テキストベースではなくオブジェクトベース
• パイプラインを流れるのはオブジェクト
• 豊富なコマンドレット
• PowerShell 本体で用意されているコマンドレット
オブジェクトベース
• コマンドレットの入力、出力はオブジェクト
• コンソールに出力する際は、オブジェクトを文字列に変換している• パイプラインを流れるのはオブジェクト
• オブジェクトベースなので…
• 一部のプロパティ(列)だけ取り出して加工できる – アカウントの一覧から “アカウント名” と “最終ログイン日時” だけ取り出す • プロパティの値を使ってフィルタリングできる – Windows の役割・機能の一覧から、インストールされているものだけ取り出す • オブジェクトの状態を操作できる現在の最新版
• PowerShell 4.0
• Windows Server 2012 R2 に標準搭載
• Windows Management Framework 4.0 をインストールすることで、
他の OS でも利用可能
– Windows 7 SP1, Windows Server 2008 R2 SP1, Windows Server 2012 – .NET Framework 4.5 が必要
• PowerShell 5.0 Preview May 2014
• with Windows Management Framework 5.0
– http://www.microsoft.com/en-us/download/details.aspx?id=42936
基本事項のおさらい
• PowerShell 実行環境
• 演算子
• リダイレクト
• 変数とスコープ
• ヒアドキュメント
• 条件分岐
• 繰り返し
PowerShell 実行環境
• PowerShell (PowerShell コンソール)
• powershell.exe
• 通常の PowerShell 環境
• PowerShell ISE (Integrated Scripting Environment)
• powershell_ise.exe
• スクリプト作成 / デバッグ用の環境
– ブレークポイントの設定
演算子
• 算術演算子(about_Arithmetic_Operators)
• +, -, *, /, %• 代入演算子(about_Assignment_Operators)
• =, +=, -=, *=, /=, %=• 比較演算子(about_Comparison_Operators)
• -eq, -ne, -gt, -lt, -le, -ge, -match, -notmatch, -replace,
-like, -notlike, -in, -notin, -contains, -notcontains, -bAND, -bOR, -bXOR, -bNOT
• 論理演算子(about_Logical_Operators)
演算子
• リダイレクト演算子(about_Redirection)
• 後述• 分割/結合演算子(about_Split / about_Join)
• -split, -join• 型演算子(about_Type_Operators)
• -is, -isnot, -as
• 単項演算子(about_Operators)
• $a++, $a—
• 特殊演算子(about_Operators)
リダイレクト
• リダイレクト演算子
• ストリームの出力先を変更 > 標準ストリームをファイルに保存(既存ファイルは上書き) >> 標準ストリームをファイルに保存(既存ファイルに追記) 2> エラーストリームをファイルに保存(既存ファイルは上書き) 2>> エラーストリームをファイルに保存(既存ファイルに追記) 2>&1 エラーストリームを標準ストリームと同じ場所へ出力 • ストリーム番号 – 2:エラー 3:警告 4:詳細 5:デバッグ • 出力文字コードは UTF-16 になるので注意 – 文字コードを変換しつつ出力する場合は、Out-File 等を利用変数とスコープ
• 変数:値を格納するための場所(入れ物)
• $ を先頭に付ける • 参照可能な範囲(スコープ)がある – 関数内、ブロック内、スクリプト内で宣言された変数は、原則として外部から は参照できない – 可能な限りグローバル変数は使用しない• 変数のスコープ
• グローバル:どこからでも参照可能 • スクリプト:同一スクリプト内であれば参照可能 • (ローカル):同一ブロックまたは子ブロック内であれば参照可能 • プライベート:同一ブロック内のみ参照可能 Demo 01変数とスコープ
• ドットソース形式での読み込み
• スクリプト内の変数をグローバル変数として取り込む • . <ScriptPath> • 変数初期化(定義)用のファイルを分割したい場合等に利用可能 • 通常のスクリプトファイルに対しては使用しない方が良い – グローバル変数を無暗に増やさない • 不要な変数がある場合やグローバル変数が競合する場合は、削除する – Remove-Variable Demo 02ヒアドキュメント
• スクリプト内に文字列を埋め込むことが可能
• @’ <複数行文字列> ‘@ • @’ の直後に改行が必須• 主に、テスト時や簡単なスクリプトで使用
• スクリプトに埋め込むことになるので、保守性が悪い • 本格的に運用(使用)する場合は、外部ファイルから読み込む Demo 03条件分岐
• if ... elseif ... Else
• if (条件式1) { 条件式1を満たす時の処理 } elseif (条件式2) { 条件式2を満たす時の処理 } ... elseif (条件式n) { 条件式nを満たす時の処理 } else { 条件式1..nを満たさなかった時の処理 }• switch ステートメント
• switch (チェック対象) { 対象となる値1 { チェック対象が値1の時の処理 ; break ; } ... 対象となる値n { チェック対象が値nの時の処理 ; break ; } default { チェック対象が1..nの何れでもない時の処理 }繰り返し
• while ステートメント
• 条件を満たすまでループし続ける• do ... while ステートメント
• 条件を満たすまでループし続ける• for ステートメント
• インデックス(番号)付きで n 回(n 個)繰り返す• foreach ステートメント
• 集合(コレクション)の要素それぞれに対して処理を行う(名前付き)• Foreach-Object (%)
• 集合(コレクション)の要素それぞれに対して処理を行う(自動変数)スクリプトを実行するための事前準備
• スクリプトの実行を許可する
• とりあえずスクリプトを作成するコンピューター上で以下を実行 – Set-ExecutionPolicy RemoteSigned• PowerShell Remoting を有効化する
• リモート接続が必要な場合は以下を実行 (検証環境向け) – 接続先 : Enable-PSRemoting -Force– 接続元 : Set-Item WSMan:¥localhost¥Client¥TrustedHosts -Value *
PowerShell スクリプト
• スクリプトファイル
• 基本的に、コンソール上で実行する場合と同様のコマンドを記述 – 必要な処理(コマンドレット等)を列挙 • 人が考えてコマンド実行していた部分は、条件分岐やフィルタ、 エラー処理等として記述 • ps1 ファイルとして保存 – UTF-8 を推奨 • PowerShell ホストを介してスクリプトを実行 – PowerShell Console 上からスクリプトファイルを実行 – powershell.exe 起動時にスクリプトファイルを指定して実行スクリプトに記述する処理
• やりたいことを実現するための処理
• データ(操作対象)を取得 • データ(操作対象)から不要なものを除外(フィルタリング) • 残った項目(必要なもの)それぞれに対して処理を実行+
• スクリプトの動作をサポートする処理
• エラーハンドリング • 外部の状態に応じて処理を実行 • 結果の通知 / ロギング • 認証情報の取得・保持スクリプトの記述レベル
• 実行時の状況に合ったスクリプトを作成、記述する
• システムが自動で実行する(人の手を介さない) – 途中で止まらない(入力待ちにならない) – 最後まで正しく実行される、あるいは途中で正しく止まる – 処理内容・処理結果を後から追跡できる • 一般ユーザーが実行する – 分かり易いメッセージを出力する(あるいは、何も出力しない) – 実行方法、実行形式をミスしても問題が起きないようにする • 作成者以外の IT 管理者が実行する • 作成者のみが利用する – 後からメンテナンスできるよう最低限コメントを記載するやりたいことを実現するための処理
• 処理の基本
• 取得(入力)して、抽出して、処理(または出力)する • 複数のコマンドレット、関数等の間で、対象(オブジェクト)を受け渡す• オブジェクトの受け渡し
• 引数として入力し、出力を次のコマンドの引数へ渡す – $a = <Cmdlet1> – <Cmdlet2> $a • パイプラインを使用する – <Cmdlet1> | <Cmdlet2>パイプラインの処理
• <Cmdlet1> | <Cmdlet2> | <Cmdlet3>
• Cmdlet1 の出力オブジェクト全体が Cmdlet2 に渡されるわけではない • Cmdlet1 の出力がコレクション(配列)の場合 1. <Cmdlet1> の出力の一つ目のオブジェクトが <Cmdlet2> に渡される 2. <Cmdlet2> は一つ目のオブジェクトを処理し、<Cmdlet3> へ渡す 3. <Cmdlet3> でも一つ目のオブジェクトが処理される 4. 上記を、すべてのオブジェクトに対して実行 ※はじめは、あまり気にしなくても OK Demo 04
Foreach-Object
• パイプラインの中での繰り返し処理
• 通常は Foreach-Object を使用 • エイリアスは %, foreach – foreach ステートメントと混同しないように注意 • オブジェクトの配列を受け取り、各要素に処理<scriptblock>を実行 – Foreach-Object <scriptblock> – <scriptblock>のなかでは、自動変数 $_ に各オブジェクトが設定される Demo 05データ(オブジェクト)の取得
• 操作対象となるオブジェクトを取得する
• オブジェクト、またはオブジェクトの集合(配列、コレクション、etc...)
• 専用のコマンドレットで取得
• Get-ADUser, Get-WindowsFeature, etc...
• 汎用のコマンドレットで取得
• Get-Item, Get-ItemProperty, etc...
• ファイルから読み込み
• Import-CSV, [xml](Get-Content)
ファイルの読み込み
• テキストファイルとして読み込む
• Get-Content –Path <path>
• 1行を1文字列として、文字列の配列を取得
• CSVとして読み込む
• Import-CSV –Path <path>
[-Encoding <Encode>] [-Delimiter <Delimiter>]
• エンコードは極力指定する
– ASCII, BigEndianUnicode, Default, OEM, Unicode, UTF32, UTF7, UTF8
• デリミタ(区切り文字)は、必要に応じて指定する
– デフォルトはカンマ “,”
ファイルから読み込む
• XMLとして読み込む
• [xml](Get-Content –Path <path>)
• 文字列から XML オブジェクト(XMLDocument)を生成
フィルタリング
• オブジェクトを抽出する(絞り込む)
• 通常は Where-Object(?)を使用
– Where-Object <scriptblock>
– <scriptblock> が $true となるオブジェクトのみを抽出
• ? { $_.Name –eq “suzuki” } ? { $_.Installed } • ? Name –eq “suzuki” ? Installed
– 同じフィルタ(条件)を多用するのであれば、filter を作成したほうが良い • 先頭または末尾から抽出する – Select-Object -First <N> – Select-Object -Last <N> • オブジェクトの順序を並び替える – Sort-Object
ファイルへ出力(保存)
• テキストファイルへ出力
• Out-File <path> [-Encoding <Encode>] [-Append]
• 追記する場合は -Append スイッチを使用
• リダイレクトは文字コードを指定できないため、通常はこちらを使用
• CSV ファイルへ出力
• Export-CSV –Path <path> [-Encoding <Encode>] [-Append]
その他の出力
• Out-Null
• パイプラインから渡されたオブジェクトを捨てる(UNIX の /dev/null)• Out-String
• パイプラインから渡されたオブジェクトを文字列に変換する• Write-Host
• 指定されたオブジェクトを Console へ出力する • パイプラインには何も出力されない• Write-Output
• 指定されたオブジェクトを標準ストリーム(パイプライン)へ出力するエラーハンドリング
• スクリプト実行時、エラーが発生する要因はたくさんある
• ディスク容量不足 • ネットワーク切断 • 通信先のサービスダウン • 日付、時刻、起動時間(起動後経過時間) • スクリプトの不具合(仕様・実装)• 処理に失敗しても致命的な状態にならないことが重用
• 破壊的な操作を記述する場合は十分にチェックする – 破壊的な操作:対象の状態を変更する操作(追加、削除、データ変更等) – 非破壊的な操作:対象の状態を変更しない操作(何度実行しても影響がない)エラーメッセージを出力する
• エラーとしてメッセージを出力する
• Write-Error • 標準エラーストリームへ出力される • エラー扱いとなる($ErrorActionPreference の影響を受ける)• エラーの他にも出力可能
• Write-Warning ストリーム 3 へ出力 • Write-Verbose ストリーム 4 へ出力 • Write-Debug ストリーム 5 へ出力エラー発生時の動作
• エラー発生時
• デフォルトではスクリプトの実行を継続しようとする – スクリプト実行環境として継続が可能な場合 • $ErrorActionPreference の値により制御される – SilentlyContinue: エラーメッセージを抑止して継続 – Continue : エラーメッセージを出力して継続 – Stop : 実行を停止 – Inquire : 実行を継続するかユーザーに確認(プロンプト表示) • 共通パラメータ : -ErrorAction – 基本的に、全てのコマンドレットでサポートされるパラメータ – -ErorAction を設定すると $ErrorActionPreference の動作を上書きできる Demo 08エラーの内容を参照する
• 自動変数 : $Error
• これまでに発生したエラーが保存されている(ArrayList) – $Error[0] : もっとも直近のエラー – $Error[1] : 一つ前のエラー … – $Error[-1] : 一番古いエラー(一番最初に発生したエラー)• 共通パラメータ : -ErrorVariable
• 該当のコマンドレット内で発生したエラーを保存する変数を指定可能 • 後からエラーの内容を参照する可能性がある場合は、明示的に別の変数へ 入れておいた方が処理が楽になる(かもしれない) Demo 09エラー発生時に処理を実行(例外処理)
• trap
• エラーが発生した際に、trap ブロック内の処理を実行 • 処理を実行した後は、エラー発生箇所に戻って処理を再開 – trap が記述されているスコープと同じスコープの後続処理から実行 • continue キーワード – trap した際にエラー出力を抑止する • break キーワード – 後続処理を実行しない(処理を停止する) Demo 10エラー発生時に処理を実行(例外処理)
• try ... catch ... finally
• try ブロック内のエラーを捕捉し、処理を実行 • catch するエラーオブジェクトを指定可能 – エラーオブジェクトの種類ごとに処理を記述できる • finally ブロックで後処理が可能 – finally ブロックは、エラーが発生したかどうかに関係なく実行される • 構造化されており、trap よりもスコープが明確 Demo 11
外部の状態に応じて処理を実行
• スクリプト外の処理状態に応じて、処理を実行する
• 別のスクリプトが出力したファイルを利用する • OS やサービス等の状態に応じて処理を実行する• 待ち合わせる方法
• 特定の状態になるまで、スクリプト内部でチェックしながら待つ – コマンドレットによっては -Wait パラメータを利用可能 • 繰り返しタスクとしてスクリプトを登録し、特定の状態のときのみ処理を 実行する • イベントハンドラを登録し、イベントをトリガーに実行する • 外部の処理を含めた処理全体をワークフローとして記述するイベントによる制御
• イベント
• オブジェクトの状態変化• イベントトリガーで処理を実施
• イベントのサブスクライブを行うことで、イベントが発生した際に通知を 受け取ることが可能 • 特定のイベントが発生した際に実行する処理を、イベントハンドラとして 登録• 例えば
• 特定のフォルダーにファイルが配置されたら処理を行う • 特定のプロセスがダウンしたら処理を行う Demo 12通知
• メールで通知
• Send-MailMessage コマンドレットを使用 • 送信用の SMTP サーバーが別途必要• イベントログに出力
• Write-EventLog コマンドレットを使用 • イベントソースの指定が必要 – 既存のイベントソースを流用する – 事前に、スクリプト用のイベントソースを登録するイベントログへ出力
• イベントソースを登録
• New-EventLog -LogName <LogName> -Source <SourceName>
– 既存の <LogName> を指定すると、<SourceName> が登録される
– 存在しない <LogName> を指定すると、新規にイベントログを作成する
• 場合によっては管理者権限が必要
• イベントログの出力
• Write-EventLog -LogName <LogName> -EntryType <Type>
-Source <SourceName> -EventId <N> -Message <Message>
• <Type> は Error, Warning, Information, SuccessAudit, FailureAudit
認証情報の取得・保存
• 認証情報の取得
• Get-Credential でプロンプトから取得 • ユーザー名とパスワードから PSCredential オブジェクトを生成• PSCredential 内のパスワード
• System.Security.SecureString として保持 • ファイルに保存する場合は、Convert が必要 – ConvertFrom-SecureString – ConvertTo-SecureString – ファイルのアクセス権に注意 • 実行ユーザーが変わる場合は注意 • 実行ユーザーは生パスワードを取得可能 Demo 14リモート接続・リモート処理
• New-PSSession
• Credential 等を指定して、新規のセッションを作成(確立)する• Invoke-Command
• New-PSSession で作成したセッションを使用してコマンドを実行する – -Session パラメータ • Invoke-Command で直接セッションを確立して実行することも可能 – Invoke-Command の終了時、セッションも終了する – 同一のセッションを再利用したい場合は、New-PSSession を使用する実行環境の差異に注意する
• 作成環境と実行環境は同一とは限らない
• OS のバージョンが異なるVersion • PowerShell(WMF)のバージョンが異なる • インストールされている PowerShell モジュールが異なる • インストールされている外部コマンドが異なる • etc...• 異なる環境で実行される可能性を考慮する
• 実行環境(PowerShell Version)を制限する • 複数の環境で動作するようスクリプトを記述する • リソースのチェックやエラー制御を適切に行う Demo 15実行可能な環境を制限する
• 特定の PowerShell バージョンを要求する
• #requires –version <version>
バージョンを判定し動作を分ける
• PowerShell のバージョンを判定する
• $PSVersionTable.PSVersion(PowerShell 2.0 以降) • PowerShell 1.0 は $PSVersionTable が存在しない• OS のバージョンを判定する
• Get-WmiObject Win32_OperatingSystem • [System.Environment]::OSVersion Demo 17ストリクトモード
• ストリクトモードを設定する
• Set-StrictMode –Version Latest
• Version 2.0 (現在の Latest) – 初期化されていない変数の参照禁止 – 存在しないプロパティのアクセス禁止 – メソッド形式での関数呼び出し禁止 – 名前なし変数の禁止 • オフにする場合 – Set-StrictMode –Off • 設定したスコープ(と子スコープ)のみ有効 • http://technet.microsoft.com/ja-jp/library/hh849692.aspx
作成したスクリプトの動作確認
• PowerShell ISE 上で実行する
• スクリプト全体を実行 • 範囲を選択して実行 • ブレークポイントの設定とブレークポイントでの停止 / 再開 • ステップ実行• コンソールと ISE では、一部動作 (挙動) が異なる
• 外部コマンドの呼び出し制約 – $psUnsupportedConsoleApplications • OS と WMF のバージョンの組み合わせによっては、コマンドの出力結果 Demo 18デバッグ情報の出力
• トレースレベルの設定
• Set-PSDebug -Trace <N> – 0 : トレース無効 – 1 : 実行されるスクリプトの各行をトレース – 2 : スクリプト行、変数の代入、関数呼び出し、スクリプトをトレース• 自動変数
• $DebugPreference と $DebugPreference• 共通パラメータ
• -Debug と -Verboseスクリプトの実行許可
• スクリプトの実行やコンフィグレーションのロード
• 実行ポリシー (Execution Policy) によって制御される • 既定値では、スクリプトの実行が禁止されている – Windows Server 2012 R2 以外• 実行ポリシーの確認と変更
• Get-ExecutionPolicy / Set-ExecutionPolicy • グループポリシーによる設定 – コンピューターポリシー / ユーザーポリシー • PowerShell 起動時のオプションで指定実行ポリシー
• 実行ポリシーは以下の 6 種類 (5 段階 + “未定義”)
• Restricted : スクリプトの実行を禁止する • AllSigned : 有効な署名付きのスクリプトのみ実行可能 • RemoteSigned : ローカルのスクリプトは無条件に実行可能 リモートから取得したスクリプトには署名が必要 • Unrestricted : スクリプトは実行可能 (一部警告表示あり) • Bypass : スクリプトは実行可能 (警告表示なし) • Undefined : 未定義• 規定値は Undefined
• Windows Server 2012 R2 のみ RemoteSigned (LocalMachine Scope)
実行ポリシーのスコープ
• 実行ポリシーはスコープごとに設定可能
• MachinePolicy : グループポリシーによる設定 (Computer) • UserPolicy : グループポリシーによる設定 (User) • Process : 実行中の PowerShell セッション内のみ有効 • CurrentUser : ログインユーザーの設定 (レジストリに格納) • LocalMachine : ローカルコンピューターの設定 (レジストリに格納)• 上位スコープの設定が優先される
• 基本的には管理者権限で設定を行う
• Process / CurrentUser スコープは一般ユーザー権限で設定変更可能 • LocalMachine スコープでスクリプト実行を禁止していても、Process ス コープで実行を許可することで、一時的なスクリプトの実行が可能リモート接続の構成
• リモート コンピューターへ接続して操作を行う
• WS-Management を使用してリモートコンピューターの WinRM
(Windows Remote Management) サービスへ接続する
• 事前にリモート接続の構成が必要
– Windows Server 2012 R2 では、同一セグメントからのリモート接続が デフォルトで許可されている
• とりあえず接続したい場合は以下を実行 (検証環境向け)
– 接続先 : Enable-PSRemoting -Force
– 接続元 : Set-Item WSMan:¥localhost¥Client¥TrustedHosts -Value *
– 本番環境へ適用する際は、設定の意味を理解してセキュリティを考慮する
• Get-Help about_Remote
リモート接続の要件
• リモート接続の要件を満たすようコンピューターを構成する
• WinRM サービスが起動している
• WinRM のエンドポイントが適切に構成されている
• Windows Firewall やその他の Firewall 製品で通信が許可されている
– ネットワークロケーションがパブリック ネットワークの場合、PowerShell の バージョン / OS によって Enable-PSRemoting の挙動が異なるので注意 • 接続先コンピューターの Administrators グループに所属しているか、 権限が適切に構成されている • 接続先に対する資格情報の送信が許可されている – ドメインに参加しているか、TrustedHosts が適切に構成されている • Get-Help about_Remote_Requirements – http://technet.microsoft.com/en-us/library/hh847859.aspx
リモート接続時の注意点
• PowerShell のバージョンによりセッションの扱いが異なる
• PowerShell 2.0 / WinRM 2.0 では接続元側でセッション情報を保持 • PowerShell 3.0 / WinRM 3.0 以降は接続先側でセッション情報を保持 – セッションを切断し、別の接続元から同一のセッションへ再接続が可能• トラブルが少ない構成
• ドメイン環境 • Domain Admins グループのユーザーを使用• WMF (Windows Management Framework) 3.0
実行方法
• ユーザーが任意に実行
• スクリプトファイルを powershell.exe から実行 • 登録されたタスクを手動実行• 決められた時刻に自動実行(スケジュールタスク)
• タスクスケジューラに登録• 特定の状態に変化したら実行(イベント)
• イベントトリガーで実行タスクスケジューラからスクリプトを実行
• タスクスケジューラにタスクを登録
• 実行するコマンド(実行ファイル)は powershell.exe
• -Command “<script path>” を指定
• 実行ユーザーに注意する
• スクリプト内の処理を実行する権限があるか – 特権モード、所属グループ、NTFS ACL、委任、etc... • 保存された Credential を使用する場合は、実行ユーザーで Credential が 保存されているか • 実行環境(プロファイル)に問題はないか – プロファイル、UAC、etc...Azure の操作を自動化
• Azure サービスのコントロール
• Azure PowerShell を使用 • 仮想マシン内の OS のコントロールは、通常の OS と同様• サービスコントロール用の認証情報
• Add-AzureAccount ではなく、Get-AzurePublishSettingsFile を使う– Azure Active Directory 認証ではなく、証明書認証 – Azure AD の認証は 12 時間で Expire するので注意
– 証明書であれば、証明書の有効期限(かつ、サブスクリプションの有効期限)
Azure の操作を自動化
Azure の操作を自動化
単位変換
• バイトの単位
• KB, MB, GB, TB, PB がキーワードとして登録されている – 1KB : 1024 – 1MB : 1048576 – 1GB : 1073741824 – 1TB : 1099511627776 – 1PB : 1125899906842624 • 大文字、小文字は区別されない – 1KB = 1kB = 1Kb = 1kb = 1024 • EB, ZB, YB は変換できない文法やコマンドレットの確認
• 困ったときはヘルプを見る
• Get-Help about_*
• Get-Help <Cmdlet> -Full
• 使えそうなコマンドがないか調べる
• Get-Command
• <Cmdlet> | Get-Member