2016-02-29 9 views
1

Я хочу создать виртуальную машину с заданием.Работа не создает VM

cls 
if (-not (Get-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue)) { 
    Add-PSSnapin VMware.VimAutomation.Core | Out-Null 
} 

#import VM settings 
$VMs = Import-CSV '...\Install_AIO_automated\Data.csv' -UseCulture 

Write-Host "Current connections:" 
$Global:DefaultVIServers.count 

$ScriptBlocky = { 
    Param($VM) 

    Write-Host "Begin" 
    $server += $VM.vs_xstream__vc_host 
    $connection = Connect-VIServer $VM.vs_xstream__vc_host -User $VM.vs_xstream__vc_admin -Password $VM.vs_xstream__vc_password 
    $connection.SessionId 

    Write-Host $connection.SessionId 
    Write-Host $OSspec 

    $OSspec = 'BasicLinuxSpec' 

    # Selecting random Cluster for VMs deployment 
    Write-Host $VM.Cluster 
    Write-Host $VM.vs_xstream__vc_host 
    $ClusterHoste = Get-Cluster $VM.Cluster -server $VM.vs_xstream__vc_host | Get-VMHost | Get-Random 
    #$ClusterHost = Get-Cluster $VM.Cluster -server $VM.vs_xstream__vc_host | Get-VMHost | Where{$_.ConnectionState -eq "Connected"} | Get-Random 
    Write-Host $connection.SessionId 
    Write-Host $ClusterHoste 

    Write-Host "" 
    $domain_name = $VM.FQDN.split('.') 
    Write-Host $domain_name 
    # Create new OS Customization Specification template for further usage 

    New-OSCustomizationSpec -Name $OSspec -Domain ("{0}.{1}" -f $domain_name[1],$domain_name[2]) -DnsServer $VM.DNS,$VM.DNS2 -NamingScheme VM -OSType Linux -Server $VM.vs_xstream__vc_host 
    # Starting VMs customization with previously created specification 
    $OSspec 

    Write-Host "TRY" 
    Get-OSCustomizationSpec $OSspec -Server $VM.vs_xstream__vc_host | Get-OSCustomizationNicMapping | Set-OSCustomizationNicMapping -IpMode UseStaticIp -IpAddress $VM.Ipaddress -SubnetMask $VM.NetMask -DefaultGateway $VM.Gateway 

    Write-Host "VM create:" 
    Write-Host $OSspec 
    Write-Host $ClusterHost 

    New-Vm -VMhost $ClusterHost -Name $VM.vm_name -Server $VM.vs_xstream__vc_host -Datastore $VM.Datastore -Template $VM.Template -Description $VM.Description -DiskStorageFormat "Thin" -OScustomizationSpec $OSspec 

    # Remove Customization Specification template 
    Remove-OSCustomizationSpec $OSspec -Server $VM.vs_xstream__vc_host -confirm:$false 

    Write-Host "Done" 
} 

foreach ($VM in $VMs) { 
    if ($VM.Use -eq 1) { 
     $session = $global:DefaultVIServer | %{ $_.sessionsecret } 
     $vcserver = $global:DefaultVIServer.ServiceUri.Host 

     $session 
     $vcserver 
     Write-Host "start script" 

     Start-Job -ScriptBlock $ScriptBlocky -ArgumentList $VM 

     Write-Host "end script" 

     Get-Job | Wait-Job 
    } 
} 

Результаты:

Current connections: 
1 

22f81178669d314003bc75206e3ffad384ee2568 

10.xx.xx.xx (IP address) 

start script 


Id  Name   PSJobTypeName State   HasMoreData  Location  
--  ----   ------------- -----   -----------  -------- 
46  Job46   BackgroundJob Running  True   localhost 

end script 

2  Job2   BackgroundJob Completed  False   localhost 
.. 

46  Job46   BackgroundJob Completed  True   localhost

ничего не происходит, не VM не была создана, но если я запускаю эту команду:

& $ScriptBlocky -VM $VM 

ВМ будет создан.

Кто-нибудь видит мою ошибку или то, что я делаю неправильно?

+0

ОК, ранее я пытался делать то же самое с потоками и не работал, а теперь выполнял задания. выхода: запустить скрипт 20 Job20 BackgroundJob Запуск Истинного локальные конечного сценария но Get_job дает мне это. Job20 BackgroundJob Запуск True localhost выглядит так, как скрипт не может что-то делать. после просмотра вывода с Receive-Job показывает эту строку: New-OSCustomizationSpec -Name $ OSspec -Domain "xxxx.local" -DnsServer $ VM.DNS, $ VM.DNS2 -NamingScheme VM -OSType Linux -Server $ VM.vs_xstream__vc_host никаких ошибок. не знаю, почему. – vencrena

+0

Я думаю, проблема может быть с сеансами ... – vencrena

ответ

0

это код им с помощью создания виртуальных машин будет мой код

$create = New-VM -Name $VM01Name -Template $VM01Template -Location $VM01Folder -VMHost $VM01Host -ResourcePool $VM01Resource -Datastore $VM01DiskDatastore01 -OSCustomizationSpec $VM01OSCustom -RunAsync -Confirm:$false 

посмотрите, чтобы увидеть, если это поможет

+0

Это правильный вызов, но проблемы там нет. – vencrena

0

То же решение в (Thread не создавать несколько виртуальных машин (выпуск сеанса)) вопрос.

Решение: * Создайте все соединения с vCenter перед всеми другими действиями, чтобы соединение было стабильным. например:

# Iterate and connect to all vCenters so connections to them will be stable and read only 
ForEach($VM in $VMs) 
{ 
    If ($VM.Use -eq 1) 
    { 
     If($server.Contains($VM.vs_xstream__vc_host) -eq $FALSE) 
     { 
     $server += $VM.vs_xstream__vc_host 
     $AllSessions += Connect-VIServer $VM.vs_xstream__vc_host -User $VM.vs_xstream__vc_admin -Password $VM.vs_xstream__vc_password -NotDefault 
     Write-Host "Connected to: " $VM.vs_xstream__vc_host 
     } 
    } 
} 

В конце концов работа сделана я просто отключиться от всех сеансов

# Disconnect all created sessions 
ForEach($item in $server) 
{ 
    Write-Host ("Disconnecting from {0}...." -f ($item)) 
    Disconnect-VIServer $item -Confirm:$false 
} 

Теперь скрипт работает отлично и создает виртуальную машину в разные или же VCENTER. если у кого-нибудь возникнут какие-либо проблемы с этим, дайте мне знать.

 Смежные вопросы

  • Нет связанных вопросов^_^