0

毎日のバッチのログファイル検証を自動化しようとしています。

最大30のバッチを持つ可能性のある約20のサーバーをチェックしたいのですが、各バッチは1つ以上のログファイルを生成でき、いくつかの基準を使用してそれらを検証したいと思います。
したがって、これは非常に大量のデータになります。

私の最初は、ネストされた配列とハッシュテーブルを使用してから、次のようなpsobjectを作成することでした。

$servers=@(
    @{
     "name"="server1";
     "credential"="domain\user";
     "batch"=@(
                @{"batchName"="test";"path"="e:\cit\sauvegarde\batch\recup.cmd";"comment"="batch de test";"schedule"="lundi,mardi ";
                    "validations"=@(
                        @{"name"="log exist";"path"="\\smacweb\e$\cit\test.log";"filter"=@("NotNull";"NotOlderThan,2") };
                        @{"name"="no erros";"path"="\\smacweb\CIT\sauvegarde\logs\*.log";"filter"=@("NotContains,'error'") };
                )};
                @{"batchName"="mysql";"comment"="dump des bases mysql";"schedule"="lundi,mardi,vendredi";
                    "validations"=@(
                        @{"name"="log exist";"path"="\\smacweb\e$\mysqldump\dump.zip";"filter"=@("NotNull";"NotOlderThan,2") };
                        @{"name"="zipOK";"path"="\\smacweb\e$\mysqldump\dump.zip";"filter"=@("Test-Zip") };
                )};
       )
    };
#     @{
#     "name"="server2";
#     "credential"="domain\user2";
#     "batch"=@(
#                @{"batchName"=.....};
#     )};
)

$srv=@()
$servers | % {
        $srv+= New-Object -TypeName psobject -Property $_;
}

これは小さな例ですが、すぐに読みにくくなると思います。では、これを行うためのより良い方法は何でしょうか?xml(私にはなじみがない)を使用し、外部データベースを使用しますか、他の方法ですか?

4

1 に答える 1

1

注意:私はxmlに関しては初心者ですが、楽しみのために試してみました。これは、xmlファイルをナビゲートする方法の単なる例です。:)

XMLファイル(test.xml):

<?xml version="1.0" encoding="utf-8"?>
<servers>
  <server>
    <servername>server1</servername>
    <credential>domain\user</credential>
    <batches>
      <batch>
        <batchname>test</batchname>
        <batchpath>e:\cit\sauvegarde\batch\recup.cmd</batchpath>
        <comment>batch de test</comment>
        <schedule>
          <day>lundi</day>
          <day>mardi</day>
        </schedule>
        <validations>
          <validation>
            <name>log exist</name>
            <path>\\smacweb\e$\cit\test.log</path>
            <filters>
              <filter>NotNull</filter>
              <filter>NotOlderThan,2</filter>
            </filters>
          </validation>
          <validation>
            <name>no erros</name>
            <path>\\smacweb\CIT\sauvegarde\logs\*.log</path>
            <filters>
              <filter>NotContains,'error'</filter>
            </filters>
          </validation>
        </validations>
      </batch>
      <batch>
        <batchname>mysql</batchname>
        <comment>dump des bases mysql</comment>
        <schedule>
          <day>lundi</day>
          <day>mardi</day>
          <day>vendredi</day>
        </schedule>
        <validations>
          <validation>
            <name>log exist</name>
            <path>\\smacweb\e$\mysqldump\dump.zip</path>
            <filters>
              <filter>NotNull</filter>
              <filter>NotOlderThan,2</filter>
            </filters>
          </validation>
          <validation>
            <name>zipOK</name>
            <path>\\smacweb\e$\mysqldump\dump.zip</path>
            <filters>
              <filter>Test-Zip</filter>
            </filters>
          </validation>
        </validations>
      </batch>
    </batches>
  </server>
</servers>

Powershell-サーバーとバッチをループするスクリプト:

function test {
    $xml = [xml](Get-Content C:\Users\Frode\Desktop\test.xml)

    $servers = $xml.SelectNodes("/servers/server")

    foreach ($server in $servers) {
        $batches = $server.SelectNodes("batches/batch")

        Write-Host "Server: $($server.servername)"
        foreach ($batch in $batches) {
            Write-Host "Checking batch: $($batch.batchname)"
        } 
    }
}

出力:

PS-ADMIN C:\Windows\system32> test
Server: server1
Checking batch: test
Checking batch: mysql
于 2013-01-19T13:57:21.017 に答える