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 -scriptblock $testPort -ArgumentList $i
}
Get-Job | Wait-Job
$out = Get-Job | Receive-Job
$out
所以在这个例子中,我想从端口 1 扫描 ip 地址 192.168.0.137 到 100。但是当我运行它并显示我的工作结果时,我得到了这个错误
You cannot call a method on a null-valued expression.
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
+ PSComputerName : localhost
有人知道我该如何解决这个问题吗?
解决方案
尽管您在评论中发现了问题,但请快速说明一下 - 在您的情况下使用作业确实是矫枉过正。每个作业都会创建子进程,并且会占用你几 MB 的内存。您已经在使用任务(通过调用 Async 方法),所以坚持下去。例如
$tasks = foreach($i in 1..100) {
$tcpClient = [System.Net.Sockets.TcpClient]::new()
$tcpClient.ConnectAsync($ipadres, $i)
}
[System.Threading.Tasks.Task]::WaitAll($tasks)
$tasks | select id, status, result | format-table
推荐阅读
- java - 如何创建和存储从 Java GUI 获取输入的对象?
- python - 如何使用 mysql 连接器创建 sql 连接以通过 df.to_sql() 写入数据库
- python - 将多维 numpy 数组中的列提高到 2 次方
- sqlite - QSortFilterProxyModel 仅对获取的数据进行排序
- c++ - 使用未实现的字符串的二进制搜索功能
- javascript - 未捕获的错误:不匹配的匿名 define() 模块:function() {return uuid;}
- time-series - 如何使用谷歌数据工作室中的表格数据集计算随时间的变化率?
- python - 如何处理 Excel 中的文本框弹出窗口?
- javascript - JavaScript 类 -> 数组迭代
- pdf - 有没有办法使用检查元素在 Chrome 或 firefox 中编辑 PDF?