将从文件读取的变量传递给 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
}
我正在努力通过名称中带有“测试”一词的 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
}