如何检查是否在PowerShell中运行时通过脚本
问题描述:
我有一个PowerShell脚本,需要在多台主机(PowerGUI的,PowerShell ISE,等...)运行中存在cmdlet的,但我有一个问题,有时一个小命令没有按其中一位主持人不存在。有没有办法检查cmdlet是否存在,以便我可以将代码包装在if块中,并在不存在时执行其他操作?如何检查是否在PowerShell中运行时通过脚本
我知道我可以使用$host.name
来区分假设在每个主机上运行的代码,但我宁愿使用Feature Detection,以防将来添加该cmdlet。
我也可以用try/catch块,但由于它在托管代码运行我假设有路程,如果通过代码安装cmdlet来检测。
答
使用Get-Command
cmdlet来测试cmdlet的存在:
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)
}
不知道有一个errorAction参数。在这里找到所有常用参数的列表:http://msdn.microsoft.com/en-us/library/dd901844(VS.85).aspx这是很好的知道。谢谢! – 2010-10-13 01:39:48
注意:您也可以使用if(get-module | Where-Object {$ _。Name -eq“ServerManager”}){{“Module Exists”}}来检查模块。更多详细信息:http://*.com/questions/10027156/how-to-import-system-modules-automatically – 2012-05-30 18:12:25
cmdlet可能存在,但不可用。很好的例子:Windows 2003上存在Get-WinEvent,但它引发NotImplemented异常。你将如何处理这种情况? – Neolisk 2012-09-17 18:24:52