自动化 – Service Management Automation – Utility Runbook 聚焦 – VMM 自定义属性管理

原文地址:https://blogs.technet.com/b/privatecloud/archive/2013/08/27/automation-service-management-automation-utility-runbook-spotlight-vmm-custom-property-management.aspx

大家好!

如今,项目的复杂度不断攀升,需要满足各种先决条件。这篇文章自动化 – Service Management Automation Runbook 聚焦 按优先级启动虚拟机(第 1 部分) 就是其中一个实例。按照自动化 – Service Management Automation Runbook 聚焦 按优先级启动虚拟机(第 1.5 部分) 中所述的方法,我将会通过 VMM 自定义属性重新介绍数据存储概念。在那篇文章中,我说明了创作本文的需求(实际先决条件),并承诺举例说明以下任务:

  • 创建 VMM 自定义属性
  • 更新 VMM 自定义属性值
  • 获取 VMM 自定义属性值
  • 删除 VMM 自定义属性值
  • 删除 VMM 自定义属性

在本文中,我将会履行这项承诺。


示例 SMA Runbook 断开!

以下 PowerShell v3 工作流示例已在 SMA 中实现并测试。每个示例均可从此处进行复制/粘贴,也可从 TechNet Gallery 资源(可在下面找到相应的链接)中提供的 PS1 文件导入。

创建 VMM 自定义属性

                       

001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 workflow Create-VMMCustomProperty { param ( [PSCredential]$Creds, [string]$VMMServer, [string]$CustomPropertyScope, [string]$CustomPropertyName ) InlineScript { Import-Module virtualmachinemanager Get-VMMServer -ComputerName $Using:VMMServer | Out-Null New-SCCustomProperty -Name $Using:CustomPropertyName -AddMember $Using:CustomPropertyScope } -PSComputerName $VMMServer -PSCredential $Creds }

注意此示例可在SMA-VMMCustomPropertyManagement.zip中找到,名称为Create-VMMCustomProperty.ps1

更新 VMM 自定义属性值

001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 workflow Update-VMMCustomPropertyValue { param ( [PSCredential]$Creds, [string]$VMMServer, [string]$CloudName, [string]$VMName, [string]$CustomPropertyScope, [string]$CustomPropertyName, [int]$CustomPropertyValue ) InlineScript { Import-Module virtualmachinemanager Get-VMMServer -ComputerName $Using:VMMServer | Out-Null $Cloud = Get-SCCloud -Name $Using:CloudName if ($Using:CustomPropertyScope -eq "VM") { $InputObject = Get-SCVirtualMachine -Name $Using:VMName -Cloud $Cloud } else { $InputObject = $Cloud } Get-SCCustomProperty -Name $Using:CustomPropertyName | Set-SCCustomPropertyValue -InputObject $InputObject -Value $Using:CustomPropertyValue } -PSComputerName $VMMServer -PSCredential $Creds }

注意此示例可在SMA-VMMCustomPropertyManagement.zip中找到,名称为Update-VMMCustomPropertyValue.ps1

获取 VMM 自定义属性值

001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 workflow Get-VMMCustomPropertyValue { param ( [PSCredential]$Creds, [string]$VMMServer, [string]$CloudName, [string]$VMName, [string]$CustomPropertyScope, [string]$CustomPropertyName ) InlineScript { Import-Module virtualmachinemanager Get-VMMServer -ComputerName $Using:VMMServer | Out-Null $Cloud = Get-SCCloud -Name $Using:CloudName if ($Using:CustomPropertyScope -eq "VM") { $InputObject = Get-SCVirtualMachine -Name $Using:VMName -Cloud $Cloud } else { $InputObject = $Cloud } $CustomProperty = Get-SCCustomProperty -Name $Using:CustomPropertyName Get-SCCustomPropertyValue -InputObject $InputObject -CustomProperty $CustomProperty } -PSComputerName $VMMServer -PSCredential $Creds }

注意此示例可在SMA-VMMCustomPropertyManagement.zip中找到,名称为Get-VMMCustomPropertyValue.ps1

删除 VMM 自定义属性值

001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 workflow Remove-VMMCustomPropertyValue { param ( [PSCredential]$Creds, [string]$VMMServer, [string]$CloudName, [string]$VMName, [string]$CustomPropertyScope, [string]$CustomPropertyName ) InlineScript { Import-Module virtualmachinemanager Get-VMMServer -ComputerName $Using:VMMServer | Out-Null $Cloud = Get-SCCloud -Name $Using:CloudName if ($Using:CustomPropertyScope -eq "VM") { $InputObject = Get-SCVirtualMachine -Name $Using:VMName -Cloud $Cloud } else { $InputObject = $Cloud } $CustomProperty = Get-SCCustomProperty -Name $Using:CustomPropertyName $CustomPropertyValue = Get-SCCustomPropertyValue -InputObject $InputObject -CustomProperty $CustomProperty if ($CustomPropertyValue) { Remove-SCCustomPropertyValue -CustomPropertyValue $CustomPropertyValue } } -PSComputerName $VMMServer -PSCredential $Creds }

