powershell - 如何使用 PowerShell 从 txt 文件中提取一些文本?
问题描述
我有下面的文字,想从中提取一些数据:
- 名
- 姓
- 标题
- 部门
- 分配
- 移动的
- IP电话分机
- 直属经理
<UserInputs>
<UserInput Question="Service Type" Answer="User Account Management" Type="string" />
<UserInput Question="User Account Management" Answer="New User Account" Type="string" />
<UserInput Question="User Account - First Name " Answer="John" Type="string" />
<UserInput Question="User Account - Last Name" Answer="Snow" Type="string" />
<UserInput Question="User Account - Title" Answer="Officer" Type="string" />
<UserInput Question="User Account - Department" Answer="IT" Type="string" />
<UserInput Question="User Account - Division" Answer="Infratructure" Type="string" />
<UserInput Question="User Account - Mobile" Answer="+962799999993" Type="string" />
<UserInput Question="User Account - IP Phone Extension" Answer="8879" Type="string" />
<UserInput Question="User Account - Direct Manager" Answer="<Values Count="1"><Value DisplayName="Jack" Id="8c75d26a-2eaf-7e45-9139-178b88c42d6d"/></Values>" Type="System.SupportingItem.PortalControl.InstancePicker" />
<UserInput Question="Urgency" Answer="b02d9277-a9fe-86f1-e95e-0ba8cd4fd075" Type="enum" />
</UserInputs>
我尝试过类似的split
方法,但它不起作用(获取一些值Null
)你能帮我吗?
解决方案
您可以为此使用 Powershells XML 功能
读入带有[xml]$xml = Get-Content -Path '<Path to the xml file>' -Raw
此处的文本文件,我使用“此处字符串”伪造了该文件
[xml]$xml = @"
<UserInputs>
<UserInput Question="Service Type" Answer="User Account Management" Type="string" />
<UserInput Question="User Account Management" Answer="New User Account" Type="string" />
<UserInput Question="User Account - First Name " Answer="John" Type="string" />
<UserInput Question="User Account - Last Name" Answer="Snow" Type="string" />
<UserInput Question="User Account - Title" Answer="Officer" Type="string" />
<UserInput Question="User Account - Department" Answer="IT" Type="string" />
<UserInput Question="User Account - Division" Answer="Infratructure" Type="string" />
<UserInput Question="User Account - Mobile" Answer="+962799999993" Type="string" />
<UserInput Question="User Account - IP Phone Extension" Answer="8879" Type="string" />
<UserInput Question="User Account - Direct Manager" Answer="<Values Count="1"><Value DisplayName="Jack" Id="8c75d26a-2eaf-7e45-9139-178b88c42d6d"/></Values>" Type="System.SupportingItem.PortalControl.InstancePicker" />
<UserInput Question="Urgency" Answer="b02d9277-a9fe-86f1-e95e-0ba8cd4fd075" Type="enum" />
</UserInputs>
"@
# The 'Direct Manager' has two properties we need to filter out.
$manager = ($xml.UserInputs.UserInput | ? { $_.Question -match 'Direct Manager\s*$' }).Answer
$managerName = $managerId = 'Unknown'
if ($manager -match 'DisplayName=(?:"|")(?<name>[^&"]+).+Id=(?:"|")(?<id>[^&"]+)') {
$managerName = $matches['name']
$managerId = $matches['id']
}
# Create an object of the info for output
[PSCustomObject]@{
'First tName' = ($xml.UserInputs.UserInput | Where-Object { $_.Question -match 'First Name\s*$' }).Answer
'Last Name' = ($xml.UserInputs.UserInput | Where-Object { $_.Question -match 'Last Name\s*$' }).Answer
'Title' = ($xml.UserInputs.UserInput | Where-Object { $_.Question -match 'Title\s*$' }).Answer
'Department' = ($xml.UserInputs.UserInput | Where-Object { $_.Question -match 'Department\s*$' }).Answer
'Division' = ($xml.UserInputs.UserInput | Where-Object { $_.Question -match 'Division\s*$' }).Answer
'Mobile' = ($xml.UserInputs.UserInput | Where-Object { $_.Question -match 'Mobile\s*$' }).Answer
'IP Phone Extension' = ($xml.UserInputs.UserInput | Where-Object { $_.Question -match 'IP Phone Extension\s*$' }).Answer
'Direct Manager Name' = $managerName
'Direct Manager Id' = $managerId
}
这将产生:
First Name : John
Last Name : Snow
Title : Officer
Department : IT
Division : Infratructure
Mobile : +962799999993
IP Phone Extension : 8879
Direct Manager Name : Jack
Direct Manager Id : 8c75d26a-2eaf-7e45-9139-178b88c42d6d
希望有帮助
推荐阅读
- java - 以相同的方式解析文件和命令行选项
- extjs - 当我们单击网格列即单击网格列时,自定义日期排序不起作用
- reactjs - 将主题合并到 react-minimal-pie-chart 中不起作用
- django - 未找到 gunicorn 静态文件
- javascript - 为什么我的 3D 模型没有使用 glTF 加载器在 three.js 中加载?
- xsl-fo - XSL-FO 到 PDF 的翻译产生了意想不到的结果
- angular - 在 Angular 2 应用程序中存储和跟踪私人聊天消息的最佳方式
- c# - 使用 Skype 机器人进行音频通话
- python - 数字取反
- javascript - 在第一次请求失败后,我如何设法提出不同的请求