Powershell:不能对空值表达式调用方法

Powershell:不能对空值表达式调用方法,powershell,Powershell,我有个问题。我正在做一个端口扫描器,我想为它扫描的每一个端口做作业,如果它打开与否 $endport = 100 $timeout = 100 $ipadres = "192.168.0.137" $testPort = { Param($port) $tcpClient.ConnectAsync($ipadres, $port).Wait($timeout) } For($i=1; $i -le $endport; $i++) { Start-Job -script

我有个问题。我正在做一个端口扫描器,我想为它扫描的每一个端口做作业,如果它打开与否

$endport = 100
$timeout = 100
$ipadres = "192.168.0.137" 

$testPort = { 
Param($port)
    $tcpClient.ConnectAsync($ipadres, $port).Wait($timeout)
} 


For($i=1; $i -le $endport; $i++) {
    Start-Job -scriptblock $testPort -ArgumentList $i 
}
Get-Job | Wait-Job 
$out = Get-Job | Receive-Job 
$out
所以在这个例子中,我想扫描端口1到100的ip地址192.168.0.137。但是当我运行这个并显示我的作业结果时,我得到了这个错误

You cannot call a method on a null-valued expression.
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
    + PSComputerName        : localhost

有人知道我该如何解决这个问题吗?

尽管你在评论中发现了这个问题,但仅仅是一个简短的提示——在你的案例中使用乔布斯真是太过分了。每个作业都将创建子进程,并占用少量MB内存。您已经在使用task(通过调用Async方法),所以请继续使用它。比如说


$tasks=foreach($1..100中的i){
$tcpClient=[System.Net.Sockets.tcpClient]::new()
$tcpClient.ConnectAsync($ipadres,$i)
}
[System.Threading.Tasks.Task]::WaitAll($Tasks)
$tasks |选择id、状态、结果|格式表

$tcpClient
初始化了吗?哦,天哪,我真蠢。。。谢谢你!