首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在powershell中使用if条件验证表达式是否成功

在powershell中使用if条件验证表达式是否成功
EN

Stack Overflow用户
提问于 2019-05-15 03:31:40
回答 2查看 620关注 0票数 -1

我尝试在powershell脚本中运行一个很长的PowerCLI命令,并根据其成功将其输出到控制台。该命令正在执行并成功,但未触发成功输出。

我尝试将整个命令设置为变量,但没有成功。我怀疑有一种更高级的方法来做到这一点,我只是不知道。

Try{      
        #get list of all vms
        Write-Host "Collecting data and adding to file..."
        [Environment]::NewLine
        #create list of VMs in a variable
        $vmList = Get-VM -ErrorAction Stop


        #collect the VMWare Disk List here.
        #run the list through the appropriate filters and prompt for success (failure will initiate the catch)
        if ($vmList | Where-Object {$_.PowerState -eq "PoweredOff" -and $_.ExtensionData.config.ManagedBy.ExtensionKey -ne 'com.vmware.vcDr'} | Select-Object Name, @{N="Disk (GB)"; E={[math]::Round(($_ | Get-HardDisk | Measure-Object CapacityGB -Sum).sum)}}, @{N="Power State"; E={$_.PowerState}} | Export-Csv -Append -LiteralPath c:\temp\VMdiskTotals.csv) {
        Write-Host "vCenter Disk Collection for " $vcenter " Successful!"
        }

        }
Catch{
            Write-Host "Failed to collect the data from " $vcenter.Vcenter -ForegroundColor Red
            }

我想让下面的命令运行该命令,如果它运行完成时没有任何错误输出:

“$vcenter”的vCenter磁盘收集成功!

如果该命令产生任何错误,它应该触发catch并输出:

写入主机无法从$vcenter.Vcenter -ForegroundColor红色收集数据

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-20 01:24:20

它仍然不清楚为什么你需要把所有的东西都放在一个if语句中。但这可能会对你有用:

try {
    $vmList = Get-Vm -ErrorAction Stop
    if ($vmList) {  # If there are any VM objects in the array
        "vCenter Disk Collection for $vcenter Successful!"
        $vmList | Where-Object {$_.PowerState -eq "PoweredOff" -and $_.ExtensionData.config.ManagedBy.ExtensionKey -ne 'com.vmware.vcDr'} | 
            Select-Object Name, @{N="Disk (GB)"; E={[math]::Round(($_ | Get-HardDisk | Measure-Object CapacityGB -Sum).sum)}}, @{N="Power State"; E={$_.PowerState}} | 
            Export-Csv -Path c:\temp\VMdiskTotals.csv -Append -ErrorAction Stop
        "Successfully outputted to file."
    }
    else {
        "No VMs found."
    }
}
catch [VMware.VimAutomation.Sdk.Types.V1.ErrorHandling.VimException.VimException] {
    "Search for VMs failed."
}
catch [System.IO.IOException] {
    "Unable to write to file."
}
catch {
    "Other catch."
    $Error[0]
}
票数 1
EN

Stack Overflow用户

发布于 2019-05-15 03:58:34

可以这样做的一种方法是在If语句中的变量中捕获该信息,然后在的脚本块中将其输出到CSV并写入控制台。

    if (($ToOutput=$vmList | Where-Object {$_.PowerState -eq "PoweredOff" -and $_.ExtensionData.config.ManagedBy.ExtensionKey -ne 'com.vmware.vcDr'})){
        $ToOutput | Select-Object Name, @{N="Disk (GB)"; E={[math]::Round(($_ | Get-HardDisk | Measure-Object CapacityGB -Sum).sum)}}, @{N="Power State"; E={$_.PowerState}} | Export-Csv -Append -LiteralPath c:\temp\VMdiskTotals.csv
        Write-Host "vCenter Disk Collection for " $vcenter " Successful!"
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56137395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档