Подтвердить что ты не робот

Как проверить, существует ли командлет в PowerShell во время выполнения через script

У меня есть PowerShell script, который должен запускаться под несколькими хостами (PowerGUI, PowerShell ISE и т.д.), но я У меня проблема, когда иногда какой-то командлет не существует под одним из хостов. Есть ли способ проверить, существует ли командлет, чтобы я мог обернуть код в блок if и сделать что-то еще, когда он не существует?

Я знаю, что я мог бы использовать $host.name для разделения кода, который предполагается запускать на каждом хосте, но я бы предпочел использовать Функция обнаружения вместо этого, если командлет когда-либо будет добавлен в будущем.

Я также мог бы использовать блок try/catch, но поскольку он работает в управляемом коде, я предполагаю, что вам нужно выяснить, установлен ли командлет с помощью кода.

4b9b3361

Ответ 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)
}