Clear-Itemコマンドレットは「変数、エイリアス、レジストリーエントリー」を削除することができる。
変数は値のクリアで、変数自体が削除されるわけではない。
変数自体を削除するには、Remove-Variableを使う。
#変数の設定
Set-Variable -Name a -Value "aaa"
$b = "bbb"
New-Variable -Name c -Value "ccc"
Write-Warning "変数a,b,cを設定しました" ; sleep 2
Write-Host ("変数a={0}" -f $a)
Write-Host ("変数b={0}" -f $b)
Write-Host ("変数c={0}" -f $c)
#変数のクリア
Clear-Item variable:a
Clear-Variable b
$c = $null
Write-Warning "変数a,b,cをクリアしました" ; sleep 2
Write-Host ("変数a={0}" -f $(if($a -eq $null){"NULL"}))
Write-Host ("変数b={0}" -f $(if($b -eq $null) {"NULL"}))
Write-Host ("変数c={0}" -f $(if($c -eq $null) {"NULL"}))
#変数の削除
Remove-Variable a , b ,c
Write-Warning "変数a,b,cを削除しました" ; sleep 2
Write-Warning "変数aの表示(エラーになる)" ; sleep 2
Get-Variable a
#エイリアスの設定
New-Alias -Name np -Value c:\windows\notepad.exe
Set-Alias -Name np2 -Value c:\windows\notepad.exe
Write-Warning "エイリアスを設定しました" ; sleep 2
#エイリアスの実行
Write-Warning "メモ帳が開くので閉じる" ; sleep 2
"Alias:np = C:\Windows\Notepad.exe" > a.txt
np a.txt | Out-Null
"Alias:np2 = C:\Windows\Notepad.exe" > b.txt
np2 b.txt | Out-Null
#エイリアスの削除
Clear-Item -Path Alias:np
Remove-Item -Path Alias:np2
Write-Warning "エイリアスを削除しました" ; sleep 2
Write-Warning "Alias np の実行、存在しないのでエラーになる" ; sleep 2
np a.txt
del a.txt , b.txt -Verbose |
Set-VariableとNew-Variable、Set-AliasとNew-Aliasの違いはNewのほうは既に存在するとエラーになる。
Write-Warningは手軽に黄色表示ができるので使っているだけ。Write-Hostでも色の指定はできる。
Write-Host ("変数a={0}" -f $(if($a -eq $null){"NULL"})) |
通常フォーマット演算子( –f )の右にはオブジェクトが来る。
ここではifで条件判定した結果を渡したいので、
$( ) の形式(部分式演算子)を使っている。
これはPowershellに対して式の評価を強制するもので、以下のように文字列の中などでも使える。
PS E:\temp\test> "(dir)"
(dir)
PS E:\temp\test> "$(dir)"
a.txt b.txt |
dirの結果表示が通常と違っているが、部分式演算子ではコマンド出力がOut-Stringされないようだ。
(コマンドラインから入力された場合は自動的に Out-Stringされる。)
自分でOut-Stringしてあげると通常の形式で一覧表示される。
PS E:\temp\test> "$(dir | Out-String)"
ディレクトリ: E:\temp\test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2010/06/17 22:43 8 a.txt
-a--- 2010/06/17 22:43 8 b.txt |
エイリアスを使ってメモ帳を起動している部分では、閉じられるのを待つためにOut-Nullにパイプしている。
最後にファイルを削除している部分では、
del a.txt , b.txt -Verbose |
-Verboseスイッチを指定して動作の詳細情報を表示させている。
ほとんどの動作系コマンドレットでは、このスイッチが指定できるようだ。