我创建了一个脚本,可以在vCenter中克隆VM,重命名它,然后在VM启动后更改VM的IP(来自模板的IP)。我通过提示询问IP应该是什么来做到这一点。唯一的问题是,我需要输入两次所需的IP。一旦标记VM,然后再次更改框的IP。
是否有一种方法可以执行此处输入的变量'$ NewVMIP':
Add-PSSnapin VMware.VimAutomation.Core
Connect-VIServer -Server vcenter01 -User myusername -Password Password1
Start-Sleep -s 6
$TemplateVM = "Windows QA - 172.30.30.110 - TEMPLATE"
$NewVMIP = Read-Host "Please input IP of new VM"
$NewVMFor = Read-Host "Please input Who This VM is For?"
$NewVMDate = Read-Host "Please input todays date"
$NewVMName = "Windows QA - $NewVMIP - $NewVMFor - $NewVMDate"
New-VM -Name $NewVMName -VM $TemplateVM -VMHost "esx01.coname.local"
Move-VM -VM $NewVMName -Destination Testing
Start-VM -VM $NewVMName
Start-Sleep -s 200
到剧本的第二部分:
$username = "vmadmin"
$password = "Password1"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr
Invoke-Command -ComputerName 172.30.30.110 -ScriptBlock {
$NewVMIP = Read-Host "Enter IP"
$subnet = "255.255.255.0"
$gateway = "172.30.30.1"
netsh int ip set address "Local Area Connection" static "$NewVMIP" "255.255.255.0" "172.30.30.1"
} -credential $cred
所以我不必第二次输入IP?
我认为这与在VM / vCenter而不是远程位置上运行的脚本的第二部分有关,因此变量不会被传递。我试图指定一个全局变量,如$ Global:NewVMIP,但这不起作用
提前感谢您的帮助。
马克
答案 0 :(得分:1)
您的第二个脚本中缺少的一件重要事情是您没有将$NewVMIP
作为参数传递。在远程系统$NewVMIP
上调用scriptblock时,$null
。
粗略猜测你需要做这样的事情:
Invoke-Command -ComputerName 172.30.30.110 -ScriptBlock {
param($ip)
$NewVMIP = Read-Host "Enter IP"
$subnet = "255.255.255.0"
$gateway = "172.30.30.1"
netsh int ip set address "Local Area Connection" static "$ip" "255.255.255.0" "172.30.30.1"
} -credential $cred -ArgumentList $NewVMIP
答案 1 :(得分:0)
Set-VMGuestNetworkInterface可能是另一种给猫皮肤的方法吗?
或者更好的是,通过Set-OSCustomizationNicMapping使用sysprep更改IP地址。