无法从远程服务器列表获取应用程序池。 循环心不是工作(Unable to fetch appli

2019-09-29 17:10发布

是否有人可以帮助我在这!?

以下是我与合作,从远程计算机获取应用程序池的详细信息,PS脚本。

它的工作原理相同的机器或当脚本逐行执行上尝试时。

当它作为一个脚本文件,执行它不是工作。 然后,它显示了该脚本的整个输出运行的服务器的应用程序池的详细信息。

回声表示主机名和它的正确循环。 但我不知道为什么脚本心不是循环。

请看看,让我知道如何进一步试试这个...


$nodes = Get-Content "C:\PowerShell\Servers.txt"
foreach($node in $nodes) {
echo $node
Enter-PSSession $node
Import-Module WebAdministration
$webapps = Get-WebApplication
$list = @()
foreach ($webapp in get-childitem IIS:\AppPools\)
{
$name = "IIS:\AppPools\" + $webapp.name
$item = @{}
$item.WebAppName = $webapp.name
$item.Version = (Get-ItemProperty $name managedRuntimeVersion).Value
$item.UserIdentityType = $webapp.processModel.identityType
$item.Username = $webapp.processModel.userName
$obj = New-Object PSObject -Property $item
$list += $obj
}
$list | Format-Table -a -Property "WebAppName", "Version", "State", "UserIdentityType", "Username", "Password"
Exit-PSSession
}

阅读 - 主机“按回车键”


Answer 1:

Enter-PSSession仅用于创建一个交互式会话。 它不工作,你在脚本预期的方式。 脚本仅在您启动它,在这种情况下,本地计算机上的会话中运行。

远程运行命令的方式是Invoke-Command 。 您可以通过修改脚本更改Enter-PSSessionNew-PSSession ,并使用运行每个命令Invoke-Command

foreach ($node in $nodes) {
  $session = New-PSSession $node
  Invoke-Command -Session $session { $webapps = Get-Webapplication }
  Invoke-Command -Session $session { $list = @() }
  etc...
}

但是,这是低效的。 Invoke-Command需要一个脚本块,不只是一个命令,所以是有意义的把所有的命令的一个块,并调用Invoke-Command每台计算机只有一次。 一旦你这样做,甚至有不任何理由将$session变量左右。 相反,使用-ComputerName参数, Invoke-Command会自动创建一个临时的PSSession。

foreach ($node in $nodes) {
  Invoke-Command -Computer $node { 
    Import-Module WebAdministration
    $webapps = Get-WebApplication
    $list = @()
    etc...
  }
}

这种方法的伟大工程,是非常灵活的,但你甚至都不需要,如果你想手动在comptuers迭代。 相反,通过全$节点阵列的-ComputerName参数。

$nodes = Get-Content "C:\PowerShell\Servers.txt"
Invoke-Command -Computer $nodes { 
  Import-Module WebAdministration
  $webapps = Get-WebApplication
  $list = @()
  etc...
}

Invoke-Command将运行列表中的所有计算机的脚本块。



文章来源: Unable to fetch application pools from list of remote servers. Looping isnt working