如何在添加之前验证snapin?

时间:2012-03-15 14:38:10

标签: powershell powershell-v2.0

我在Powershell中遇到了编译问题。

  

Add-PSSnapin:无法添加Windows PowerShell管理单元   VMware.VimAutomation.Core,因为它已经添加。验证名称   管理单元并重试。

错误明确提到我需要验证管理单元的名称。当我第一次执行时,它已成功添加。

如何验证管理单元是否存在,如果没有则添加?

2 个答案:

答案 0 :(得分:11)

如果尚未加载,您可以加载它:

if(-not (Get-PSSnapin VMware.VimAutomation.Core))
{
   Add-PSSnapin VMware.VimAutomation.Core
}

您也可以加载它并忽略错误:

Add-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue

答案 1 :(得分:0)

我收到了以下错误,并认为这是因为snapin已经加载但似乎并非如此。

ERROR: The specified mount name 'vmstores' is already in use.
ERROR: The specified mount name 'vis' is already in use.

上面提供的解决方案肯定比我在下面开始编写的内容简单得多。

我认为一个促成因素是我想看看是否首先注册了snapin。

$snaps1 = Get-PSSnapin -Registered
$snaps2 = Get-PSSnapin *VMWare -ErrorAction SilentlyContinue  

$vmsnap = 0

foreach ($snap1 in $snaps1) {
    if ($snap1.name -eq "VMware.VimAutomation.Core") {
        Write-Host "VM Snapin Registered..."
        $vmsnap = 1
        }
    }

if ($vmsnap -eq 0) {
    Write-Host "VMWare Snapin NOT Registered. Ensure the CLI is installed and available on machine."
}

if ($vmsnap -eq 1) {
    foreach ($snap2 in $snaps2) {
        if($snap2.name -eq "VMware.VIMAutomation.Core") {
            Write-Host "VMware Snapin Already Loaded..."
            $vmsnap = 2
            }
        }
    } 

if ($vmsnap -ne 2) {
    Write-Host "Loading VMware Snapin..."
Add-PSSnapin VMware.VimAutomation.Core 
}

授予我对PS语法仍然非常非常新。