次の方法で共有


System Center Operations Manager での正規表現のサポート

管理パックを作成するときに、検出とグループに正規表現の照合を含める必要がある場合があります。 モニターやルールの式の条件でパターン マッチングを行う場合にも正規表現が必要になる場合があります。

元の製品バージョン: System Center Operations Manager
元の KB 番号: 2702651

Operations Manager では、2 種類の正規表現がサポートされています。 正しい式を選択できるようにするには、作業中の要素を知っている必要があります。 グループ メンバーシップの計算フィルターと式フィルターでは、パターン マッチングに明確に異なる構文が使用されます。

グループ計算

グループ計算では、正規表現構文 PERL 使用されます。 既定では、照合では大文字と小文字が区別されませんが、XML で特殊な属性を使用して式で大文字と小文字を区別する必要があることを指定できます。 詳細については、「 SimpleCriteriaTypeを参照してください。

グループの計算は、 Group Calc モジュールを使用するたびに管理パック (MP) で確認できます。 GroupCalc式では、MatchesRegularExpression演算子を使用して、パターン マッチング式に基づいて動的グループ メンバーシップを作成します。 この演算子の実装では、MP XML で見つかった式を dbo.fn_MatchesRegularExpression SQL 呼び出し名に渡します。 この呼び出しで 0 の値が返された場合、一致は false になります。 1 の値を返す場合、一致は true になります。

重要

dbo.fn_MatchesRegularExpression SQL 呼び出し名自体では大文字と小文字が区別されるため、動的グループ メンバーシップ条件で使用されるMatchesRegularExpression演算子でも大文字と小文字が区別されます。

GroupCalc では、次の一般的な正規表現スタイル クエリの抽象式を作成する 2 つの特殊なサブ要素もサポートされています。

GroupCalc 特殊関数

GroupCalc サブ要素 MP 式 正規表現に相当する
ContainsSubstring ^*{O}.*$ (ここで、 {O} は部分文字列に置き換えられます)
MatchesWildcard ? .
MatchesWildcard * .*
MatchesWildcard # [0-9]

Note

これら 2 つの特殊な演算子のいずれかを使用する場合、評価では常に大文字と小文字が区別されます。

式フィルターの一致条件

管理パックで使用される式フィルターでは、.NET Framework 正規表現構文が使用されます。 すべての式が機能するわけではありません。 ただし、次の .NET Framework 正規表現構文要素がサポートされています。 式の評価モジュールを使用する場合は、管理パックに式フィルターが存在します。

Operations Manager の正規表現構文

構造体 Operations Manager の正規表現
任意の 1 文字 から始めます。
範囲内の文字 [ ]
範囲内にない文字 [^ ]
行頭 ^
行末 $
または |
グループ ( )
0 または 1 の一致 ?
0 個以上の一致 *
1 つ以上の一致 +
厳密に N 個の一致 {n}
少なくとも N 個の一致 {n,}
最大 N 個の一致 { , n}
N から M の一致 {n,m}
改行文字 \n
タブ文字 \t

Operations Manager 正規表現 (正規表現) の例

例 1

1 つの文字列を含む一致を検索します。 string1

^(string1)$

例 2

string1またはstring2の 2 つの文字列のいずれかを含む一致を検索します。

^(string1)|^(string2)$

例 3

