我尝试在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红色收集数据
发布于 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]
}
发布于 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!"
}
https://stackoverflow.com/questions/56137395
复制相似问题