2017-09-07 59 views
1

我无法弄清楚我需要修复脚本才能运行。我的数组有什么问题?

代码:

$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 

我的最后一步就是把最后一行一个循环,但最后我不断得到整个数组。

当我运行最后一行它会改变SnapshotFileLocation只ACD-pv06但输出的样子:

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

我如何我可以让它看起来像:

C:\ClusterStorage\Volume1\acd-pv06\ 

回答

6

你不需要两个数组。您已在$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当您准备好执行更改为真实。