注意此示例可在SMA-VMMCustomPropertyManagement.zip中找到,名称为Remove-VMMCustomPropertyValue.ps1

删除 VMM 自定义属性

001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 workflow Remove-VMMCustomProperty { param ( [PSCredential]$Creds, [string]$VMMServer, [string]$CustomPropertyScope, [string]$CustomPropertyName ) InlineScript { Import-Module virtualmachinemanager Get-VMMServer -ComputerName $Using:VMMServer | Out-Null Get-SCCustomProperty -Name $Using:CustomPropertyName | Remove-SCCustomProperty } -PSComputerName $VMMServer -PSCredential $Creds }

注意此示例可在SMA-VMMCustomPropertyManagement.zip中找到,名称为Remove-VMMCustomProperty.ps1


调用 Runbook

以下 PowerShell v3 工作流包含调用上述 (5) Runbook/工作流示例的所有必要脚本。事实上,由于很可能单独执行每个示例,已通过原子功能划分以下脚本代码段(并在顶部包含常见的脚本部分)。

注意以下每个特定的示例脚本调用均利用利用大量以 “:” 分隔的数据,并按特定的阵列模式布局解析(拆分)和传递。当然,您可以随心所欲地生成和传递数据,这只是我封装提供之示例的所有必要数据的方法。

脚本顶部(右尖括号),包含公用变量

