# assignVmsToCloud.ps1
# version 0.02
# The following function assigns a guest VM into a 'cloud' in Virtual Machine Manager
#$vmNames=Get-Content ~\Desktop\computernames.txt
$vmsList=@'
TESTVM1
TESTVM2
'@
$cloudsList=@(
'DEV'
'QA'
'Stage'
'Prod'
)
$rolesList=@('Dev Admins','QA Admins','Stage Admins','Prod Admins')
$vmmServer=$env:computername
function assignVMsToCloud{
param(
$vmNames='testVm',
$cloudsList=@('Dev','QA','Stage','Prod'),
$rolesList=@('Dev Admins','QA Admins','Stage Admins','Prod Admins'),
$vmmServer='localhost'
)
function assignVmToCloud{
param(
$vmName='testVm',
$cloudAssign='Test',
$roleName='Administrators',
$vmmServer='localhost'
)
$ErrorActionPreference='Stop'
try{
$null=import-module virtualmachinemanager
$vm=Get-SCVirtualMachine -Name $vmName -VMMServer $vmmServer
$cloud=Get-SCCloud -Name $cloudAssign -VMMServer $vmmServer
$userRole=Get-SCUserRole -Name $roleName -VMMServer $vmmServer
$jobGroup=[System.Guid]::NewGuid().Guid
if(!$vm){
write-warning "Unable to find VM named $vmName on VMM Server $vmmServer"
return $false
}else{
if($vm.Cloud.Name -eq $cloudAssign){
write-host "$vmName has already been assigned to Cloud $cloudAssign"
}else{
$null=Set-SCVirtualMachine -VM $vm -Cloud $cloud
}
$null=Set-SCUserRoleQuota -Cloud $cloud -JobGroup $jobGroup
$null=Set-SCUserRoleQuota -Cloud $cloud -JobGroup $jobGroup -QuotaPerUser
$null=Add-SCUserRolePermission -Cloud $cloud -JobGroup $jobGroup -AllowLocalAdmin -Checkpoint -CheckpointRestoreOnly -DeployFromTemplateOnly -Deploy -DeployShielded -PauseAndResume -RemoteConnect -Remove -Save -Shutdown -Start -Stop -Store -ManageAzureProfiles
$null=Grant-SCResource -Resource $vm -JobGroup $jobGroup
$null=Set-SCUserRole -UserRole $userRole -JobGroup $jobGroup
$vm=Get-SCVirtualMachine -VMMServer $vmmServer -Name $vmName
if($vm.Cloud.Name -eq $cloudAssign){
write-host "$vmName has been assigned to Cloud $cloudAssign successfully" -ForegroundColor Green
return $true
}else{
write-host "$vmName has NOT been assigned to Cloud $cloudAssign" -ForegroundColor Red
return $false
}
}
}catch{
write-warning $_
return $false
}
}
function pickItem($list){
do {
try {
$flag = $true
clear-host
for($i=0;$i -lt $list.count; $i++){
write-host "$i`: $(($list[$i]|out-string))"
}
[int]$pick=Read-Host -Prompt "`n--------------------------------------------------------`nPlease type the number corresponding to the desired item`n--------------------------------------------------------"
}catch{
$flag = $false
}
}
until ($pick -lt $list.count -and $pick -ge 0 -and $flag)
$pickIndex=$pick
$pickedItem=$list[$pickIndex]
clear-host
write-host "Selected item:`n--------------------------------------------------------`n$($pickedItem|out-string)"
return $pickedItem
}
$cloudAssign=pickItem $cloudsList
$roleName=pickItem $rolesList
if($vmnames){
$results=[hashtable]@{}
foreach($vmname in $vmNames){
$result=assignVmToCloud $vmName $cloudAssign $roleName $vmmServer
$results+=@{$vmName=$result}
}
}else{
write-warning "`$vmNames variable is empty - cannot proceed."
}
return $results
}
$vmNames=@($vmsList -split "`n" -replace "\..*$")
assignVMsToCloud $vmNames $cloudsList $rolesList $vmmServer
# assignVmsToCloud.ps1
# version 0.01
# The following function assigns a guest VM into a 'cloud' in Virtual Machine Manager
$vmNames=@(
'guest-vm1',
'guest-vm2',
'guest-vm3'
)
$cloudAssign='DEV'
$vmmServer=$env:computername
$roleName='Developers'
function assignVmsToCloud{
param(
$vmName='testVm',
$cloudAssign='Test',
$roleName='Administrators',
$vmmServer='localhost'
)
$ErrorActionPreference='Stop'
try{
$null=import-module virtualmachinemanager
$vm=Get-SCVirtualMachine -Name $vmName -VMMServer $vmmServer
$cloud=Get-SCCloud -Name $cloudAssign -VMMServer $vmmServer
$userRole=Get-SCUserRole -Name $roleName -VMMServer $vmmServer
$jobGroup=[System.Guid]::NewGuid().Guid
if(!$vm){
write-warning "Unable to find VM named $vmName on VMM Server $vmmServer"
return $false
}elseif($vm.Cloud.Name -eq $cloudAssign){
write-host "$vmName has already been assigned to Cloud $cloudAssign" -ForegroundColor Green
return $true
}else{
$null=Set-SCVirtualMachine -VM $vm -Cloud $cloud
$null=Set-SCUserRoleQuota -Cloud $cloud -JobGroup $jobGroup
$null=Set-SCUserRoleQuota -Cloud $cloud -JobGroup $jobGroup -QuotaPerUser
$null=Add-SCUserRolePermission -Cloud $cloud -JobGroup $jobGroup -AllowLocalAdmin -Checkpoint -CheckpointRestoreOnly -DeployFromTemplateOnly -Deploy -DeployShielded -PauseAndResume -RemoteConnect -Remove -Save -Shutdown -Start -Stop -Store -ManageAzureProfiles
$null=Grant-SCResource -Resource $vm -JobGroup $jobGroup
$null=Set-SCUserRole -UserRole $userRole -JobGroup $jobGroup
$vm=Get-SCVirtualMachine -VMMServer $vmmServer -Name $vmName
if($vm.Cloud.Name -eq $cloudAssign){
write-host "$vmName has been assigned to Cloud $cloudAssign successfully" -ForegroundColor Green
return $true
}else{
write-host "$vmName has NOT been assigned to Cloud $cloudAssign" -ForegroundColor Red
return $false
}
}
}catch{
write-warning $_
return $false
}
}
######## Set VM as defined ########
$results=[hashtable]@{}
foreach($vmname in $vmNames){
$result=assignVmsToCloud $vmName $cloudAssign $roleName $vmmServer
$results+=@{$vmName=$result}
}
######## Dynamically Gather VM by Keywords and assign to cloud ########
$keyword='stg'
$cloudAssign='STAGE'
$vms=.{$null=import-module virtualmachinemanager;get-vm}
$targetVms=$vms.Name|?{$_ -like "*$keyword*"}
$results=[hashtable]@{}
foreach($vmName in $targetVms){
$result=assignVmsToCloud $vmName $cloudAssign $roleName $vmmServer
$results+=@{$vmName=$result}
}
Categories: