【发布时间】:2025-12-06 00:35:02
【问题描述】:
我有一个使用 SMO 获取 SQL Server 属性的脚本。我让脚本在 html 中显示属性,但我无法设置它,因此即使 SMO 对象由于连接或其他错误而返回空,脚本仍会进入数据行。如果 SMO 对象返回空或 null,我将如何让它在数据行中输入字符串?
我已经尝试过 if 语句 where $serverObject -eq $null 并且没有打印出来。
foreach($instance in $instanceList)
{
$serverObject = New-Object Microsoft.SqlServer.Management.Smo.Server($instance)
$instance = $instance.toupper()
$serverName = $serverObject.ComputerNamePhysicalNetBIOS;
$instanceName = $serverObject.InstanceName;
$versionBuild = $serverObject.Information.ResourceVersion;
$servicePack = $serverObject.Information.ProductLevel;
$color = $redColor;
if($serverName -eq $null -and $instanceName -eq $null)
{
[string]$serverName = "Error Connecting"
$instanceName = $instance
}
else
{
if($instanceName -eq $null -and $versionBuild -eq $null)
{
[string]$instanceName = $instance
[string]$versionBuild = "Error"
}
}
}
# Set background color to green if service pack is 2008r2 SP2
if($versionBuild -match $vs2008r2sp2)
{
$color = $greenColor
}
else
{
# Set background color to yellow if service pack is 2008 SP3
if($versionBuild -match $vs2008sp3)
{
$color = $yellowColor
}
else
{
# Set background color to orange if service pack is 2005 SP4
if($versionBuild -match $vs2005sp4)
{
$color = $orangeColor
}
}
}
# Create table data rows
$dataRow = "
<tr>
<td width='10%'>$serverName</td>
<td width='15%'>$instanceName</td>
<td width='5%' bgcolor=`'$color`' align='center'>$versionBuild</td>
<td width='10%' align='center'>$servicePack</td>
</tr>
"
# If statement needed to remove label that were null
If ($versionBuild -ne 'NaN')
{
Add-Content $servicePackReport $dataRow;
Write-Host -ForegroundColor DarkYellow "$serverName $instanceName service pack build = $versionBuild";
$i++
}
}
【问题讨论】:
标签: sql sql-server powershell foreach smo