2 つのフォルダー パス (/var/lib/string1/* または /var/lib/string2/*) の下に再帰的に配置されているフォルダーに一致するフォルダーを検索します。

^(\/var\/lib\/string1\/.*)|^(\/var\/lib\/string2\/.*)$

例 4

Agent1.contoso.comまたはAgent2.contoso.com (大文字と小文字を区別しない) の 2 つの文字列のいずれかを含む一致を検索します。

^(?i)(agent1.contoso.com)|(?i)(agent2.contoso.com)$

Agentを含む一致を検索します (大文字と小文字は区別されません)。

^(?i)(agent.*)$

SDK を使用した正規表現

Operations Manager SDK には、オブジェクトをフィルター処理するための Matches 抽出条件演算子があります。 この演算子は、前述の GroupCalc ケースの MatchesCriteria と同じ機能を使用します。

SDK を使用して Operations Manager データベース内のオブジェクトを検索する条件式を構築する場合、次の構文要素が有効で便利です。

  • 比較演算子
  • ワイルドカード文字
  • DateTime 値
  • 整数と XML の列挙の比較

比較演算子

条件式を作成するときに比較演算子を使用できます。 有効な演算子については、次の表で説明します。

SDK 比較演算子

Operator 説明
=, == 左オペランドと右オペランドが等しい場合はtrue と評価されます。 Name = 'mymachine.contoso.com'
!=, <> 左オペランドと右オペランドが等しくない場合はtrue と評価されます。 Name != 'mymachine.contoso.com'
> 左オペランドが右オペランドより大きい場合true と評価されます。 Severity > 0
< 左オペランドが右オペランドより小さい場合はtrue と評価されます。 Severity < 2
>= 左オペランドが右オペランド以上の場合true と評価されます。 Severity >= 1
<= 左オペランドが右オペランド以下の場合はtrue と評価されます。 Severity <= 3
LIKE 左オペランドが右オペランドで定義されているパターンと一致する場合はtrue と評価されます。 パターンを定義するには、 wildcard テーブルの文字を使用します。 Name 'LIKE SQL%'
Name値が SQLEngine の場合はtrue と評価されます。

Name LIKE '%SQL%'
Name値がmySQLEngine場合は、trueに評価されます。
一致 左オペランドが右オペランドで定義された正規表現と一致する場合はtrue と評価されます。 Name MATCHES 'SQL*05'
Name値がSQL2005true と評価されます。
IS NULL 左オペランドの値が null の場合true と評価されます。 ConnectorId IS NULL
ConnectorId プロパティに値が含まれていない場合はtrue と評価されます。
IS NOT NULL 左オペランドの値が null でない場合はtrue と評価されます。 ConnectorId IS NOT NULL
ConnectorId プロパティに値が含まれている場合はtrue と評価されます。
IN 左オペランドの値が右オペランドで定義された値のリストにある場合はtrue と評価されます。

IN 演算子は、 Guid 型のプロパティでのみ使用できます。
Id IN ('080F192C-52D2-423D-8953-B3EC8C3CD001', '080F192C-53B2-403D-8753-B3EC8C3CD002')
Id プロパティの値が、式で指定された 2 つのグローバル一意識別子のいずれかである場合はtrue と評価されます。
および 左オペランドと右オペランドの両方が true の場合true 評価されます。 Name = 'SQL%' AND Description LIKE 'MyData%'
OR 左オペランドまたは右オペランドが true の場合はtrue と評価されます。 Name = 'SQL%' OR Description LIKE 'MyData%'
NOT 右オペランドが true でない場合はtrue と評価されます。 NOT (Name = 'IIS' OR Name = 'SQL')

ワイルドカード

次の表では、 LIKE 演算子を使用するときにパターンを構築するために使用できるワイルドカード文字を定義します。

LIKE 演算子で使用されるワイルドカード演算子

ワイルドカード 説明
% 任意の数の文字に一致するワイルドカード。 Name LIKE 'SQL%'
Name値が SQLEngine の場合はtrue と評価されます。

Name LIKE '%SQL%'
Name値がmySQLEngine場合は、trueに評価されます。
_ 1 文字に一致するワイルドカード。 Name LIKE 'SQL200_'
次のNametrueに評価されます。

SQL2000
SQL2005

: この式は、SQL200 の場合はfalseに評価されますシンボル _ はName値の 1 文字と完全に一致する必要があるためです。
[] 文字セットで囲まれている任意の 1 文字に一致するワイルドカード。

角かっこは、 MonitoringObject プロパティへの参照を修飾するときにも使用されます。 詳細については、「 監視オブジェクトのクエリの定義を参照してください。
Name LIKE 'SQL200[05]'
次のNametrueに評価されます。

SQL2000
SQL2005

式は、SQL2003falseに評価されます。
[^] 文字セットで囲まれていない任意の 1 文字に一致するワイルドカード。 Name LIKE 'SQL200[^05]'
SQL2003true に評価されます。

式は、SQL2000SQL2005falseに評価されます。

DateTime の比較

クエリ式で DateTime 値を使用する場合は、一般的な DateTime 形式 (G) を使用して、 DateTime 値を文字列値に変換します。 例えば次が挙げられます。

string qStr = "TimeCreated <= '" + myInstant.ToString("G") + "'";
ManagementPackCriteria mpCriteria = new ManagementPackCriteria(qStr);

有効な文字列比較を行うには、すべての日付値を G 形式 (GMT) に変換します。

列挙型に対する整数値の比較

クエリ式で整数列挙値を使用する場合は、列挙値を整数にキャストします。

例えば次が挙げられます。

string qStr = "Severity > " + (int)ManagementPackAlertSeverity.Warning;
MonitoringAlertCriteria alertCriteria = new MonitoringAlertCriteria(qStr);

詳細