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