0

我创建了一个脚本来收集远程 SQL 服务器

#### Get number of SQL servers


$sql_servers = @()

 foreach ($server in $servers){

 # Loop through each server and check if server has service "MSSQLSERVER"

 Try{

     $sql = get-service -computername $server.DNSHOstname -ErrorAction Stop | where {$_.Name -eq "MSSQLSERVER"} | select MachineName 
     $sql_servers += New-Object PSObject -Property @{
            
            Machine = $sql.MachineName
        }
       }

 catch [Exception]
{
    if ($_.Exception.GetType().Name -like "*COMException*") {
         Write-Verbose -Message ('{0} is unreachable' -f $server.DNSHOstname) -Verbose
    }
    else{
         Write-Warning $Error[0]
    }
 }
 }

我得到了想要的结果,但变量包含多个空行:

 $sql_servers 

Machine                       
-------                       
                              
                              
SQL1   
                              
                              
                              
                              
                              
SQL2 
SQL3
     

                     
                          

我尝试以下删除那些空白行但没有成功。

$sql_servers = $sql_servers | Where-Object {$_}
$sql_servers = $sql_servers | ? {$_ -ne ""}
                      

如何从变量中删除空(空白)行?

编辑:

我通过删除哈希表属性找到了解决方法,而不是

 $sql_servers += New-Object PSObject -Property @{
                
                Machine = $sql.MachineName
            }
           }               
              

我只是设置$sql_servers += $sql并且没有空行,但我很好奇是否可以使用哈希表删除空行。

谢谢

4

1 回答 1

1

首先要指出的是您的变量$sql_servers不包含哈希表,而是具有一个属性的 PSCustomObjects。对于这种特定情况,您可以通过将命令调整为来删除空条目

$sql_servers = $sql_servers | Where-Object {$_.machinename}

如果它是哈希表,你可以使用

$sql_servers = $sql_servers | Where-Object {$_.values}

这是两者的简单演示。

PS对象

1..5 | % {
    if($_ % 2 -eq 0)
    {
        $num = $_
    }
    else
    {
        $num = $null
    }
    [PSCustomObject]@{
        MachineName = $num
    }
} -ov sql_servers

MachineName
-----------
       
2          
       
4          


$sql_servers | ? {$_.machinename} -ov sql_servers

MachineName
-----------
          2
          4   

哈希表

1..5 | % {
    if($_ % 2 -eq 0)
    {
        $num = $_
    }
    else
    {
        $num = $null
    }
    @{
        MachineName = $num
    }
} -ov sql_servers

Name                           Value                                                                                                                            
----                           -----                                                                                                                            
MachineName                                                                                                                                                     
MachineName                    2                                                                                                                                
MachineName                                                                                                                                                     
MachineName                    4                                                                                                                                
MachineName                                                                                                                                                     


$sql_servers | ? {$_.values} -ov sql_servers

Name                           Value                                                                                                                            
----                           -----                                                                                                                            
MachineName                    2                                                                                                                                
MachineName                    4   
于 2020-10-23T17:20:33.163 回答