将从文件读取的变量传递给 invoke-command

Pass Varibles read from file to invoke-command

我正在努力通过名称中带有“测试”一词的 powershell 远程回收所有 IIS 应用程序池,但还排除了一些名称中带有测试的特定应用程序池。我可以在本地使用:

## List of Apppool Names to Exclude
$Exclusions = Get-Content "C:\temp\Recycle TEST app pools Exclusions.txt"

## Load IIS module:
Import-Module WebAdministration

## Restart app pools with test in the name
Get-ChildItem –Path IIS:\AppPools -Exclude $Exclusions | WHERE { $_.Name -like "*test*" } | restart-WebAppPool}

但是,当我使用时,我无法从列表中排除应用程序池:

$server = 'SERVER01', 'SERVER02'

## List of Apppool Names to Exclude
$Exclusions = Get-Content "C:\temp\Recycle TEST app pools Exclusions.txt"

## Load IIS module:
Import-Module WebAdministration

## Restart app pools with test in the name
invoke-command -computername $server -ScriptBlock {Get-ChildItem –Path IIS:\AppPools -Exclude $args[0] | WHERE { $_.Name -like "*test*" } | restart-WebAppPool}} -ArgumentList $Exclusions

文件“C:\temp\Recycle TEST app pools Exclusions.txt”确实存在于远程计算机上,但是否也需要?如果列表可以工作,是否也可以将其传递给 Invoke-Command?

提前致谢

虽然将数组作为单个参数传递可能很困难,但您可以在这里利用它,因为无论如何您只有一种参数类型。

invoke-command -computername $server -ScriptBlock {Get-ChildItem –Path IIS:\AppPools -Exclude $args[0] | WHERE { $_.Name -like "*test*" } | restart-WebAppPool}} -ArgumentList $Exclusions

在此,您使用 $args[0],但这等同于 $Exclusions[0],因为数组中的所有项都已作为参数传递。

但如果它们都作为参数传递...那就是 $args。因此,请完全按照您在本地使用 $Exclusions 的方式使用它。

Invoke-Command `
  -ComputerName $server `
  -ArgumentList $Exclusions `
  -ScriptBlock {
    Get-ChildItem –Path "IIS:\AppPools" -Exclude $args |
      Where-Object Name -like "*test*" |
      Restart-WebAppPool
  }