共用方式為


指令碼監視器和規則

 

適用於: System Center 2012 R2 Operations Manager, System Center 2012 - Operations Manager, System Center 2012 SP1 - Operations Manager

當必要的資料無法透過事件或效能計數器等標準方式收集時,就會使用監視指令碼。 指令碼從資訊收集代理程式上的資料並使用 MOM 建立屬性包。安裝與 ScriptAPI 物件 Operations Manager 代理程式。

監視指令碼可能會寫入任何可以存取 MOM 的指令碼語言。安裝所有的 ScriptAPI 物件 Operations Manager 代理程式。 您可以使用 Operations 主控台來建立以 VBScript 或 JScript 指令碼。 若要使用 Windows PowerShell 指令碼中,您必須使用其他撰寫工具例如 System Center Operations Manager 2007 R2 撰寫的主控台MP Author

屬性包

監視指令碼會傳送任何輸出資料的屬性包以便在運算式中評估監視器或對應到效能資料或事件收集規則。 屬性包是一組每個都有一個名稱的值。 雖然最好使用特定值的描述性名稱可被指派任何名稱。 屬性包只存在工作流程的存留期間。 工作流程執行時,下一次指令碼會執行並使用新的值建立新的屬性包。

一個屬性包有任何數字的值,不過整組資料不能超過 4 MB。 大部分的指令碼只需要一些值到目前為止在這項限制為總大小。 沒有要由工作流程使用的所有值的需求。

指令碼會建立在 MOM 中使用 CreatePropertyBag 方法的屬性包。ScriptAPI 物件。 工作流程會使用從屬性包會使用下列語法的 $Data 變數值:

$Data/Property[@Name="PropertyName"]

比方說,建立效能資料的指令碼可能會建立具有下表中的值的屬性包。 下表顯示指令碼和對應的 $Data 變數會用來將屬性包資料對應至效能資料所建立之值的名稱。

屬性包值名稱

範例值

變數

ObjectName

大小寫須相符

$Data/Property[@Name='ObjectName']$

CounterName

MyCounter

$Data/Property[@Name='CounterName']$

執行個體名稱

MyInstance

$Data/Property[@Name='InstanceName']$

10

$Data/Property[@Name='Value']$

指令碼結構

下列程式碼顯示範例監視指令碼以說明監視指令碼的基本結構。 這個範例指令碼具有下列特性。

  • 接受引數執行指令碼的電腦名稱] 和 [應用程式的位置路徑。

  • 會建立名為電腦名稱、 InstanceName 和 PerfValue 值的屬性包。

sComputerName = WScript.Arguments(0) 
sApplicationPath = WScript.Arguments(1)

Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()

oBag.AddValue "ComputerName", sComputerName
oBag.AddValue "InstanceName", "MyInstance"
oBag.AddValue "Value", 1.0

oAPI.Return(oBag)

此處所討論的指令碼的每個區段的詳細資料。

sComputerName = WScript.Arguments(0) 
sApplicationPath = WScript.Arguments(1)

前兩行指令碼接受引數。 這些值就應該要在規則或監視器執行指令碼的引數參數中。 指令碼可以使用任何數目的引數所需的指令碼的邏輯。

Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()

下面兩行建立屬性包。 這幾行也會在大部分的監視指令碼中不變。 指令碼的其餘部分的主要用途會使用從代理程式電腦收集的資料將值新增至屬性包。

oBag.AddValue "ComputerName", sComputerName
oBag.AddValue "InstanceName", "MyInstance"
oBag.AddValue "Value", 1.0

屬性包建立之後,任意數目的值可以加入至它。 您執行這項操作與 AddValue 方法上使用的項目名稱的屬性包物件接著它的值。 此範例會使用明確的值。 在實際的監視指令碼中額外的程式碼會預期,會從要包含在這些值中的代理程式電腦收集資訊。

oAPI.Return(oBag)

所有值都會都加入至屬性包之後,它會傳回至工作流程。 下面這行是必要的並沒有它的屬性包會被捨棄指令碼結束時。 當指令碼會建立只有單一屬性包只會使用這個方法。 如需有關使用這項策略時傳回多個屬性包與條件的指令碼的詳細資訊,請參閱 cookdown 的 區段 System Center Operations Manager 2007 R2 撰寫指南

指令碼引數

大部分的指令碼會使用值時執行的指令碼的指令碼傳送從命令列引數。 使用引數可讓單一指令碼要用於多個案例而不需修改指令碼本身。

在 [監視指令碼引數是關鍵因為可能有指令碼需要,也會根據每個代理程式執行指令碼的資訊。 監視器或規則的目標物件的任何屬性可以用於指令碼引數的值。 這個值是個別解決每個代理程式上同時執行的指令碼。

從操作主控台中存取引數是 參數 ] 按鈕。 個別引數應該以它們的指令碼中存取的順序中的空格分隔。 這是相同的命令列上所執行的指令碼會提供命令列。

每個引數可以是明確的值或 $Target 變數在目標物件上使用屬性的值。 執行指令碼時,讓指令碼提供命令列上的解析值會解析任何 $Target 變數。 如果您知道正確的語法可以輸入 $Target 變數中。 其實不過若要選取從屬性 目標 ] 按鈕會列出所有目標物件和其父系的屬性。

System_CAPS_important重要事項

若有任何 $Target 變數可能解析為包含空格的值,應使用引號將它括住。 如果值包含空格而不需要引號,然後它會被視為由指令碼兩個不同的引數。 引號可確保值視為單一引數。 如果您選取的屬性從 目標 ] 功能表上,它不會為您包括引號。 您需要輸入這些中選取屬性之後。

比方說,範例指令碼稍早所預期的電腦名稱] 和 [應用程式路徑的兩個引數。 假設這類別所裝載目標的規則或監視器的一部分 Windows 電腦 類別、 電腦名稱無法擷取自 PrincipalName 屬性。 如果應用程式路徑上的目標類別的屬性,然後引數可能看起來類似下列的範例。 因為這樣無法解決的值包含空格,請注意引號括住 ApplicationPath 屬性。

$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$ "$Target/Property[Type="MyApp.MyClass"]/ApplicationPath$"

假設您為資料庫指令碼的名稱 MyScript.vbs, ,電腦名稱是 MyServer01, ,和應用程式路徑是 C:\Program Files\Contoso\My Application, ,都會執行這個指令碼就是命令列:

MyScript.vbs MyServer01 "C:\Program Files\Contoso\My Application"

指令碼監視器和規則主題