【问题标题】:How can I correct the Write-Host results of my PowerShell script / WebAdministration foreach loops?如何更正我的 PowerShell 脚本/WebAdministration foreach 循环的 Write-Host 结果?
【发布时间】:2019-06-12 00:29:54
【问题描述】:

我想将 4 个 foreach 循环结果显示为:

Server  
   IIS Site:  
   App Pool:  
   Service:  

代替:

Server  
  IIS Site:  
Server  
  App Pool:  
Server  
  Service:  

代码:

foreach ($server in $servers)  
{  
    foreach ($IISsite in $IISsites) { }  
    foreach ($appPool in $appPools) { }  
    foreach ($service in $services) { }  
}  
CheckSitesAppPoolsServices -servers "SERVER1" -IISsites ("Default Web Site")  
CheckSitesAppPoolsServices -servers "SERVER1" -appPools ("DefaultAppPool")  
CheckSitesAppPoolsServices -servers "SERVER1" -services ("User Profile Service", "App Readiness")  

实际结果:

Review Sites, App Pools and Service on SERVER1
Default Web Site.......................................  Started

Review Sites, App Pools and Service on SERVER1
DefaultAppPool.........................................  Started

Review Sites, App Pools and Service on SERVER1
User Profile Service...................................  Running  
App Readiness..........................................  Stopped

我希望结果显示如下:

Review Sites, App Pools and Service on SERVER1

Site:     Default Web Site.......................................  Started  
App Pool: DefaultAppPool.........................................  Started  
Service:  User Profile Service...................................  Running  
Service:  App Readiness..........................................  Stopped

【问题讨论】:

  • 首先你需要在单个调用中传递所有参数......或者你需要捕获结果并合并这些......

标签: powershell web-administration


【解决方案1】:

试试这个:

function Get-SiteAppPoolServiceStatus
{
    param (
        [Parameter(Mandatory = $true)]
        [String[]] $Servers,

        [Parameter(Mandatory = $false)]
        [String[]] $IISSites = @(),

        [Parameter(Mandatory = $false)]
        [String[]] $AppPools = @(),

        [Parameter(Mandatory = $false)]
        [String[]] $Services = @()
    )                

    $status = @()

    foreach ($server in $Servers)
    {
        foreach ($IISSite in $IISSites) 
        { 
            $status += [PSCustomObject]@{ "Server" = $server; "Type" = "Site"; "Name" = $IISSite; "Status" = "Started" }
        }  

        foreach ($appPool in $AppPools)  
        { 
            $status += [PSCustomObject]@{ "Server" = $server; "Type" = "App Pool"; "Name" = $appPool; "Status" = "Started" }
        }  

        foreach ($service in $Services)
        { 
            $status += [PSCustomObject]@{ "Server" = $server; "Type" = "Service"; "Name" = $service; "Status" = "Started" }
        }  
    }

    Write-Output $status
}

Get-SiteAppPoolServiceStatus -Servers "SERVER1" -IISSites "Default Web Site"
Get-SiteAppPoolServiceStatus -Servers "SERVER1" -AppPools "DefaultAppPool"
Get-SiteAppPoolServiceStatus -Servers "SERVER1" -Services @("User Profile Service", "App Readiness") 
Get-SiteAppPoolServiceStatus -Servers "SERVER2" -IISSites "Web Site" -AppPools "AppPool" -Services @("Test1", "Test2") 

这将导致以下输出:

Server  Type     Name                 Status
------  ----     ----                 ------
SERVER1 Site     Default Web Site     Started
SERVER1 App Pool DefaultAppPool       Started
SERVER1 Service  User Profile Service Started
SERVER1 Service  App Readiness        Started
SERVER2 Site     Web Site             Started
SERVER2 App Pool AppPool              Started
SERVER2 Service  Test1                Started
SERVER2 Service  Test2                Started

您也可以使用函数输出来设置不同的格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-10
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-14
    • 1970-01-01
    • 2023-02-06
    相关资源
    最近更新 更多