首页 > 解决方案 > 如何在 Format-Table 中获取服务器名称?

问题描述

这可能是版本问题,但我只需要将服务器名称输入Format-TablePowerShell 命令即可。

$compArray = Get-Content C:\Users\Me\Documents\ServerList_All.txt 
$Proc = foreach ($strComputer in $compArray) {
    Get-WMIObject Win32_Service | Where-Object {
        $_.Name -like 'SQL*' -or
        $_.Name -like 'MSSQL*' -or
        $_.Name -like 'OLAP*' -or
        $_.Name -like 'MSDTS*' -or
        $_.Name -like 'MSOLAP*' -or
        $_.Name -like 'ReportServer*'
    } | Sort-Object -Property Name | Format-Table $strComputer, Name, State
}
$Proc | Out-File C:\Users\ME\Documents\ServerStatus_All.txt

这适用于 PS v2:

| Sort-Object -Property Name | Format-Table Name, State

这不是,但在 PS v3 中有效:

| Sort-Object -Property Name | Format-Table $strComputer, Name, State

错误:

格式表:无法将 System.Management.Automation.PSObject 转换为以下类型之一 {System.String, System.Management.Automation.ScriptBlock}。

唯一的区别是$strComputer变量。我正在阅读文本文件,v3+ 中的一切都很漂亮。

不,遗憾的是,我无法在运行它的服务器上升级到更新的 PS 版本。

标签: powershellpowershell-2.0

解决方案


这应该适用于你...

$compArray = (Get-ADComputer -Filter *).Name
$Proc = foreach ($strComputer in $compArray) {
    Get-WMIObject -Class Win32_Service -ComputerName $strComputer | 
    Where-Object {
        $_.Name -like 'SQL*' -or
        $_.Name -like 'MSSQL*' -or
        $_.Name -like 'OLAP*' -or
        $_.Name -like 'MSDTS*' -or
        $_.Name -like 'MSOLAP*' -or
        $_.Name -like 'ReportServer*'
    } | 
    Select-Object -Property  @{Name = 'Computer';Expression={$strComputer}}, Name, State | 
    Sort-Object -Property Name | 
    Format-Table -AutoSize
}
$Proc


# Results

Computer  Name            State  
--------  ----            -----  
LABSQL01 MSSQLFDLauncher Running
LABSQL01 MSSQLSERVER     Running
LABSQL01 SQLBrowser      Stopped
LABSQL01 SQLSERVERAGENT  Running
LABSQL01 SQLTELEMETRY    Running
LABSQL01 SQLWriter       Running



Computer  Name                 State  
--------  ----                 -----  
LABWSM01 MSSQL$MICROSOFT##WID Stopped

推荐阅读