powershell工作流程并行并不提供输出

时间:2014-11-07 21:56:06

标签: powershell

我正在使用以下脚本并正确创建输出文件,但它是空的。我不确定它到底缺少什么。这是我第一次尝试使用工作流程。

workflow DisableIISParallel
{
    $ScriptPath = "C:\Scripts\Server_Lists"
    $OLD = "Legacy-Servers"
    $OldList = Get-Content "$ScriptPath\$OLD.txt"
    $objHost=$Records.Length

    function DisableIIS ($appName) {
        $objHostStr = [System.Net.Dns]::GetHostEntry([string]$objHost).HostName
        Invoke-Command -ComputerName $objHostStr { iisreset /stop }
        Set-Service -Name W3SVC -StartupType Disabled -Status Stopped -ComputerName $objHostStr
        Get-WmiObject -Class win32_service -ComputerName $objHostStr | 
            where { $_.name -eq "W3SVC" } | 
            Format-Table -Property @{Expression={$_.PSComputerName};Label="Server";width=18}, 
                                   @{Expression={$_.Name};Label="Service";width=45}, 
                                   @{Expression={$_.StartMode};Label="Mode";width=10}, 
                                   @{Expression={$_.State};Label="State";width=10}, 
                                   @{Expression={$_.Status};Label="Status";width=10} | 
            Format-List | out-string -s | ? {$_} | Out-File C:\Scripts\Output\$appName.log -Append
        Write-Output "" | Out-File C:\Scripts\Output\$appName.log -Append
    }
    foreach -parallel($objHost in $OldList)
    {
        $appName = $OLD
        DisableIIS $appName
    }
}

DisableIISParallel

1 个答案:

答案 0 :(得分:0)

这个位不对:

Get-WmiObject -Class win32_service -ComputerName $objHostStr | 
            where { $_.name -eq "W3SVC" } | 
            Format-Table -Property @{Expression={$_.PSComputerName};Label="Server";width=18}, 
                                   @{Expression={$_.Name};Label="Service";width=45}, 
                                   @{Expression={$_.StartMode};Label="Mode";width=10}, 
                                   @{Expression={$_.State};Label="State";width=10}, 
                                   @{Expression={$_.Status};Label="Status";width=10} | 
            Format-List | out-string -s | ? {$_} | Out-File C:\Scripts\Output\$appName.log -Append

您不应将一个格式命令(Format-Table)的输出运行到另一个格式命令(Format-List)中。

试试这个(假设您需要表格格式 - 如果不是,请将Format-Table更改为Format-List):

Get-WmiObject -Class win32_service -ComputerName $objHostStr | 
            where { $_.name -eq "W3SVC" } | 
            Format-Table @{Expression={$_.PSComputerName};Label="Server";width=18}, 
                         @{Expression={$_.Name};Label="Service";width=45}, 
                         @{Expression={$_.StartMode};Label="Mode";width=10}, 
                         @{Expression={$_.State};Label="State";width=10}, 
                         @{Expression={$_.Status};Label="Status";width=10} >> C:\Scripts\Output\$appName.log

并传递函数所需的所有变量,例如:

function DisableIIS ($appName, $objHost) {
    ...
}
foreach -parallel($objHost in $OldList)
{
    $appName = $OLD
    DisableIIS $appName $objHost
}