从远程服务器检索vhdx路径

里森维塞姆

嗨,我正在尝试从远程主机服务器检索指定的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或为空。提供一个不为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

有谁知道为什么在变量中指定它后不起作用

拉纳迪普·杜塔

您需要了解如何在脚本块内传递参数。当您尝试在脚本块中传递值时,作用域是不同的。结果,$ VMname在您的第一条语句中变为空。请将您现有的Invoke-command语句更改为以下语句:

Invoke-Command -ComputerName $hostserver -ScriptBlock {Param([string]$vmname)(Get-VMHardDiskDrive -VMName $vmname)} -ArgumentList $vmname

另外,我建议您阅读有关argumentlistPowershell的信息,以防万一invoke-command

希望能帮助到你。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章