Powershell -将Hastable格式化为表格,输出不符合预期

pzfprimi  于 2023-01-20  发布在  Shell
关注(0)|答案(2)|浏览(149)

我有一个powershell哈希表,它是通过查看服务及其状态生成的,
生成这些值的代码如下所示:

$table = @{}

foreach ($service in $services)
{
    $obj = Get-Service -name $service -ErrorAction SilentlyContinue

    if ($obj -ne $null){
        $table[$service] = $obj.status
    }
}

'attempt 1 at outputting the table, shows the inline response
$table | out-string | write-host

'attempt 2 at outputting the table, gives no output
$table

'attempt 3 at outputting the table, shows no output
write-output $table

我尝试将值写入屏幕,如下所示(仅通过调用hastable或使用write-output,结果是相同的,
这在测试示例中运行良好,但在我的脚本中却不行:

PS C:\WINDOWS\system32> $table

Name                           Value
----                           -----
Service1                      Running
Service2                      Running

在我的脚本中,我得到了以下内容:

Name                           Value
----                           -----
{Service1, Service2 ... {Stopped, Stopped, Stopped}

我尝试使用format-table和write-output / write-host的各种组合强制输出
有人能给予我指点一下吗?

u0sqgete

u0sqgete1#

为什么你决定用散列表?在这段代码中看不出任何理由。

#define some names
$services=@('LicenseManager','NPSMSvc_1242e4','dummy')

#simple query - pure PS objects, no strange checks or so ever
$services|get-service -ErrorAction Ignore|select name,status|export-csv -nti servicesStatus.csv

顺便说一句,格式化功能是格式化到给定的输出-你正在使用屏幕格式化,并试图将其推到文件。这是错误的。使用导出功能。当然,你可以尝试简单的输出文件,但在一般情况下,对象是复杂的生物与一些层次结构。屏幕只为你的眼睛-停止思考你所看到的,但什么是真的是。

t9aqgxwy

t9aqgxwy2#

另一种可能性是,假设您不需要哈希表来进行进一步的处理,这将使您能够更好地控制输出格式:

Clear-Host
$MyServices = 
  Get-Service -Name  @("HomeGroup*","USBDLM*","Macrium*",
                       "Remote*","MsKey*","VSS","Wsearch",
                       "DiagTrack")
$fmtServices = @{Expression={$_.Name};Label="Service Name";
                                      Width=25;Align="Left"},
               @{Expression={$_.Status};Label="Status";
                                        Width=10;Align="Left"}

$MyServices | Format-Table $fmtServices | Tee Test.txt

输出:

Service Name              Status    
------------              ------    
DiagTrack                 Running   
MacriumService            Running   
MsKeyboardFilter          Stopped   
RemoteAccess              Stopped   
RemoteRegistry            Stopped   
USBDLM                    Running   
VSS                       Stopped   
Wsearch                   Running

相关问题