嗨,我正在尝试从远程主机服务器中检索指定的vmname的vhdx
脚本的一部分
$pth="C:\path\resize-vm"
$list=gc $pth\list-host.txt
foreach ($hostserver in $list) {
$vm=(Invoke-Command -ComputerName $hostserver -ScriptBlock {Get-VM}).VMName
Write-Host -NoNewline " here the vm installed in " $hostserver `r`n $vm
$vmname=Read-Host -Prompt "please chose a vmname to resize "
#the issue in the last line
$pathvhd=Invoke-Command -ComputerName $hostserver -ScriptBlock {(Get-VMHardDiskDrive -VMName $vmname).path}
当我启动此命令$vmname="dc-kozhan"
时
我收到此错误
无法验证参数“ VMName”上的参数。参数为空 或为空。提供一个不为null或为空的参数,然后尝试 再次命令。 + CategoryInfo:InvalidData:(:) [Get-VMHardDiskDrive],ParameterBindingValidationException + FullyQualifiedErrorId:ParameterArgumentValidationError,Microsoft.HyperV.PowerShell.Commands.GetVMHardDiskDrive 命令 + PSComputerName:h-uludag-3
但是当我按字面意义指定dc-kozhan
时
PS C:\Users> Invoke-Command -ComputerName $hostserver -ScriptBlock {(Get-VMHardDiskDrive -VMName "DC-KOZAHAN")
.path}
V:\DC-KOZAHAN\DC-KOZAHAN-SYSTEM.vhdx
V:\DC-KOZAHAN\DC-KOZAHAN-DIRECTORY.vhdx
V:\DC-KOZAHAN\DC-KOZAHAN-SYSVOL.vhdx
V:\DC-KOZAHAN\DC-KOZAHAN-BACKUP.vhdx
没有人知道为什么在变量中指定它时不起作用
答案 0 :(得分:0)
您需要了解如何在脚本块内传递参数。当您尝试在脚本块中传递值时,作用域是不同的。结果, $ VMname 在您的第一条语句中为空。
请将您现有的Invoke-command
语句更改为以下语句:
Invoke-Command -ComputerName $hostserver -ScriptBlock {Param([string]$vmname)(Get-VMHardDiskDrive -VMName $vmname)} -ArgumentList $vmname
此外,我建议您阅读argumentlist
情况下Powershell中的invoke-command
希望有帮助。