001 002 003 004 005 006 007 008 workflow Execute-VMMCustomPropertyRunbooks { $Creds = Get-AutomationPSCredential -Name 'Contoso Creds' $VMMServer = "VMM01" <# Insert specific example script call here #> }

注意工作流名称 ( Execute-VMMCustomPropertyRunbooks ) 和可变用量( $Creds $VMMServer )均以示例形式提供,并可在调用下列其他脚本代码段时利用(如注释部分所示)。另外,上方 3 ( $Creds ) 利用SMA Credential Variable 。有关此类变量的详细信息,请参阅此博客文章 (参阅该文的SMA Runbook 概述部分 )。

调用 Create-VMMCustomProperty 工作流/Runbook

001 002 003 004 005 006 007 008 009 <# Calling Create-VMMCustomProperty #> $VMMCPCreateData = @("Cloud:Startup Priority Groups","VM:Startup Group") foreach($VMM in $VMMCPCreateData) { $VMMData = $VMM.Split(":") Create-VMMCustomProperty -Creds $Creds -VMMServer $VMMServer -CustomPropertyScope $VMMData[0] -CustomPropertyName $VMMData[1] }

调用 Update-VMMCustomProperty 工作流/Runbook

001 002 003 004 005 006 007 008 009 <# Calling Update-VMMCustomProperty #> $VMMCPUpdateValueData = @("Cloud:Primary Cloud:Primary Cloud:Startup Priority Groups:3","VM:Primary Cloud:spftest01:Startup Group:1","VM:Primary Cloud:spftest02:Startup Group:1","VM:Primary Cloud:spftest03:Startup Group:2","VM:Primary Cloud:spftest04:Startup Group:3") foreach($VMM in $VMMCPUpdateValueData) { $VMMData = $VMM.Split(":") Update-VMMCustomPropertyValue -Creds $Creds -VMMServer $VMMServer -CloudName $VMMData[1] -VMName $VMMData[2] -CustomPropertyScope $VMMData[0] -CustomPropertyName $VMMData[3] -CustomPropertyValue $VMMData[4] }

调用 Get-VMMCustomPropertyValue 工作流/Runbook

001 002 003 004 005 006 007 008 009 010 011 012 <# Calling Get-VMMCustomPropertyValue #> $VMMCPGetValueData = @("Cloud:Primary Cloud:Primary Cloud:Startup Priority Groups","VM:Primary Cloud:spftest01:Startup Group","VM:Primary Cloud:spftest02:Startup Group","VM:Primary Cloud:spftest03:Startup Group","VM:Primary Cloud:spftest04:Startup Group") $CustomPropertyValue = @() foreach($VMM in $VMMCPGetValueData) { $VMMData = $VMM.Split(":") $CustomPropertyValue += $VMMData[3] + " : " + $VMMData[2] + " : " + (Get-VMMCustomPropertyValue -Creds $Creds -VMMServer $VMMServer -CloudName $VMMData[1] -VMName $VMMData[2] -CustomPropertyScope $VMMData[0] -CustomPropertyName $VMMData[3]).Value } $CustomPropertyValue

注意虽然上述示例可通过 PowerShell v3 工作流直接执行,但对预览版SMA 不奏效。

由于是 “Get” 示例,似乎只能显示输出的真实内容(通过 PowerShell 执行):

image

请直接参阅下方提供的面向 PowerShell 版本的示例,该示例也适用于预览版 SMA(但是,输出缺少上方指定的格式设置):

001 002 003 004 005 006 007 008 009 010 011 <# Calling Get-VMMCustomPropertyValue (alternate) #> $VMMCPGetValueData = @("Cloud:Primary Cloud:Primary Cloud:Startup Priority Groups","VM:Primary Cloud:spftest01:Startup Group","VM:Primary Cloud:spftest02:Startup Group","VM:Primary Cloud:spftest03:Startup Group","VM:Primary Cloud:spftest04:Startup Group") foreach($VMM in $VMMCPGetValueData) { $VMMData = $VMM.Split(":") $CustomPropertyValue += Get-VMMCustomPropertyValue -Creds $Creds -VMMServer $VMMServer -CloudName $VMMData[1] -VMName $VMMData[2] -CustomPropertyScope $VMMData[0] -CustomPropertyName $VMMData[3] } $CustomPropertyValue

注意主要区别包括:删除 $CustomPropertyValue 以声明的阵列形式执行;删除分配对象结果的 $CustomPropertyValue 以外的任何内容则需要执行Get-VMMCustomPropertyValue

以下是 SMA 输出外观(区别立刻体现):

image

调用 Remove-VMMCustomPropertyValue 工作流/Runbook

001 002 003 004 005 006 007 008 009 <# Calling Remove-VMMCustomPropertyValue #> $VMMCPRemoveValueData = @("Cloud:Primary Cloud:Primary Cloud:Startup Priority Groups","VM:Primary Cloud:spftest01:Startup Group","VM:Primary Cloud:spftest02:Startup Group","VM:Primary Cloud:spftest03:Startup Group","VM:Primary Cloud:spftest04:Startup Group") foreach($VMM in $VMMCPRemoveValueData) { $VMMData = $VMM.Split(":") Remove-VMMCustomPropertyValue -Creds $Creds -VMMServer $VMMServer -CloudName $VMMData[1] -VMName $VMMData[2] -CustomPropertyScope $VMMData[0] -CustomPropertyName $VMMData[3] }

调用 Remove-VMMCustomProperty 工作流/Runbook

001 002 003 004 005 006 007 008 <# Calling Remove-VMMCustomProperty #> $VMMCPRemoveData = @("Cloud:Startup Priority Groups","VM:Startup Group") foreach($VMM in $VMMCPRemoveData) { $VMMData = $VMM.Split(":") Remove-VMMCustomProperty -Creds $Creds -VMMServer $VMMServer -CustomPropertyScope $VMMData[0] -CustomPropertyName $VMMData[1] }

下载 SMA Runbook/PowerShell v3 工作流示例

依据承诺,上述每个示例均已包含到 TechNet Gallery 资源中。

下载资料包括以下 (5) PS1 文件,呈现上述“示例 SMA Runbook 中断”部分的 (5) 示例:

  • Create-VMMCustomProperty.ps1
  • Update-VMMCustomPropertyValue.ps1
  • Get-VMMCustomPropertyValue.ps1
  • Remove-VMMCustomPropertyValue.ps1
  • Remove-VMMCustomProperty.ps1

以下 (1) PS1 文件呈现上方“调用 Runbook”部分的全部 PowerShell 代码段集合:

  • Execute-VMMCustomPropertyRunbooks.ps1

注意此PowerShell 代码段集合的各个部分均已单独注释(包括顶部的变量)。要利用任意代码段,只需修改注释标签。

在此处从TechNet Gallery 下载 SMA 示例 –VMM 自定义属性管理( w/PS v3 工作流):

BC-DLButtonDark


介绍完毕!希望这篇 VMM 自定义属性管理示例文章为大家提供 SMA Runbook/PowerShell v3 工作流实用程序中的另外几种有效小工具!

如果希望了解更多 SMA 和 PowerShell v3 工作流示例,请务必查阅以下列表(随着提供更多示例不断更新):

有关 SMA 的更多信息、提示/窍门和示例解决方案,请查阅自动化跟踪系列未来发布的其他博客文章!

敬请查阅!