Start-Job 脚本块中的 if 语句
if statement in Start-Job scriptblock
我正在尝试使用 PowerShell 创建一个简单的网络扫描器,我希望它可以并行 运行 多个 "pings (or in this case test-connection)"。
Start-Job 似乎是完成这种多线程场景的最佳方式。
这是我正在尝试做的一个简化示例。
$list=@("192.168.1.1", "192.168.1.2", "192.168.1.3", "192.168.1.4")
ForEach ($item In $list) {
Start-Job -ScriptBlock {
if (Test-Connection $item -Quiet -Count 1) {
Add-Content -value "$item found" -Path C:\logs\test.txt
}
}
}
然而,这没有任何作用。
如果我删除 Start-Job 部分,它确实可以工作,但会失去其多处理功能。
如果我删除 if 语句,则写入文件部分有效。
所以问题似乎出在作业的脚本块中使用 if 语句时。
一定是我遗漏了 start-job 命令。
或者有没有更好的方法来创建这种脚本?
$item 在脚本块范围内不可用,因此您需要将值作为参数传入。
$list=@("192.168.1.1", "192.168.1.2", "192.168.1.3", "192.168.1.4")
ForEach ($item In $list) {
Start-Job -ScriptBlock {
param($item)
if (Test-Connection $item -Quiet -Count 1) {
Add-Content -value "$item found" -Path C:\logs\test.txt
}
} -argumentlist $item
}
我正在尝试使用 PowerShell 创建一个简单的网络扫描器,我希望它可以并行 运行 多个 "pings (or in this case test-connection)"。
Start-Job 似乎是完成这种多线程场景的最佳方式。
这是我正在尝试做的一个简化示例。
$list=@("192.168.1.1", "192.168.1.2", "192.168.1.3", "192.168.1.4")
ForEach ($item In $list) {
Start-Job -ScriptBlock {
if (Test-Connection $item -Quiet -Count 1) {
Add-Content -value "$item found" -Path C:\logs\test.txt
}
}
}
然而,这没有任何作用。 如果我删除 Start-Job 部分,它确实可以工作,但会失去其多处理功能。 如果我删除 if 语句,则写入文件部分有效。
所以问题似乎出在作业的脚本块中使用 if 语句时。
一定是我遗漏了 start-job 命令。 或者有没有更好的方法来创建这种脚本?
$item 在脚本块范围内不可用,因此您需要将值作为参数传入。
$list=@("192.168.1.1", "192.168.1.2", "192.168.1.3", "192.168.1.4")
ForEach ($item In $list) {
Start-Job -ScriptBlock {
param($item)
if (Test-Connection $item -Quiet -Count 1) {
Add-Content -value "$item found" -Path C:\logs\test.txt
}
} -argumentlist $item
}