gpt4 book ai didi

powershell - 为什么我的变量在Invoke-Command中显示为空

转载 作者:行者123 更新时间:2023-12-03 01:12:10 25 4
gpt4 key购买 nike

我制作了这个简短的脚本来监视,并在需要时在一些服务器上重新启动打印机后台处理程序

$c = Get-Credential
$servers = 'FQDN1', 'FQDN2', 'FQDN3'
foreach ($s in $servers){
Invoke-Command -ComputerName $s -Credential $c {$j = (Get-PrintJob -PrinterName 'Test Printer').count
Write-Host "On computer $s there are $j print jobs"
If ($j -gt 5){
Write-Host "About to restart the printer spooler on $s"
Restart-Service 'Spooler'
}
} # end of invoke-command
} # end of foreach

我不明白的是为什么 Write-Host不写服务器名称( $s),而是写作业数( $j)。

我想这与远程 session 中的变量有关,而与本地 session 中的变量无关。
但是我真的无法理解到底是什么问题。

最佳答案

没错,您必须将变量传递给脚本块才能访问它。

为此,您必须在脚本块的开头定义一个Param()节,并使用-ArgumentList参数传递参数(服务器):

$c = Get-Credential
$servers = 'FQDN1', 'FQDN2', 'FQDN3'
foreach ($s in $servers){
Invoke-Command -ComputerName $s -Credential $c -ScriptBlock {
Param($s)
$j = (Get-PrintJob -PrinterName 'Test Printer').count
Write-Host "On computer $s there are $j print jobs"
If ($j -gt 5){
Write-Host "About to restart the printer spooler on $s"
Restart-Service 'Spooler'
}
} -ArgumentList $s # end of invoke-command
} # end of foreach

关于powershell - 为什么我的变量在Invoke-Command中显示为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37806486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com