0

我正在尝试自动化我们每日批次的日志文件验证。

我想检查大约 20 台服务器,它们可能有多达 30 个批次,每个批次可以生成一个或多个日志文件,我想使用多个标准来验证它们。
因此,这最终会产生大量数据。

我的第一个想法是使用嵌套数组和哈希表,然后像这样创建 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 回答