PowerShell
PowerShellの変数
サーチ…
前書き
変数は値を格納するために使用されます。値を任意の型にすると、コンソール/スクリプト全体で値を使用できるように、値をどこかに格納する必要があります。 PowerShellの変数名は$ Variable1のように$で始まり、値は$ Variable1 = "Value 1"のように=を使用して割り当てられます.PowerShellは膨大な数の変数型をサポートしています。整数、小数点以下の桁数、配列、さらにはバージョン番号やIPアドレスなどの高度な型のような、
単純変数
powershellのすべての変数は、ドル記号( $
)で始まります。これの最も簡単な例は次のとおりです。
$foo = "bar"
この文は、 foo
という変数に文字列値 "bar"を割り当てます。
変数の削除
メモリから変数を削除するには、 Remove-Item
コマンドレットを使用します。注:変数名には$
は含まれません。
Remove-Item Variable:\foo
Variable
は、ほとんどの* -itemコマンドレットがファイルシステムのように動作するようにするプロバイダがあります。
変数を削除するもう1つの方法は、Remove-Variableコマンドレットとそのエイリアスrvを使用することです
$var = "Some Variable" #Define variable 'var' containing the string 'Some Variable'
$var #For test and show string 'Some Variable' on the console
Remove-Variable -Name var
$var
#also can use alias 'rv'
rv var
範囲
変数のデフォルトスコープは囲みコンテナです。スクリプトの外側または他のコンテナの場合、スコープはGlobal
です。 スコープを指定するには、変数名$scope:varname
接頭辞を付け$scope:varname
like so:
$foo = "Global Scope"
function myFunc {
$foo = "Function (local) scope"
Write-Host $global:foo
Write-Host $local:foo
Write-Host $foo
}
myFunc
Write-Host $local:foo
Write-Host $foo
出力:
Global Scope Function (local) scope Function (local) scope Global Scope Global Scope
CmdLet出力の読み込み
デフォルトでは、powershellは出力を呼び出し側エンティティに返します。以下の例を考慮して、
Get-Process -Name excel
これは単純に、名前が一致する実行中のプロセスを呼び出し元のエンティティに戻します。この場合、PowerShellホスト。それは、
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName
------- ------ ----- ----- ----- ------ -- -- -----------
1037 54 67632 62544 617 5.23 4544 1 EXCEL
変数に出力を代入すると、何も印刷されません。もちろん変数は出力を保持します。 (それは文字列にしてください、オブジェクト - そのタイプの任意のタイプ)
$allExcel = Get-Process -Name excel
したがって、動的名で変数を割り当てるシナリオがあるとします-OutVariable
パラメータを使用できます
Get-Process -Name excel -OutVariable AllRunningExcel
「$」はここでは見つからないことに注意してください。これらの2つの割り当ての主な違いは、出力をAllRunningExcel変数に割り当てることから離れて出力することです。それを別の変数に割り当てることもできます。
$VarOne = Get-Process -Name excel -OutVariable VarTwo
上記のシナリオは非常にまれですが、変数$ VarOneと$ VarTwoは同じ値を持ちます。
今これを考えてみましょう。
Get-Process -Name EXCEL -OutVariable MSOFFICE
Get-Process -Name WINWORD -OutVariable +MSOFFICE
最初のステートメントは単にExcelプロセスを取得してMSOFFICE変数に割り当て、次にMSワードプロセスを実行し、MSOFFICEの既存の値に「追加」します。それはこのようなものに見えますが、
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName
------- ------ ----- ----- ----- ------ -- -- -----------
1047 54 67720 64448 618 5.70 4544 1 EXCEL
1172 70 50052 81780 584 1.83 14968 1 WINWORD
複数変数のリスト割当
Powershellは、変数の複数の割り当てを可能にし、配列やリストのようなほとんどすべてを扱います。これは、次のようなことをするのではなく、
$input = "foo.bar.baz"
$parts = $input.Split(".")
$foo = $parts[0]
$bar = $parts[1]
$baz = $parts[2]
これを簡単に行うことができます:
$foo, $bar, $baz = $input.Split(".")
Powershellはリストのように代入を処理しますので、リストに変数を割り当てるリストよりも多くの値がある場合、最後の変数は残りの値の配列になります。つまり、次のようなこともできる:
$foo, $leftover = $input.Split(".") #Sets $foo = "foo", $leftover = ["bar","baz"]
$bar = $leftover[0] # $bar = "bar"
$baz = $leftover[1] # $baz = "baz"
配列
Powershellの配列宣言は、他の変数のインスタンス化とほとんど同じです。つまり、 $name =
構文を使用します。配列内の項目は、カンマ( ,
)で区切って宣言します。
$myArrayOfInts = 1,2,3,4
$myArrayOfStrings = "1","2","3","4"
arryに追加する
配列に追加するには、 +
演算子を使用するのと同じくらい簡単です:
$myArrayOfInts = $myArrayOfInts + 5
//now contains 1,2,3,4 & 5!
配列をまとめて組み合わせる
これも+
演算子を使用するのと同じくらい簡単です
$myArrayOfInts = 1,2,3,4
$myOtherArrayOfInts = 5,6,7
$myArrayOfInts = $myArrayOfInts + $myOtherArrayOfInts
//now 1,2,3,4,5,6,7