我有一个白名单表(txt文件),其格式为注释和IP地址对,如下所示:
comment about 1.2.3.4
1.2.3.4
comment about 5.6.7.8
5.6.7.8
我正在尝试从文本文件中获取内容并创建对的哈希表的方式,其中IP地址为键/名称,注释为值(因为我不在乎关于评论的唯一性。
我已经弄清楚了如何使用无重复的伪白名单创建一个以注释为键,IP为值的哈希表。但是我的实际白名单中有大量重复的评论。否则,我只会这样做,然后反转哈希值。在创建哈希之前,我需要像下面那样将行配对。我只是停留在如何翻转评论和IP上。
Get-Content $whitelist -ReadCount 2 | ForEach-Object{($_ | Where{![String]::IsNullorEmpty($_)}) -Join "="} > $joinedTable
$hash = Get-Content -Path $joinedTable -Raw | ConvertFrom-StringData
答案 0 :(得分:0)
我认为这将满足您的要求
$whitelist = 'PATH TO THE WHITELIST.TXT FILE'
# read the whitelist.txt file as string array and skip empty or whitespace-only lines
$data = @(Get-Content $whitelist) -match '\S'
$whiteHash = @{}
for ($i = 0; $i -lt $data.Count -1; $i += 2){
$key = $data[$i + 1].Trim()
$whiteHash[$key] = $data[$i].Trim()
}
$whiteHash
输出
Name Value ---- ----- 1.2.3.4 comment about 1.2.3.4 5.6.7.8 comment about 5.6.7.8
答案 1 :(得分:0)
您可以使用带有模式的convertfrom-string,如下所示:
$pattern=@"
{Comment*:A comment 1}
{IP:IP1}
{Comment*:A other comment 2}
{IP:IP2}
"@
Get-Content "c:\temp\test.txt" | ConvertFrom-String -TemplateContent $pattern
答案 2 :(得分:0)
要从我的评论中回答,
[1,0]
反转输入线对的顺序$whitelist = '.\whitelist.txt'
$hash = Get-Content $whitelist -ReadCount 2 | ForEach-Object{
($_ | Where{![String]::IsNullorEmpty($_)})[1,0] -Join "="
} | ConvertFrom-StringData
$hash