サーチ…


前書き

変数は値を格納するために使用されます。値を任意の型にすると、コンソール/スクリプト全体で値を使用できるように、値をどこかに格納する必要があります。 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


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow