複数のホスト(PowerGUI、 PowerShell ISE など)で実行する必要があるPowerShellスクリプトがありますが、ホストの1つにコマンドレットが存在しないことがあるという問題があります。コマンドブロックが存在するかどうかを確認して、ifブロックでコードをラップし、存在しないときに何か他のことを実行できるようにする方法はありますか?
$Host.name
を使用して各ホストで実行するコードをセクション化できることは知っていますが、コマンドレットが将来追加される場合は Feature Detection を使用することをお勧めします。
Try/catchブロックを使用することもできますが、マネージコードで実行されるため、コマンドレットがコードを介してインストールされているかどうかを検出する余地があると思います。
使用 Get-Command
コマンドレットの存在をテストするコマンドレット:
if (Get-Command $cmdName -errorAction SilentlyContinue)
{
"$cmdName exists"
}
また、コマンドレット(exe、関数、スクリプトではない)であることを確認する場合は、-CommandType
パラメータ例-CommandType Cmdlet
これはあなたがやりたいことをする簡単な機能です:)
function Check-Command($cmdname)
{
return [bool](Get-Command -Name $cmdname -ErrorAction SilentlyContinue)
}
使用方法(例):
if (Check-Command -cmdname 'Invoke-WebRequest')
{
Invoke-WebRequest $link -OutFile $destination
}
else
{
$webclient.DownloadFile($link, $destination)
}