Как проверить, существует ли командлет в PowerShell во время выполнения через script
У меня есть PowerShell script, который должен запускаться под несколькими хостами (PowerGUI, PowerShell ISE и т.д.), но я У меня проблема, когда иногда какой-то командлет не существует под одним из хостов. Есть ли способ проверить, существует ли командлет, чтобы я мог обернуть код в блок if и сделать что-то еще, когда он не существует?
Я знаю, что я мог бы использовать $host.name
для разделения кода, который предполагается запускать на каждом хосте, но я бы предпочел использовать Функция обнаружения вместо этого, если командлет когда-либо будет добавлен в будущем.
Я также мог бы использовать блок try/catch, но поскольку он работает в управляемом коде, я предполагаю, что вам нужно выяснить, установлен ли командлет с помощью кода.
Ответы
Ответ 1
Используйте командлет Get-Command
, чтобы проверить наличие командлета:
if (Get-Command $cmdName -errorAction SilentlyContinue)
{
"$cmdName exists"
}
И если вы хотите убедиться, что это командлет (а не exe или функция или script), используйте параметр -CommandType
, например -CommandType Cmdlet
Ответ 2
Это простая функция, чтобы делать то, что вам нравится:)
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)
}