関数とそのスコープの問題を回避するために、スクリプトスコープで宣言されている変数をよく使用します。私はこれらの変数を次のように宣言しています:
New-Variable -Name test -Option AllScope -Value $null
...または、このような既存の変数を切り替えて、それらを包括的に使用することもあります。
$script:test = $test
それらをクリアしたいときは、次のいずれかを使用します。
Clear-Variable test -Scope Script
...または私は単にこれを使用します:
$test = $null
違いはありますか?私は何を好むべきですか、そしてなぜですか?
Get-Helpから:
Clear-Variableコマンドレットは、変数に格納されているデータを削除しますが、変数は削除しません。その結果、変数の値はNULL(空)になります。変数に指定されたデータまたはオブジェクトタイプがある場合、Clear-Variableは変数に格納されているオブジェクトのタイプを保持します。
したがって、Clear-Variable
と$var=$null
はほぼ同等です(保持される入力を除く)。まったく同じことは、$var=[mytype]$null
を実行することです。
あなたはそれを自分でテストすることができます:
$p = "rrrr"
Test-Path variable:/p # => $true
$p = $null
Get-Member -InputObject $p # => error
$p = [string]$null
Get-Member -InputObject $p # => it is a string
そして、次の質問に答えるために:変数を完全に削除する方法(存在しない変数はnull値の変数とは異なるため)?単にする
rm variable:/p
Test-Path variable:/p => $false