我正在尝试自动化每日批次的日志文件验证。
我想检查大约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(我不熟悉),使用外部数据库,其他方法?
答案 0 :(得分: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-script循环遍历服务器和批处理:
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