PowerShell/powerCli从外浏览中传递正确的参数,以删除快照



我是PowerShell/PowerCli Newbie,现在我正在学习工作。我已经创建了一个简单的几行代码来列出所有快照,并使用out-gridview将其列出在另一个弹出窗口中,选择一个或多个快照,然后单击"确定",让我删除选定的快照,并且它可以毫无问题地工作。。

#List snapshot
$snapshot = Get-VM | Get-Snapshot | Out-GridView -Title "Snapshot Viewer" -OutputMode Multiple
#remove selected VM's snapshot
$snapshot | foreach { Remove-Snapshot $_ }

因为默认Get-Snapshot仅显示快照名称,描述和Powerstate,所以我添加了一个计数器,VM名称,GB中的快照大小和快照年龄。

$counter = 1
#List snapshot with more information
$snapshot = Get-VM | Get-Snapshot | 
            Select-Object @{Name="ID";Expression={$global:counter;$global:counter++}}, 
                VM, Name, @{Name="SizeGB";Expression={[math]::Round($_.sizeGB,2)}},
                @{Name="Days";Expression={(New-TimeSpan -End (Get-Date) -Start $_.Created).Days}} |
            Out-GridView -Title "Snapshot Viewer" -OutputMode Multiple
#remove selected VM's snapshot
$snapshot | foreach { Remove-Snapshot $_ }

现在$_似乎返回了Remove-Snapshot的错误参数并获得错误:

删除snapshot:无法绑定参数"快照"。无法转换"@{id = 4; vm = win7-golden; name = ss20170227 v3.1; sizegb = 0.00; days = 64}类型为" Selected.VMware.vimautomation.vicore.impl.impl.v1.vm.snapshotimpl"的值要键入" vmware.vimautomation.vicore.types.v1.vm.snapshot"。在D: powershell  snapshot_with_index.ps1:10 char:39  $快照|foreach {remove-snapshot $ _}  ~~      categoryInfo:invalidargument :( :) [remove-snapshot],parameterBindingException      flutlqualifyErrid:consevertargumentNomessage,vmware.vimautomation.vicore.cmdlets.commands.removesnapshot

感谢任何人可以为我提供有关如何解决此错误的指导,以传递正确的参数。

Select-Object将对象类型更改为 PSCustomObject,但是 Remove-Snapshot似乎期望快照对象。

我无法访问vSphere系统,但是如果要允许使用"增强信息"的GridView进行过滤,则可能首先将快照存储在数组中,然后从该数组中获取所选快照用于删除。

这样的事情可能有效:

$snapshots = @(Get-VM | Get-Snapshot)
0..($snapshots.Count - 1) | ForEach-Object {
    $i = $_
    $snapshots[$i] | Select-Object @{n='ID';e={$i}}, ...
} | Out-GridView -Title "Snapshot Viewer" -OutputMode Multiple | ForEach-Object {
    Remove-Snapshot $snapshots[$_.ID]
}

相关内容

最新更新