我有这个函数:
Function BuildDaHash($data){
$arr=@{}
$j=0
$k=0
For ($i=0; $i -lt $data.count; $i++){
if ($data[$i] -match 'nmap scan report') {
$arr[$j]=@{}
$arr[$j][$k] = $data[$i]
$i++
$k++
Do {
$arr[$j][$k] = $data[$i].Split(' ')[0]
$i++
$k++
} While ($data[$i] -notmatch 'nmap scan report' -and $i -lt $data.count)
$j++
$k=0
$i--
}
}
return $arr
}
该函数接收一个长字符串(Nmap扫描报告),并构建哈希表,以便我可以按以下方式进行处理: $arr [0] [0]的输出为192.168.20.10, 然后是端口,如:$arr [0] [1]=22; $arr [0] [2]=80等。
如果我从脚本中这样调用该函数:
BuildDaHash($string)
我将得到哈希表的输出,但如果我想把输出值存储到一个变量中以便进行操作,它就为空。也就是说,如果我这样做:
$test = BuildDaHash($string)
它变成空的了,我错过了什么?我认为可能是之前构建了一个空哈希的问题,像这样:
$tst =@{}
$tst = BuildDaHash($string)
但是它也是空的
*编辑 我知道Nmap有不同的格式可用,我正在使用默认的txt格式,我还有另一个函数,读取输出并返回一个只包含IP和开放/过滤端口的txt文件,这是$string的示例:
Nmap scan report for 11.11.111.111
21/tcp filtered ftp
179/tcp filtered bgp
646/tcp filtered ldp
Nmap scan report for 22.22.222.12
21/tcp filtered ftp
111/tcp filtered rpcbind
179/tcp filtered bgp
646/tcp filtered ldp
$test
可能不为空,但根据您尝试使用它的方式,它可能看起来为空。请添加如何检查$test
是否为空(一个好的测试是例如$test | ConvertTo-Json
)。还要添加一些示例输入数据($String = ?
)到您的问题中。参见:[mcve]。 - iRonBuildDaHash($string)
-->BuildDaHash $string
- Theo$data
参数类型定义为[string[]]
,否则$data[$i]
将会被解析为单个[char]
。 - Mathias R. Jessen