我需要使用powershell从文本文件中获取某些值

我需要使用powershell从文本文件中获取某些值,powershell,text-parsing,Powershell,Text Parsing,我需要从具有类似数据类型的文本文件中获取特定值,如用户名(仅数字)、所有者名称(冒号后)和权限: Username: A044303 Owner: HUMARA_AZIZ_DA_201902 Account: CORPACCT UIC: [107,713] ([CORPACNT,A044303]) CLI: DCL Tab

我需要从具有类似数据类型的文本文件中获取特定值,如用户名(仅数字)、所有者名称(冒号后)和权限:

Username: A044303                          Owner:  HUMARA_AZIZ_DA_201902
Account:  CORPACCT                         UIC:    [107,713] ([CORPACNT,A044303])
CLI:      DCL                              Tables: 
NETMBX    TMPMBX
Default Privileges: 
  NETMBX    TMPMBX
如何使用powershell命令执行此操作?

试试这个

$test = "Username: A044303 Owner: HUMARA_AZIZ_DA_201902 Account: CORPACCT UIC: [107,713] ([CORPACNT,A044303]) CLI: DCL Tables: NETMBX TMPMBX Default Privileges: NETMBX TMPMBX"

if ($test -match "^Username: [a-zA-Z]([0-9]+) Owner: ([A-Z_]+[0-9]+)") {
   write-host "UserName: "$matches[1]
   write-host "Owner: "$matches[2]   
}

您可以使用以下方法:

  • 使用
    -split
    ,将内容拆分为属性名称及其值交替出现的数组
  • 通过处理生成的数组来填充(已排序)
然后,您可以使用属性(键)名称直接访问生成的哈希表,例如
.Username
(或
['Username']

输出
$htProps
会产生以下结果(
{…}
表示属性包含一个值数组):

名称值
----                           -----
用户名:A044303
业主:HUMARA_AZIZ_DA_201902
帐户:CORPACCT
UIC:{[107713],([CORPACNT,A044303]))
CLI:DCL
表:{NETMBX,TMPMBX}
默认权限:{NETMBX,TMPMBX}

例如,
$htProps.UserName
,然后返回
A044303

请允许我给你给新来者的标准建议:如果你有答案,你将通过向未来的读者展示解决问题的方法来帮助他们。要接受答案,请单击大标题✓ 答案左侧大数字下方的符号(您将获得2点声誉积分)。如果你至少有15个声望点,你也可以投票给其他有用的答案(也可以选择被接受的答案)。如果您的问题尚未解决,请提供反馈,或者,如果您自己找到了解决方案。
$htProps = [ordered] @{}
$i = 0; 
(Get-Content -Raw file.txt) -split '((?:Default )?\w+:)' -ne '' | ForEach-Object {
  if ($i++ % 2) { $htProps[$propName] = $(-split $_.Trim()) }  
  else          { $propName = $_ }
}