假设我有一个这样的表
DBName pserver qserver
cube1 server1.com q1server.com
cube1 server2.com q2server.com
cube2 server3.com q3server.com
cube2 server4.com q4server.com
我有以下代码
param([float]$Threshold)
Function Query($Query) {
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=$Server;Initial Catalog=$Database;Integrated Security=SSPI"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.Connection = $SqlConnection
$SqlCmd.CommandText = $Query
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$a=$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0] }
$PServers = Query "SELECT DISTINCT [pserver] FROM [dbo].[$Table]" | Select -ExpandProperty pserver;
$QServers = Query "SELECT DISTINCT [qserver] FROM [dbo].[$Table]" | Select -ExpandProperty qserver;
foreach($server in $PServers + $QServers)
{
if(!$Threshold)
{
[float]$Threshold = 0.00
$cs = New-CimSession -ComputerName $server
[float]$Threshold = ((Get-CimInstance Win32_PhysicalMemory -CimSession $cs | Measure-Object -Property capacity -Sum).sum /1gb)*0.7
}
"$server: $Threshold"
}
在q1server.com上,有200 GB的内存,而其余服务器有96GB的内存。
如果我在q1server.com服务器上的Powershell上运行阈值Cim代码,我将获得140GB的存储空间,这是正确的,因为0.7乘法
所以我知道阈值代码很好并且可以正常工作。
但是,for循环中的阈值似乎总是导致67.20
67.20是来自其他服务器的96GB的结果,这也仅对其他服务器正确。那么为什么它要覆盖q1server 140 GB阈值而仅输出67.2GB?
应该是这样的
67.2
67.2
67.2
67.2
140
67.2
67.2
67.2
答案 0 :(得分:2)
发生逻辑错误,您有一个if条件来检查是否没有$threshold
仅对首次迭代有效的{{1}}。您可以删除该支票,因为它不是必需的。