如何使用PowerShell从文本文件中提取用户名、所有者、权限等特定值
PowerShell 文本字段提取实现方案
提取目标说明
- 仅由数字组成的用户名片段:从Username字段值中提取字母后的纯数字部分
- 所有者名称:Owner字段冒号后的完整值
- 权限配置信息:Default Privileges节点下的权限列表
实现代码
你可以直接使用switch -Regex逐行读取匹配文件内容,性能和可读性都比较好,示例代码如下:
# 初始化存储结果的对象 $extractResult = [PSCustomObject]@{ 纯数字用户名 = $null 所有者名称 = $null 权限配置 = @() } $privFlag = $false # 替换为你的实际文件路径 $targetFilePath = "C:\你的文件路径\data.txt" switch -Regex -File $targetFilePath { # 匹配包含Username和Owner的行,同时提取两个字段 '^Username:\s+[A-Za-z]*(\d+)\s+Owner:\s+(\S+)' { $extractResult.纯数字用户名 = $matches[1] $extractResult.所有者名称 = $matches[2].Trim() continue } # 匹配权限起始行,标记后续行需要提取权限 '^Default Privileges:' { $privFlag = $true continue } # 提取权限内容 { $privFlag } { $trimedLine = $_.Trim() if ($trimedLine) { $extractResult.权限配置 = $trimedLine -split '\s+' # 如果权限只有一行,提取完成后关闭标记,有多行的话可以去掉这行 $privFlag = $false } continue } } # 输出最终提取结果 $extractResult | Format-List
代码说明
- 如果你的文件包含多个用户的配置块,只需要在每个块结束的位置重置
$extractResult和$privFlag变量即可批量提取 - 正则规则可以根据你实际的文件格式微调,比如用户名前缀如果有特殊字符,调整
[A-Za-z]的匹配范围即可
内容的提问来源于stack exchange,提问作者Tarun
相关产品推荐
相关产品推荐

