Restart-WebAppPool使用foreach失败

时间:2017-05-31 16:08:27

标签: powershell

我正在整理一个Powershell脚本,该脚本将在清晨的预定时间回收所有当前运行的AppPools。现在我只是想让它在本地机器上运行并且收到错误“无法验证参数'名称上的参数'。参数为空。”

# Load IIS module:
Import-Module WebAdministration

# Get pool names:
$poolList = (Get-ChildItem -Path IIS:\AppPools | Where {$_.State -eq 
"Started"} | Select -ExpandProperty Name)

# Recycle Web App Pools
foreach ($item in $poolList)
{
Write-Host "Processing" $item -ForegroundColor Green
Invoke-Command -ComputerName localhost -ScriptBlock {Restart-WebAppPool -
Name $item}
}

当我运行脚本时,它会遍历每个AppPool项目。我看到这条线......

Write-Host "Processing" $item -ForegroundColor Green

...但Invoke-Command表示参数'Name'为空。我确定我错过了一些简单的东西,但不知道它是什么。

提前感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:0)

将参数传递给Invoke-Command脚本块并不是那么简单,but it is still pretty simple...

您想查看"传递本地值"部分。

答案 1 :(得分:0)

您遇到此问题,因为变量$ item设置在范围之外。 (不确定这是否是最佳解释。)您需要将参数传递给Invoke-Command中的脚本块才能使用它。

Invoke-Command -ArgumentList $item {Restart-WebAppPool -Name $args[0]}