Invoke-Command需要很长时间,但只是偶尔
Invoke-Command takes a long time, but only occasionally
我有一个使用 Invoke-Command
的 PowerShell 脚本,它已经使用了大约一年,突然出现了非常糟糕的性能问题。 运行 通常需要 1 到 2 秒,现在大约需要 90 秒。令人困惑的是,它并不 总是 需要很长时间。事实上,我今天已经对其进行了多次测试,并发现它 运行 在 10-20 分钟的时间内每次尝试都完美无缺,然后在接下来的 20-40 分钟内又变得异常缓慢分钟测试时间。
简单看一下我的测试代码:
$cred = New-Object System.Management.Automation.PSCredential $username, $securePassword
Write-Host "Running command..."
Invoke-Command -ComputerName $target -Credential $cred -ScriptBlock {
Write-Host "Hello"
}
Write-Host "Done"
结果的时间是这样的:
"Running command..."
65 秒...
"Hello"
25 秒...
"Done"
对于这个的用法,我需要等待进程然后才能看到命令的结果所以我不能只把 -AsJob
扔进脚本而不等待输出.我应该寻找什么来找到减慢速度的原因?我在缓慢响应期间检查了目标机器,没有发现异常 CPU 或内存使用情况。
我想我终于找到了造成这种情况的 部分 的原因...答案与我在最初的问题中没有提供的一些细节有关。
我的脚本的目标机器是域控制器,网络设置有两个域控制器(用于容错)。如果我调用 -ComputerName "my.domain.com",我偶尔会看到长时间的延迟......但是如果我 只使用机器的 IP 地址 而不是域名,它会通过立即。
我仍然不知道为什么这只是现在才开始出现问题,真正的根本问题是什么......但这给了我一些东西至少让脚本在我们可以升级我们的环境之前工作。
我有一个使用 Invoke-Command
的 PowerShell 脚本,它已经使用了大约一年,突然出现了非常糟糕的性能问题。 运行 通常需要 1 到 2 秒,现在大约需要 90 秒。令人困惑的是,它并不 总是 需要很长时间。事实上,我今天已经对其进行了多次测试,并发现它 运行 在 10-20 分钟的时间内每次尝试都完美无缺,然后在接下来的 20-40 分钟内又变得异常缓慢分钟测试时间。
简单看一下我的测试代码:
$cred = New-Object System.Management.Automation.PSCredential $username, $securePassword
Write-Host "Running command..."
Invoke-Command -ComputerName $target -Credential $cred -ScriptBlock {
Write-Host "Hello"
}
Write-Host "Done"
结果的时间是这样的:
"Running command..."
65 秒...
"Hello"
25 秒...
"Done"
对于这个的用法,我需要等待进程然后才能看到命令的结果所以我不能只把 -AsJob
扔进脚本而不等待输出.我应该寻找什么来找到减慢速度的原因?我在缓慢响应期间检查了目标机器,没有发现异常 CPU 或内存使用情况。
我想我终于找到了造成这种情况的 部分 的原因...答案与我在最初的问题中没有提供的一些细节有关。
我的脚本的目标机器是域控制器,网络设置有两个域控制器(用于容错)。如果我调用 -ComputerName "my.domain.com",我偶尔会看到长时间的延迟......但是如果我 只使用机器的 IP 地址 而不是域名,它会通过立即。
我仍然不知道为什么这只是现在才开始出现问题,真正的根本问题是什么......但这给了我一些东西至少让脚本在我们可以升级我们的环境之前工作。