【发布时间】:2018-05-28 14:56:28
【问题描述】:
我需要过滤变量的内容以从SubnetExceptions.txt文件中排除所有匹配字符串的行作为过滤器,就像grep -v命令一样。
$Valuevariable 经历了很多处理以达到我需要的格式。
代码的工作部分如下:
$Value=netsh dhcp server show mibinfo | findstr "Subnet Addresses"
$Value=$Value -replace "Subnet","% `n Subnet"
$Value=$Value -replace "No. of Addresses in use","AddressesInUse"
$Value=$Value -replace "No. of free Addresses","AddressesFree"
$Value=$Value -replace '^.|.$', ' '
$Value=$Value -replace ' ', ""
$Value=$Value -replace ' ', " "
$Value= -join $Value
$Value=$Value -replace '\n', ''
$Value=$Value -replace "% ", "`n"
$Value=$Value -replace ' = ', '='
ps1 的前 11 行处理该命令的输出 ($Value):
到这里:
子网=10.1.8.0 AddressesInUse=11 AddressesFree=18 子网=10.1.9.0 AddressesInUse=1 AddressesFree=201 子网=10.1.11.0 AddressesInUse=188 AddressesFree=61 子网=10.1.12.0 AddressesInUse=207 AddressesFree=44 子网=10.1.13.0 AddressesInUse=149 AddressesFree=100这些替换行适用于换行符、点、空格和“variable=value”格式。我需要将子网值放在同一行中,这样我就可以将它们过滤掉,从而进行字符串处理。
该命令的实际输出为 278 行,其中更多行相同,因此我将其修剪为 5 行以使其最小化,以便在实验室中重现它。
过滤器文件(C:\Scripts\SubnetExceptions.txt)的内容如下:
10.1.12.0 10.1.13.0这是我要过滤掉的最后两个子网值。这就是迄今为止已经测试过的内容(将其添加到上述处理方法的正下方):
$Filter = (Get-Content '.\SubnetExceptions.txt' |
ForEach-Object {[regex]::Escape($_)}) -join '|'
($Value) -notmatch $Filter | Set-Content '.\output.txt'
预期的结果应该是:
子网=10.1.8.0 AddressesInUse=11 AddressesFree=18 子网=10.1.9.0 AddressesInUse=1 AddressesFree=201 子网=10.1.11.0 AddressesInUse=188 AddressesFree=61由于过滤器,最后两行将被删除,但输出文件只写入值“false”。
【问题讨论】:
标签: powershell replace scripting windows-scripting