在 Foreach 循环中组合 Powershell 命令

Combining Powershell Commands in a Foreach Loop

我是 powershell 的新手,想知道为什么它不起作用。基本上,我有一个 foreach 循环来检查 IIS 是否为 运行 并报告 OS 版本(如果是)并将其写入文件。但是,它没有正确报告。它似乎获取了第一项的值(IIS 状态和 OS),然后通过我循环中的其他项填充它。

#Get List of Servers to Scan
$servers = (Get-Content e:\servers.txt)

#Determine if IIS is Running
foreach($server in $servers){
$iis = get-wmiobject Win32_Service -ComputerName $server -Filter "name='IISADMIN'";

if($iis.State -eq "Running")
{$OSVer= [environment]::OSVersion.Version}

Write-Host "$server,$IISRun,$OSVer" | Out-File -FilePath "E:\results.txt"
}

结果:

 Server1,true,5.2.3790.131072     <---- Correct
 Server2,true,5.2.3790.131072     <---- Correct 
 Server3,true,5.2.3790.131072     <---- Wrong OS reported (windows 2008)
 Server4,true,5.2.3790.131072     <---- Wrong OS reported (windows 2008)
 Server5,true,5.2.3790.131072     <---- IIS isn't installed here at all
 Server6,true,5.2.3790.131072     <---- IIS isn't installed here at all

感谢任何建议...

[environment]::OSVersion.Version 为您提供本地 OS 版本。使用 Get-WmiObject Win32_OperatingSystem -ComputerName $server 来获取目标计算机的 OS 信息,例如:

foreach ($server in $servers)
{
    $iis = Get-WmiObject Win32_Service -ComputerName $server -Filter "name='IISADMIN'"
    $os = Get-WmiObject Win32_OperatingSystem -ComputerName $server

    $iisRunning = $iis.State -eq "Running"
    $osVersion = $os.Version

    Write-Host "$server, $iisRunning, $osVersion"
}