【问题标题】:What is wrong with my array?我的阵列有什么问题?
【发布时间】:2017-09-19 01:22:36
【问题描述】:

我无法弄清楚我需要修复什么才能让脚本运行。

代码:

$clusterNodeNames = (Get-ClusterNode -Cluster Clu05).Name
$AllVMsInCluster = Get-VM -ComputerName $clusterNodeNames

$AllVMs = $AllVMsInCluster | Select -ExpandProperty Name

$AllVMsInCluster[1] | Set-VM -SnapshotFileLocation C:\ClusterStorage\Volume1\$AllVMs[1]

我正在创建两个数组

$AllVMsInCluster

$AllVMs 

输出:

PS C:\Windows\system32> $AllVMsInCluster[1]

Name     State CPUUsage(%) MemoryAssigned(M) Uptime   Status             Version
----     ----- ----------- ----------------- ------   ------             -------
acd-pv06 Saved 0           0                 00:00:00 Operating normally 8.0

PS C:\Windows\system32> $AllVMs[1]
acd-pv06

我的最终游戏是将最后一行放入一个循环中,但最后我不断得到整个数组。

当我运行最后一行时,它将仅更改 acd-pv06 的 SnapshotFileLocation,但输出如下所示:

C:\ClusterStorage\Volume1\acd-pv02 acd-pv06 acd-SQL01-ag acd-SQL02-ag[1]

我怎样才能让它看起来像:

C:\ClusterStorage\Volume1\acd-pv06\

【问题讨论】:

    标签: powershell hyper-v failovercluster


    【解决方案1】:

    您不需要两个数组。您已经在 $AllVMsInCluster 数组中的对象中拥有了可用的 .Name 属性。直接在循环或管道中使用它。将 object.property 包裹在子表达式 $() 中以确保正确的变量扩展。

    $AllVmsInCluster |
        ForEach-Object {
            Write-Host "Changing snapshot file location for $($_.Name)."
            Set-VM -VM $_ -SnapshotFileLocation "C:\ClusterStorage\Volume1\$($_.Name)" -WhatIf
        }
    

    当您准备好实际执行更改时,请删除 -WhatIf

    【讨论】:

      猜你喜欢
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多