如何在运行时通过脚本检查PowerShell中是否存在cmdlet

我有一个PowerShell脚本需要在多个主机(PowerGUI, PowerShell ISE等)下运行,但是我有一个问题,其中一个主机下有时不存在cmdlet。 有没有办法检查是否存在一个cmdlet,以便我可以将代码封装在if块中,并在不存在时执行其他操作?

我知道我可以使用$host.name$host.name假设在每个主机上运行的代码,但是我希望使用function检测来代替将来添加的cmdlet。

我也可以使用一个try / catch块,但是由于它运行在托pipe代码中,我假设有一段距离来检测是否通过代码安装了cmdlet。

2 Solutions collect form web for “如何在运行时通过脚本检查PowerShell中是否存在cmdlet”

使用Get-Command cmdlettesting是否存在cmdlet:

 if (Get-Command $cmdName -errorAction SilentlyContinue) { "$cmdName exists" } 

如果你想确保它是一个cmdlet(而不是一个exe或函数或脚本)使用-CommandType参数,例如-CommandType Cmdlet

这是一个简单的function,做你喜欢做的事:)

 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) } 
  • 相当于C#的“使用”关键字在PowerShell中?
  • 使用PowerShell进行recursion文件search
  • 有没有什么办法让双击.ps1文件的PowerShell脚本工作?
  • 使用PowerShell删除超过15天的文件
  • 如何将PowerShell版本从2.0升级到3.0
  • 如何获得远程计算机的磁盘容量和可用空间
  • 检查PowerShell对象是否存在的最佳方法?
  • 我如何获得只有使用Get-ChildItem的目录?
  • 什么时候应该使用Write-Error vs Throw? 终止与不终止错误
  • 如何将数组对象转换为PowerShell中的string?
  • 如何在PowerShell中连接两个文本文件?