Powershell - 从散列 属性 变量中删除空行

Powershell - Remove Blank line from hash property variable

我创建了一个脚本来收集远程 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 ""}
                      

如何从变量中删除空行?

编辑:

我通过删除哈希table 属性 而不是

找到了解决方法
 $sql_servers += New-Object PSObject -Property @{
                
                Machine = $sql.MachineName
            }
           }               
              

我只是设置了 $sql_servers += $sql 并且没有空行,但我很好奇是否可以使用散列 table.

删除空行

谢谢

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

来删除空条目
$sql_servers = $sql_servers | Where-Object {$_.machinename}

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

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

下面是两者的简单演示。

PSObject

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