Я создаю процесс автоматической сборки в Powershell, и мне нужно создать виртуальную машину со статическим IP-адресом. Виртуальная машина создается сценарием, и ей назначается IP-адрес DHCP. Я могу запросить хост Hyper-V, чтобы получить IP-адрес вновь созданной виртуальной машины с Get-NetAdapter
так что я могу удаленно к нему с Invoke-Command -ComputerName <ip_address>
. Пока все хорошо. Следующая строка в моем сценарии PowerShell затем изменяет IP-адрес удаленной виртуальной машины на New-NetIPAddress
но Invoke-Command
cmdlet истекает через 4 минуты.
У меня вопрос, есть ли лучший способ изменить IP удаленно? Могу ли я установить тайм-аут и как-нибудь изящно с ним справиться? На данный момент он сидит там 4 минуты, а затем выдает ошибку подключения.
РЕДАКТИРОВАТЬ: Если я изменю IpAddress в задании, как предложил Джеральд, как мне передать параметры в задание? Мой текущий код для изменения IP выглядит так:
Invoke-Command -ComputerName $TempIpAddress -Credential $cred -scriptblock {param ($IpAddress, $DefaultGateway) Get-NetIpAddress | Where-Object {$_.InterfaceAlias -match "Ethernet" -and $_.AddressFamily -eq "IPv4"} | New-NetIPAddress –IPAddress $IpAddress –PrefixLength 24 -DefaultGateway $DefaultGateway} -ArgumentList $NewIpAddress, $DefaultGateway
РЕДАКТИРОВАТЬ2: Я пробовал это, работа создается, но ничего не делает. И когда я бегу Get-Job
ничего не возвращается.
Invoke-Command -ComputerName $TempIpAddress -Credential $cred -scriptblock {Start-Job -ScriptBlock {param ($IpAddress, $DefaultGateway) Get-NetIpAddress | Where-Object {$_.InterfaceAlias -match "Ethernet" -and $_.AddressFamily -eq "IPv4"} | New-NetIPAddress –IPAddress $IpAddress –PrefixLength 24 -DefaultGateway $DefaultGateway} -ArgumentList $NewIpAddress, $DefaultGateway}
В настоящее время я не могу это проверить, но что-то вроде этого должно работать:
Invoke-Command -ComputerName <ip_address> -ScriptBlock { Start-Job -ScriptBlock { New-NetIPAddress ... } }
Это должно запустить командлет в фоновом режиме, что позволит вам корректно отключиться. Затем вы должны запустить следующие команды на новом IP-адресе.