【问题标题】:PowerShell/PowerCli to pass Correct parameter from Out-GridView for Snapshot removalPowerShell/PowerCli 从 Out-GridView 传递正确参数以删除快照
【发布时间】:2017-05-03 09:52:12
【问题描述】:

我是 PowerShell/PowerCLI 新手,现在我正在学习它是为了工作。我创建了一个简单的几行代码来列出所有快照并使用 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 只显示快照名称、描述和电源状态,所以我添加了一个计数器、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 返回了错误的参数并出现错误:

删除快照:无法绑定参数“快照”。无法转换 “@{ID=4;VM=Win7-Golden;名称=SS20170227 v3.1;大小GB=0.00;天数=64}” “Selected.VMware.VimAutomation.ViCore.Impl.V1.VM.SnapshotImpl”类型的值 键入“VMware.VimAutomation.ViCore.Types.V1.VM.Snapshot”。 在 D:\powershell\snapshot_with_index.ps1:10 char:39 + $快照 | foreach { 删除快照 $_ } + ~~ + CategoryInfo : InvalidArgument: (:) [Remove-Snapshot], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,VMware.VimAutomation.ViCore.Cmdlets.Commands.RemoveSnapshot

感谢是否有人可以指导我如何解决此错误,以传递正确的参数。

【问题讨论】:

    标签: powershell vmware powercli


    【解决方案1】:

    Select-Object 将对象类型更改为PSCustomObject,但Remove-Snapshot 似乎需要一个快照对象。

    我无权访问 vSphere 系统,但如果您想允许通过具有“增强信息”的网格视图进行过滤,您可能需要先将快照存储在一个阵列中,然后从该阵列中获取选定的快照删除。

    这样的事情可能会奏效:

    $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]
    }
    

    【讨论】:

    • 完美运行。感谢您的指导,抱歉回复晚了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2023-04-09
    • 2011-07-30
    相关资源
    最近更新 更多