Sql server Powershell:检索数据库属性,以百分比和格式转换大小以发送邮件报告

Sql server Powershell:检索数据库属性,以百分比和格式转换大小以发送邮件报告,sql-server,powershell,formatting,report,converters,Sql Server,Powershell,Formatting,Report,Converters,我有一个工作脚本(由一位前同事编写),它连接到mssql数据库,获取每个数据库的大小,并使用我不懂的日志记录和格式化技术将它们报告到csv文件中 以下是相关线路: $reportcsv=$((获取位置).path+“\Results\result size.csv”) 输出文件-FilePath$reportcsv-InputObject$(“srvname;Db.Name;TotalDBSize;dbSize;LogSize;DbUsedSpace;LogUsedSpace”) foreach

我有一个工作脚本(由一位前同事编写),它连接到mssql数据库,获取每个数据库的大小,并使用我不懂的日志记录和格式化技术将它们报告到csv文件中

以下是相关线路:

$reportcsv=$((获取位置).path+“\Results\result size.csv”)
输出文件-FilePath$reportcsv-InputObject$(“srvname;Db.Name;TotalDBSize;dbSize;LogSize;DbUsedSpace;LogUsedSpace”)
foreach($ICMDBServer中的服务器)
{
$logstring=“连接数据库”+$Server.Name
WriteLog-输出文件$LogFile-类型信息-文本$logString-提示$true
$DBConnection=新对象Microsoft.SqlServer.Management.Common.ServerConnection
$DBConnection.ServerInstance=$Server.Name
$ServerObj=新对象Microsoft.SqlServer.Management.SMO.Server($DBConnection)
如果(---Param cmd条件--)
{
"############################################################################################"
“{0,-28}{1,64}”-f”###,“#”
“############{0,-28}{1,11}{2,38}”-f“S E R V E R N A M E”$Server.Name,“########
“{0,-28}{1,64}”-f”###,“#”
"############################################################################################"
foreach($ServerObj.Databases中的db)
{
交换机($db.Name)
{   
“主”{}
“模型”{}
“msdb”{}
违约
{
$logstring=“”
$LogUsedSpace=[System.Math]::Round($($db.LogFiles | measure object-property UsedSpace-sum).sum/1024,2)
$LogSize=[System.Math]::舍入($($db.LogFiles |度量对象-属性大小-sum).sum/1024,2)
$TotalDBSize=[System.Math]::四舍五入($db.Size,2)
$dbSize=[System.Math]::Round($db.Size-$logsize,2)
$DbUsedSpace=[System.Math]::Round($db.Size-$db.SpaceAvailable/1024,2)
$DBUsageP=$($DbUsedSpace/$TotalDBSize)
$LogUsageP=$($LogUsedSpace/$LogSize)
#“{0,-28}{1,12}数据库的数据库大小报告”,$DB.Name
“{0,-28}{1,50}####”-f“##########数据库的数据库大小报告”,$DB.Name
“{0,-28}{1,64}”-f”###,“#”
“{0,-28}{1,12}MB{2,44}”-f”DB TotalSize“,$TotalDBSize“#”
“{0,-28}{1,12}MB{2,44}”-f”DB TotalSize“,$TotalDBSize“#”
“{0,-28}{1,12}MB{2,44}”-f“DB Size”、$dbSize、”
“{0,-28}{1,15}MB{2,44}”-f“DB UsedSpace”,$DbUsedSpace,”
“{0,-28}{1,17:p}{2,45}”-f“DB Usage”,$DBUsageP,”
“{0,-28}{1,12}MB{2,44}”-f“Log Size”、$LogSize、”
“{0,-28}{1,15}MB{2,44}”-f“Log UsedSpace”,$logUsedSpace,”#”
“{0,-28}{1,17:p}{2,45}”-f“Log Usage”,$LogUsageP,”
“{0,-28}{1,64}”-f”###,“#”
"############################################################################################"
$logstring=$Server.Name+“;”+$Db.Name+“;“+$TotalDBSize+”;“+$dbSize+”;“+$LogSize+”;“+$DbUsedSpace+”;“+$LogUsedSpace”
输出文件-文件路径$reportcsv-输入对象$logstring-追加
}
}
}
}
“{0,-28}{1,64}”-f”###,“#”
“{0,-28}{1,64}”-f”###,“#”
实际上,文本输出如下所示:

> ##                                                                                         #
> ####### S E R V E R   N A M E              server0                               ########   
> ##                                                                                         #
> ############################################################################################
> #######  DB SIZE REPORT for DATABASE                                            db1 ###
> ##                                                                                         # DB TotalSize                         1152    MB                                            #  DB TotalSize                         1152    MB                                            # DB Size                              1024    MB                                            # DB UsedSpace                             202 MB                                            # DB Usage                                17,53%                                             # Log Size                              128    MB                                            # Log UsedSpace                           2,27 MB                                            # Log Usage                                1,77%                                             #
> ##                                                                                         #
> ############################################################################################
我需要对其进行修改,以便(通过邮件消息)仅报告
$DBUsageP
值高于90%的数据库

对于我想要检索的数据库:

  • $Server.Name
  • $db.Name
  • $DBUsageP

我想我需要在foreach语句中为catch and store
$DBUsageP
value>90%设置一个条件,但我不知道如何设置。

您可以在变量中捕获所需的内容,如列表中:

$over90List = New-Object System.Collections.Generic.List[object]
并将最后几行添加到
default
块中:

if ($DBUsageP -gt 0.9) {
    $over90List.Add([PsCustomObject]@{
        Server   = $Server.Name
        DataBase = $Db.Name
        Usage    = '{0:p}' -f $DBUsageP
    })
}

然后,您将在
$over90List
中拥有一个对象数组,可以将其转换为HTML表格,或作为纯文本使用
| Format table-AutoSize | Out String
放入您的电子邮件。

给我们一个我们可以实际回答的问题。您需要帮助的具体部分是什么?有什么不适合您的?@Larnu,您好Larn(抱歉!),脚本可以工作,我需要您的帮助来修改它,以便只检索我指示的信息:$Server.Name;$db.Name;$DBUsageP,而不影响其余代码Larnu 不Lamu...通过说“我需要帮助”来回答你如何需要帮助不要告诉我任何额外的信息。如果你只需要特定的信息,只需要使用特定的信息。就像我问的,什么特定的部分?什么与你拥有的不一致?@Larnu,我已经编辑了答案,这能让它更清楚吗?嗨,Theo!谢谢!不幸的是,
$DBUsageP
在你的代码中是一个整数而不是一个百分比在我前同事的代码中,我认为对百分比数字的“转换”是由“
:p
”:
“{0,-28}{1,17:p}{2,45}”-f“DB Usage”,$DBUsageP,{code>”,{code>,对吗?@ilRobby好的,你可以使用任何你想要的格式,包括
{0:p}
Theo,PsCustomObject似乎没有捕获任何数据…如果我设置变量
**$result**=foreach($icmDBServers中的服务器){..}
,它只包含其他指令的值…最后一个值
$DBUsa