powershell - 我的阵列出了什么问题?

标签 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:\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\

最佳答案

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

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

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

关于powershell - 我的阵列出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46284987/

相关文章:

c# - 从 C# 的 PowerShell 当前状态(或上下文)获取信息

arrays - 检查哈希表数组是否包含哈希表

powershell - 如何在本地计算机上使用 PowerShell invoke-command 远程运行的 Minecraft 服务器中输入命令?

docker - VirtualBox和Docker for Windows之间的堆栈差异

kubernetes - 无法在Windows 10中使用Minikube for Kubernetes Cluster启动Hyper V VM以产生 Spark

excel - 为什么 PowerShell 不想将我的文件另存为 CSV

ssl - 无法从 Hyper V 虚拟机上的 Web 浏览器访问 LDAPS

redis - Redis 是 SignalR 在 SQL Server 上横向扩展的更好选择吗?每个都支持故障转移吗?

java - Java 的分散式集群库

amazon-web-services - RedShift 节点故障转移