我正在编写一个脚本,将服务器配置与基准配置以及并行服务器进行比较。脚本将检查的设置包括软件版本,RAM分配,目录位置和可用存储空间等。
我的计划是使用三个XML文件;一个用于基线,一个用于参考服务器,一个用于差异服务器。
问题是,并非每次检查配置都是为了平等。例如,使用的存储基于总空间的百分比,目录检查将需要忽略某些字符等。
对我来说,解决这个问题的最佳途径是什么? XML中有没有一种方法可以让它变得动态?我是否有理由改变代码中的XML值?还有另一个我没想到的更好的角度吗?
示例:
Baseline:
-
-
Port - 1234
Minimum Memory - =< 75% of total RAM
Default Data Dir - E:\Data
Server to check:
Total RAM - 12
SQL Server Version - Microsoft SQL Server 2008
Port - 1234
Minimum Memory - 10
Default Data Dir - E:\Directory\Data
Comparing server:
Total RAM - 8
SQL Server Version - Microsoft SQL Server 2012
Port - 1234
Minimum Memory - 6
Default Data Dir - E:\Data
Output:
Server to check:
Total RAM - DIFF FROM COMPARING SERVER
SQL Server Version - DIFF FROM BASELINE
Port - PASS
Minimum Memory - DIFF FROM BASELINE
Default Data Dir - DIFF FROM BASELINE
答案 0 :(得分:0)
#can be taken from XML file
$freeMemoryPercentRequirement = 75
$referenceServer = [PSCustomObject]@{
Name = "Server01"
TotalMemory = 0
FreeMemoryPercent = 0
}
$targetServer = [PSCustomObject]@{
Name = "Server44"
TotalMemory = 0
FreeMemoryPercent = 0
}
$results = [PSCustomObject]@{
Name = $targetServer.Name
TotalMemory = ""
FreeMemoryPercent = ""
}
foreach($server in $referenceServer,$targetServer) {
$server.TotalMemory = (Get-WmiObject -computerName $server.Name -Class Win32_ComputerSystem).TotalPhysicalMemory / 1024
$server.FreeMemoryPercent = "{0:N0}" -f ((Get-WmiObject -computerName $server.Name -Class Win32_OperatingSystem).FreePhysicalMemory / $server.TotalMemory * 100)
}
if($targetServer.TotalMemory -eq $referenceServer.TotalMemory) {
$results.TotalMemory = "CHECK!"
} else {
$results.TotalMemory = "FAILED"
}
if($targetServer.FreeMemoryPercent -ge $freeMemoryPercentRequirement ) {
$results.FreeMemoryPercent = "CHECK!"
} else {
$results.FreeMemoryPercent = "FAILED"
}
$results | fl *
示例输出:
Name : Server44
TotalMemory : CHECK!
FreeMemoryPercent : FAILED
我很急,现在无法添加评论,我稍后会尝试编辑。告诉我这是否符合您的需要^^。