Powershell 无法从远程服务器列表中获取应用程序池。循环不起作用

Powershell 无法从远程服务器列表中获取应用程序池。循环不起作用,powershell,application-pool,powershell-remoting,Powershell,Application Pool,Powershell Remoting,有人能帮我吗 下面是我正在使用的ps脚本,用于从远程计算机获取应用程序池详细信息 当在同一台机器上尝试或逐行执行脚本时,它可以工作 当它作为脚本文件执行时,它不工作。然后显示服务器的应用程序池详细信息,脚本在整个输出过程中从该服务器运行 echo正确显示主机名及其循环。但我不知道为什么脚本没有循环 请看一看,让我知道如何进一步尝试 读取主机“按回车键” 输入PSSession仅用于创建交互式会话。它的工作方式与您在脚本中期望的不同。脚本仅在启动它的会话中运行,在本例中是在本地计算机上运行 远程

有人能帮我吗

下面是我正在使用的ps脚本,用于从远程计算机获取应用程序池详细信息

当在同一台机器上尝试或逐行执行脚本时,它可以工作

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

echo正确显示主机名及其循环。但我不知道为什么脚本没有循环

请看一看,让我知道如何进一步尝试


读取主机“按回车键”



输入PSSession
仅用于创建交互式会话。它的工作方式与您在脚本中期望的不同。脚本仅在启动它的会话中运行,在本例中是在本地计算机上运行

远程运行命令的方法是使用
调用命令
。您可以修改脚本以将
Enter PSSession
更改为
New PSSession
,并使用
Invoke命令运行每个命令

foreach ($node in $nodes) {
  $session = New-PSSession $node
  Invoke-Command -Session $session { $webapps = Get-Webapplication }
  Invoke-Command -Session $session { $list = @() }
  etc...
}
但这是低效的
Invoke命令
接受一个脚本块,而不仅仅是一个命令,因此将所有命令放在一个块中并在每台计算机上调用
Invoke命令
一次是有意义的。一旦这样做了,就没有任何理由保留
$session
变量了。相反,请使用
-ComputerName
参数,并且
Invoke命令将自动创建临时PSSession

foreach ($node in $nodes) {
  Invoke-Command -Computer $node { 
    Import-Module WebAdministration
    $webapps = Get-WebApplication
    $list = @()
    etc...
  }
}
这种方法工作得很好,用途也非常广泛,但如果需要,您甚至不需要手动迭代编译器。相反,将完整的$nodes数组传递给
-ComputerName
参数

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

Invoke命令
将在列表中的所有计算机上运行scriptblock。

嘿@Ryan,我不得不对此做一些小的补充
$nodes=Get Content“C:\PowerShell\Servers.txt”
foreach($nodes中的节点){
Invoke命令-Computer$node{
导入模块WebAdministration
$webapps=Get WebApplication
$list=@()
等..
}
}
除此之外,它还发挥了巨大的作用!我在列表中有一些2k12服务器,其中invoke命令在2k8机器上不起作用。你知道吗?!设置ExecutionPolicy远程签名
$nodes = Get-Content "C:\PowerShell\Servers.txt"
Invoke-Command -Computer $nodes { 
  Import-Module WebAdministration
  $webapps = Get-WebApplication
  $list = @()
  etc...
}