2

您好,我在使用 Invoke-VMScript cmdlet 时遇到了一些问题,我制作了一个脚本来创建虚拟 Windows 7 机器,然后在机器上执行一些 powershell 脚本,例如将计算机重命名为正确的名称。

但如果我跑

Invoke-VMScript -ScriptText {(Get-Wmiobject -Class Win32_ComputerSystem).Rename($strName)}

$strName 变量没有得到解决,有人知道如何做到这一点吗?

4

4 回答 4

0

我没有方便重命名的客人,但在LucD 之后,这是一个使用变量为 scriptText 建立输入的工作示例:

$svcName = "vmtools"
$guestScript = 'get-wmiObject win32_service | where {$_.name -eq "' + $svcName + '"}'
Invoke-VMScript -vm myVMname -scriptText $guestScript
于 2013-09-13T17:50:02.583 回答
0
#Rename Computer command line script
$renamecomputer = "wmic path win32_computersystem where ""Name='%computername%'"" CALL     rename name='$VM'"
#Send command line script to GuestOS
Invoke-VMScript -VM $VM -GuestUser $GU -GuestPassword $GP -ScriptType Bat -ScriptText   $renamecomputer

这就是我用于重命名脚本的内容。效果很好

于 2013-10-28T17:42:54.613 回答
0

我得到了这个工作:

Invoke-VMScript -VM $vm -ScriptText "(Get-WmiObject win32_computersystem).rename(""${vmName}"")"
于 2015-02-18T15:57:43.487 回答
0

您没有正确确定变量的范围。这是一个可以在控制台中尝试的简单实验:

PS C:\> $test = "Resolve!"
PS C:\> $test
Resolve!

# This scriptblock will not resolve the variable.
PS C:\> {$test}
$test

# This scriptblock will resolve the variable.
PS C:\> [scriptblock]::Create($test)
Resolve!

Invoke-VMScript 的文档建议您应该-ScriptText作为字符串而不是ScriptBlock 传递。所以在这种情况下,我们可以模仿示例 2:

$string = "(Get-Wmiobject -Class Win32_ComputerSystem).Rename($strName)"
Invoke-VMScript -ScriptText $string

包含的变量" "将被解析。

于 2013-09-11T13:55:05.987 回答