在PowerShell 5.1中提取文本文件内指定AP的BSS、ESS数据
PowerShell 5.1 处理AP文本文件并导出指定CSV
假设文本文件格式示例
先明确常见的AP记录格式(如果你的文件格式不同,可调整正则匹配规则):
AP name: AP-Office-01 BSS: aa:bb:cc:dd:ee:01 ESS: trustedwifi AP name: AP-Lobby-01 BSS: aa:bb:cc:dd:ee:02 ESS: guest AP name: AP-Storage-01 BSS: aa:bb:cc:dd:ee:03 ESS: internalwifi
解决方案代码
# 定义需要筛选的ESS值 $targetESS = "trustedwifi", "guest" # 指定要处理的文本文件路径(可替换为你的目录或文件列表) $inputFiles = Get-ChildItem -Path "C:\AP_Files\*.txt" # 存储结果的数组 $results = @() foreach ($file in $inputFiles) { # 读取文件内容,按空行分割成单个AP记录 $apRecords = (Get-Content -Path $file.FullName -Raw) -split '(?m)^\s*$' | Where-Object { $_ -match '\S' } foreach ($record in $apRecords) { # 用正则提取AP name、BSS、ESS字段 $apName = [regex]::Match($record, 'AP name:\s*(.*)').Groups[1].Value.Trim() $bss = [regex]::Match($record, 'BSS:\s*(.*)').Groups[1].Value.Trim() $ess = [regex]::Match($record, 'ESS:\s*(.*)').Groups[1].Value.Trim() # 只保留目标ESS的记录 if ($targetESS -contains $ess) { $results += [PSCustomObject]@{ "AP Name" = $apName "BSS" = $bss "ESS" = $ess "Source File" = $file.Name # 可选:添加来源文件名 } } } } # 导出为CSV文件(路径可自定义) $results | Export-Csv -Path "C:\AP_Files\Filtered_APs.csv" -NoTypeInformation -Encoding UTF8
关键说明
- 文本格式适配:如果你的AP记录不是按空行分隔,或者字段名不同(比如"AP Name"而非"AP name"),只需调整
-split的分隔符和正则表达式中的字段匹配部分。 - 正则匹配优化:如果BSS是严格的MAC地址格式,可把BSS的正则改为
BSS:\s*([0-9a-fA-F:]{17})来精准匹配。 - PowerShell 5.1兼容:代码完全基于5.1语法编写,无需额外模块。
- 编码处理:导出CSV时指定
-Encoding UTF8避免中文乱码(如果你的AP名称包含中文)。
另一种常见格式处理(每行一条完整记录)
如果你的文本文件是每行包含所有字段,比如:
AP-Office-01,aa:bb:cc:dd:ee:01,trustedwifi AP-Lobby-01,aa:bb:cc:dd:ee:02,guest AP-Storage-01,aa:bb:cc:dd:ee:03,internalwifi
可使用更简洁的代码:
$targetESS = "trustedwifi", "guest" Get-Content -Path "C:\AP_Files\*.txt" | ForEach-Object { $fields = $_ -split ',' if ($targetESS -contains $fields[2].Trim()) { [PSCustomObject]@{ "AP Name" = $fields[0].Trim() "BSS" = $fields[1].Trim() "ESS" = $fields[2].Trim() } } } | Export-Csv -Path "C:\AP_Files\Filtered_APs.csv" -NoTypeInformation -Encoding UTF8
内容的提问来源于stack exchange,提问作者joe williams III
相关产品推荐
相关产品推荐

