PRO で生成されるスクリプト(サンプル)


$hostName = 'JUNICHIA03.example64.jp'; $serverName = 'SCVMM.example64.jp'; $ProtipId = '23B785AC-2C4C-4C8A-A7DB-2E54A5E9A475';
 $vmErrorCode = '1';


 function new-array { $args } 


 function FailGenericError { Set-PROTip -PROTipId $args[0] -LastError $args[1] -TipStatus Failed; } 


 function FailHostNotFound { $params = new-array '{2D6FA041-3A11-C4A4-0870-43D3DA2A350E}' $args[1];
 Set-PROTip -PROTipId $args[0] -LastErrorOpsMgrString $params -TipStatus Failed; } 


 function FailNoVMFound {
 switch($args[1]) { 
 1 { $params = new-array '{7909730C-BD3A-9639-75A4-C2CAB421E365}' $args[2]; } 
 2 { $params = new-array '{75DE3243-067A-7A38-369A-72E5516D3427}' $args[2]; } } 
 Set-PROTip -PROTipId $args[0] -LastErrorOpsMgrString $params -TipStatus Failed; }


 function FailNoVMToMigrate {
 $params = new-array '{2BFEAC02-0B20-13B6-868E-90DBD1BE9325}' $args[1];
 Set-PROTip -PROTipId $args[0] -LastErrorOpsMgrString $params -TipStatus Failed; } 


 function FailNoHostToMigrateTo {
 $params = new-array '{D33420DA-D858-F885-7C6E-B60F5EF4C990}' $args[1];
 Set-PROTip -PROTipId $args[0] -LastErrorOpsMgrString $params -TipStatus Failed; } 


 function FailInvalidErrorCode { $params = new-array '{CA516E68-8046-9013-25D6-15B8A512BD0C}';
 Set-PROTip -PROTipId $args[0] -LastErrorOpsMgrString $params -TipStatus Failed; } 


 function Main {
  $Error.Clear(); 
 $serverObj = get-vmmserver -computerName $serverName;
 if( $Error.Count -ne 0) { FailGenericError $ProtipId $Error[0]; return; } 


  Set-PROTip -PROTipId $ProtipId -TipStatus Running; 
 $hostobj = get-vmhost -computername $hostName -vmmserver $serverObj; 
 if( $hostobj -eq $null ) { FailHostNotFound $ProtipId $hostName; return; } 


 $allvms = $hostobj | Get-VM; 
 if(($hostobj.VMs -eq $null) -or ($hostobj.VMs.Count -eq 0)) { FailNoVMFound $ProtipId $vmErrorCode $hostName; return; } 


 $candidateVMs = @(); 
 foreach( $cVM in $hostobj.VMs | where { $_.Status -eq 'Running' }  | where { $_.ExcludeFromPRO -ne $TRUE} ) { $candidateVMs = $candidateVMs + $cVM; } 


 if($candidateVMs.Count -eq 0) { FailNoVMToMigrate $ProtipId $hostName; return; }  


 switch($vmErrorCode) {
 1 { foreach( $tVM in ($candidateVMs | sort PerfCPUUtilization -Descending) ) {  $selectedVM = $tVM;  break;  }  if( $selectedVM.PerfCPUUtilization -eq 0 ) { FailNoVMFound $ProtipId $vmErrorCode $hostName; return; }  } 
 2 { foreach( $tVM in ($candidateVMs | sort Memory -Descending) ) {  $selectedVM = $tVM;  break;  } if( $selectedVM.Memory -eq 0 ){  FailNoVMFound $ProtipId $vmErrorCode $hostName; return; }  }  default { FailInvalidErrorCode $ProtipId; return;  }  }   $isQuickMigration = $false;  $hostList = @(); $allhosts = Get-VMHost -VMHostGroup $hostobj.VMHostGroup;   if(($hostobj.HostCluster -ne $null ) -and ($hostobj.HostCluster.Nodes.Count -ne 1)){  foreach ( $tmpHost in  $hostobj.HostCluster.Nodes ) {  if( $tmpHost.Name -ne $hostobj.Name ) {  $hostList = $hostList + $tmpHost;  $isQuickMigration = $true;   }  }  }  else {  foreach ( $tmpHost in  $hostobj.VMHostGroup.Hosts ) {  if( $tmpHost.Name -ne $hostobj.Name ) {  $hostList = $hostList + $tmpHost;  }  }  }  if(($hostList -eq $null) -or ($hostList.Count -eq 0)) { FailNoHostToMigrateTo $ProtipId $hostName; return; } 


$vmHostRatings = @(); $vmHostRatings = $vmHostRatings + ( @(Get-VMHostRating -VM $selectedVM -VMHost $hostList -IsMigration -UseDefaultPath) | Sort-Object -property Rating -descending | where { $_.Rating -ne 0 } ); 


 if ( $vmHostRatings.Count -eq $null) { FailNoHostToMigrateTo $ProtipId $hostName; return; } 


 $selectedVMHost = $hostList | where { ($_.Name -eq $vmHostRatings[0].VMHost.Name) };


 if($selectedVMHost -eq $null) { FailNoHostToMigrateTo $ProtipId $hostName; return; }


 $Error.Clear(); 
 if($isQuickMigration) { Move-VM -VM $selectedVM -VMHost $selectedVMHost -PROTipId $ProtipId;  }  else { 
$defaultPaths = @($selectedVMHost.VMPaths | where { $_.StartsWith($vmHostRatings[0].PreferredVolume) -eq 1 }); 
 if($defaultPaths[0] -eq $null) { FailNoHostToMigrateTo $ProtipId $hostName; return; } 


 Move-VM -VM $selectedVM -VMHost $selectedVMHost -Path $defaultPaths[0] -PROTipId $ProtipId;  } 


 if( $Error.Count -ne 0) { FailGenericError $ProtipId $Error[0]; return; } 


 Set-PROTip -PROTipId $ProtipId -TipStatus Resolved; }


 Main;

Comments (1)

  1. 匿名 より:

    仮想マシンを操作するサンプルスクリプトが無いかなぁと思っていたところ、面白いサンプルがあったのでご紹介します。 これは、SCVMM 2008 と OpsMgr 2007 の連携機能である PRO(Performance

Skip to main content