System Center Operations Manager での正規表現のサポート
管理パックを作成するときに、検出とグループに正規表現の一致を含める必要がある場合があります。 正規表現は、モニターやルールの式の条件でパターン マッチングを行う場合にも必要な場合があります。
元の製品バージョン: System Center Operations Manager
元の KB 番号: 2702651
Operations Manager では、2 種類の正規表現がサポートされています。 正しい式を選択するには、作業中の要素を把握しておく必要があります。 グループ メンバーシップの計算フィルターと式フィルターでは、パターン マッチングに明確に異なる構文が使用されます。
グループの計算
グループ計算では、正規表現構文が使用 PERL
されます。 既定では、照合では大文字と小文字が区別されませんが、XML で特殊な属性を使用して式の大文字と小文字を区別する必要があることを指定できます。 詳細については、「 SimpleCriteriaType」を参照してください。
グループの計算は、モジュールを使用するたびに管理パック (MP) で検出されます Group Calc
。 式では GroupCalc
、 演算子を MatchesRegularExpression
使用して、パターン マッチング式に基づいて動的グループ メンバーシップを作成します。 この演算子の実装は、MP XML で見つかった式を SQL 呼び出し名に dbo.fn_MatchesRegularExpression
渡します。 この呼び出しで値 0 が返される場合、一致は false になります。
1 の値を返す場合、一致は true です。
重要
dbo.fn_MatchesRegularExpression
SQL 呼び出し名自体では大文字と小文字が区別されるためMatchesRegularExpression
、動的グループ メンバーシップ条件で使用される演算子も大文字と小文字が区別されます。
GroupCalc では、次の一般的な正規表現スタイル クエリの抽象式を作成する 2 つの特殊なサブ要素もサポートされています。
GroupCalc 特殊関数
GroupCalc サブ要素 | MP 式 | 正規表現と同等 |
---|---|---|
ContainsSubstring |
^*{O}.*$ (ここで {O} 部分文字列に置き換えられます) |
|
MatchesWildcard | ? |
. |
MatchesWildcard | * |
.* |
MatchesWildcard | # |
[0-9] |
注:
これら 2 つの特殊な演算子のいずれかを使用する場合、評価では常に大文字と小文字が区別されます。
式フィルターの一致条件
管理パックで使用される式フィルターでは、正規表現式構文.NET Framework使用されます。 すべての式が機能するわけではありません。 ただし、次の.NET Framework正規表現構文要素がサポートされています。 式フィルターは、式 Eval モジュールを使用するときに管理パックに存在します。
Operations Manager の正規表現構文
構築 | Operations Manager の正規表現 |
---|---|
任意の文字 | . |
範囲内の文字 | [ ] |
範囲外の文字 | [^ ] |
行の先頭 | ^ |
行末 | $ |
または | | |
グループ | ( ) |
0 または 1 の一致 | ? |
0 個以上の一致 | * |
1 つ以上の一致 | + |
厳密に N 個の一致 | {n} |
少なくとも N 個の一致 | {n, } |
最大 N 個の一致 | { 、n} |
N から M の一致 | {n, m} |
改行文字 | \n |
タブ文字 | \t |
Operations Manager の正規表現 (正規表現) の例
例 1
1 つの文字列を含む一致を検索します string1
。
^(string1)$
例 2
2 つの文字列 string1
のいずれか、または string2
を含む一致を検索します。
^(string1)|^(string2)$
例 3
2 つのフォルダー パス (/var/lib/string1/*
または /var/lib/string2/*
) の下に再帰的に配置されているフォルダーに一致するフォルダーを検索します。
^(\/var\/lib\/string1\/.*)|^(\/var\/lib\/string2\/.*)$
例 4
2 つの文字列 Agent1.contoso.com
のいずれかを含む一致または (大文字と Agent2.contoso.com
小文字を区別しない) を検索します。
^(?i)(agent1.contoso.com)|(?i)(agent2.contoso.com)$
(大文字と小文字を区別しない) を含む Agent
一致を検索します。
^(?i)(agent.*)$
SDK を使用した正規表現
Operations Manager SDK には、オブジェクトをフィルター処理するための 一致 条件演算子があります。 この演算子は、前に説明した GroupCalc ケースと同じ機能 MatchesCriteria
を使用します。
SDK を使用して Operations Manager データベース内のオブジェクトを検索する条件式を構築する場合、次の構文要素が有効で便利です。
- 比較演算子
- ワイルドカード文字
- DateTime 値
- 整数と XML 列挙の比較
比較演算子
条件式を作成するときに、比較演算子を使用できます。 有効な演算子については、次の表を参照してください。
SDK 比較演算子
オペレーター | 説明 | 例 |
---|---|---|
=, == | 左オペランドと右オペランドが等しい場合は 、true に評価されます。 | Name = 'mymachine.contoso.com' |
!=, <> | 左オペランドと右オペランドが等しくない場合は 、true に評価されます。 | Name != 'mymachine.contoso.com' |
> | 左オペランドが右オペランドより大きい場合は 、true に評価されます。 | Severity > 0 |
< | 左オペランドが右オペランドより小さい場合は 、true に評価されます。 | Severity < 2 |
>= | 左オペランドが右オペランド以上の場合は 、true と評価されます。 | Severity >= 1 |
<= | 左オペランドが右オペランド以下の場合は true に評価されます。 | Severity <= 3 |
LIKE | 左オペランドが右オペランドで定義されているパターンと一致する場合は 、true に評価されます。 ワイルドカード テーブルの文字を使用して、パターンを定義します。 | Name 'LIKE SQL%' 値が SQLEngine の場合は Name true に評価されます。 Name LIKE '%SQL%' 値が MySQLEngine の場合は Name true に評価されます。 |
一致 | 左オペランドが右オペランドで定義されている正規表現と一致する場合は 、true に評価されます。 | Name MATCHES 'SQL*05' 値がSQL2005の場合は Name true に評価されます。 |
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%' |
または | 左オペランドまたは右オペランドが true の場合は、 true と評価されます。 | Name = 'SQL%' OR Description LIKE 'MyData%' |
NOT | 右側のオペランドが true でない場合は、 true と評価されます。 | NOT (Name = 'IIS' OR Name = 'SQL') |
ワイルドカード
次の表は、 演算子を使用するときにパターンを作成するために使用できるワイルドカード文字を LIKE
定義しています。
LIKE 演算子で使用されるワイルドカード演算子
ワイルドカード | 説明 | 例 |
---|---|---|
% | 任意の文字数に一致するワイルドカード。 | Name LIKE 'SQL%' 値が SQLEngine の場合は Name true に評価されます。 Name LIKE '%SQL%' 値が MySQLEngine の場合は Name true に評価されます。 |
_ | 1 文字に一致するワイルドカード。 | Name LIKE 'SQL200_' 次の値を true に評価します。 Name SQL2000 SQL2005 注: SQL200 の場合、式は false と評価されます。シンボル _ は値の Name 1 文字と完全に一致する必要があるためです。 |
[] | 文字セットで囲まれている任意の 1 文字に一致するワイルドカード。 メモMonitoringObject プロパティへの参照を修飾するときにも、角かっこが使用されます。 詳細については、「 監視オブジェクトのクエリの定義」を参照してください。 |
Name LIKE 'SQL200[05]' 次の値を true に評価します。 Name SQL2000 SQL2005 式は、SQL2003に対して false と 評価 されます。 |
[^] | 文字セットで囲まれていない 1 文字に一致するワイルドカード。 | Name LIKE 'SQL200[^05]' SQL2003に対して true に評価されます。 式は、SQL2000とSQL2005に対して false と評価されます。 |
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);