Powershell 我的阵列有什么问题?

Powershell 我的阵列有什么问题?,powershell,hyper-v,failovercluster,Powershell,Hyper V,Failovercluster,我无法确定要运行脚本需要修复什么 守则: $clusterNodeNames = (Get-ClusterNode -Cluster Clu05).Name $AllVMsInCluster = Get-VM -ComputerName $clusterNodeNames $AllVMs = $AllVMsInCluster | Select -ExpandProperty Name $AllVMsInCluster[1] | Set-VM -SnapshotFileLocation C:\

我无法确定要运行脚本需要修复什么

守则:

$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\

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

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

当您准备真正执行更改时,请删除
-WhatIf

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

$AllVmsInCluster |
    ForEach-Object {
        Write-Host "Changing snapshot file location for $($_.Name)."
        Set-VM -VM $_ -SnapshotFileLocation "C:\ClusterStorage\Volume1\$($_.Name)" -WhatIf
    }
当您准备真正执行更改时,请删除
-WhatIf