「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。 目次 †概要 †PowerShell のトピックを纏めています。 特徴 †
オブジェクトベースのシェル †WSHを置き換えている。 †同系列であるから置き換え。 CMDを置き換えるものではない。 †別物として使用(併用)する必要がある。
いつの間にか、Linuxでも利用可能になってた。 †.NET Coreもそうですが、いつの間にか、Linuxでも利用可能になってますね。
環境構築 †PowerShell の各バージョンは、以下のOSに添付されているか、別途ダウンロードできます。
インストール †
プロキシ設定 †基本 †実行方法 †インタラクティブな逐次実行は、
どちらの方法でも PowerShell を手で(シェルとして)逐次実行できます。 出力フォーマット †Get-XXXXXコマンドの出力配下のようなパイプでフォーマット可能。 Format-Wide †Get-XXXXX | Format-Wide Format-List †Get-XXXXX | Format-List Format-Table †Get-XXXXX | Format-Table スクリプティング †変数 †定義 †変数は $ で始まる 英数字記号 の名前を使用します。 下の様に ${ } で囲むと、名前にスペースを含むこともできますが、混乱やスペルミスの元になりやすいので避けましょう。 PS E:\temp> ${var test 1} = 123 PS E:\temp> $a = ${var test 1} + "123" PS E:\temp> $a 246 PS E:\temp> 未初期化の初期状態は $null と同じです。 PS E:\temp> $var001 PS E:\temp> $var001 -eq 0 False PS E:\temp> $var001 -eq $null True PS E:\temp> $a1 = $var001 + 2 PS E:\temp> $a1 2 PS E:\temp> $a1 = $var001 + "abc" PS E:\temp> $a1 abc PS E:\temp> 上の例では、変数 $var001 は未初期化なので、 $null と同じです。 Set-StrictMode? を使用すると、未初期化変数を参照する際にエラーとして検出できます。 PS E:\temp> Set-StrictMode -Version 1.0 PS E:\temp> $a1 = $var001 + 2 変数 '$var001' は、設定されていないために取得できません。 発生場所 行:1 文字:14 + $a1 = $var001 <<<< + 2 + CategoryInfo : InvalidOperation: (var001:Token) []、RuntimeExcep tion + FullyQualifiedErrorId : VariableIsUndefined PS E:\temp> スコープ †PowerShellの変数は、変数を使用する場所がスコープの範囲になります。
などがスコープの境界になります。 参考 †
if文 †if文は、下の様に -で始まる比較演算子を使います。 $var1 = sub2 $arg1 $arg2 if ( ( $var1 -eq 1 ) -or ( $var1 -gt 10 ) ) { ... } 条件のANDやORは、 それぞれを ( ... )で囲んで -and や -or で結びます。 論理のANDやORによるビット演算は、 -band や -bor の -b で始まる演算子を使います。 $file = get-item $dirname if ( $file.Attributes -band [System.IO.FileAttributes]::Directory ) { ... } bit演算結果が0以外の場合は、真 とみなされます。 if文の演算子の詳細は、powershellコマンドプロンプトの中で 「get-help about_Comparison_Operators」を参照してください。 配列 †配列は、以下の形式で定義できます。 $array1 = @() $array2 = @(1,2,3) $array3 = 1,2,3 ( ) で囲まなくても、「,」で並べると、配列になります。 $ret1 = sub1 2,3,4 # これは @(2,3,4) の配列で引数1つ $ret2 = sub1 2 3 4 # これは 引数3つ $ret3 = sub1 2,3 4 # これは @(2,3)の配列1つと 数値4 の 引数2つ また、配列の添え字は、$変数名[添え字] で参照します。 $var1 = $array2[1] # 上の $array2 から 2 を取り出す $var2 = $array2[-1] # 上の $array2 から 3 を取り出す 配列について詳しくは、 PowerShellコマンドプロンプトで「get-help about_array」 を参照ください。 拡張 †PSSnapin と Module †PowerShellのPS1ファイルの作成と実行 †PowerShell Cmdletの作り方 †PowerShell プロバイダとドライブ †情報の探し方 †Get-Command †コマンドを探すには、下の様に、コマンド名の一部を*で省略して Get-Command を実行します。 Get-Command *event get-help コマンド名 †
Get-Member †オブジェクトのメンバーやプロパティを確認するには、 Get-ChildItem | Get-Member Get-WmiObject? †Get-WmiObject -List
勘所1 †エラー処理 †.ps1ファイルの中でエラーが発生すると、既定では、 -ErrorAction? (省略形は -EA) オプション †Trap { エラー処理 } コマンド .... -ErrorAction "stop" try/catch で囲む †$ErrorActionPreference = "stop" try { コマンド .... } catch [Exception] { エラー処理 } try/catch の例は、上の ps_test.ps1 を参照ください。 その他 †その他の例、説明は、以下のサイトも参照ください。
デバッグ †debugは、 debug用print文、 デバッグ用環境、を使ってデバッグできます。 debug用print文 †debug用print文は、 スクリプトの中に write-host コマンドを埋め込む方法です。 デバッグ用環境 †デバッグ用環境 は、 PowerShell ISE (Integrated Scripting Environment) 環境が使用できます。
debug用のコマンド †通常の PowerShellコマンドプロンプトのままでも、
勘所2 †Windows Server 2012以降の管理 †Windows Server 2012以降は管理コンソールの裏はPowerShellコマンドレットになる。
リモート、非同期ジョブ、ワークフロー †リモート †
# Sessionを指定すれば処理中のジョブ等に再接続することも可能。 非同期ジョブ †
# 結果はSessionの範囲でしか有効では無い。 ワークフロー †
その他 †バージョン と 動作環境 †
VBScriptから変換 †VBScript から PowerShell へ変換のパターン
サンプル †PowerShellの御蔭で、昨今、CUIだけで結構イケる説。 豆知識 †
参考 †
MSDN magazine †
junichia †
その他 †PowerShell ISE †Azure PowerShell †Azure Cloud Shell †PowerShell Core †Tags: :シェル, :インフラストラクチャ, :Windows, :Linux |