是否有人可以帮助我在这!?
以下是我与合作,从远程计算机获取应用程序池的详细信息,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
}
阅读 - 主机“按回车键”
Enter-PSSession
仅用于创建一个交互式会话。 它不工作,你在脚本预期的方式。 脚本仅在您启动它,在这种情况下,本地计算机上的会话中运行。
远程运行命令的方式是Invoke-Command
。 您可以通过修改脚本更改Enter-PSSession
到New-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