在Powershell中格式化来自Invoke-WebRequest的输出

时间:2019-03-12 14:47:26

标签: powershell

信息

所以我要做的是刮擦我的本地Intranet,我们的人力资源团队在其中上传新的入门信息,并能够以可用格式保存该信息,或者将其导出为CSV,然后供其他脚本使用。

当前,我们的服务台团队手动查看此Intranet页面,并根据我们的人力资源团队输入的信息来创建用户。

自然,这是一个非常耗时的任务,可以轻松地自动化。不幸的是,由于他们正在关注的其他工作,我们的人力资源团队目前不愿意对流程进行任何更改。内部政治问题,令人遗憾的是他们无法被说服。

现在,我已经设法使用Invoke-WebRequest并获取了页面的内容,但是格式很糟糕。它作为HTML的负载返回,并且我正在遍历拆分和字符串替换的多个步骤,这对我来说并不是最佳选择,而且我觉得有更好的方法来获取所需的结果。

当前脚本

$webRequest = Invoke-WebRequest -Uri "http://intranet-site/HR/NewStarterList.php?action=ItToComp" -Headers @{"Header Info here"} -UseDefaultCredentials

$content = $webRequest.Content

$initialReplace = $content -replace '(?<=<).*?(?=>)', ' '
$split = $initialReplace -split "< >< >< >"
$split = $split -split "< >< >"
$split = $split -replace '< >',""
$split = $split[5..$($split.count)]

如您所见,这并不是很理想,我想知道是否有更好的方法来仅从页面中获取我需要的信息。

返回的初始内容如下(为了方便起见,我已缩写并替换了所有名称)

<html>
<head>
<title>New Starter List</title>
<link rel="STYLESHEET" type="text/css" href="/common/StyleSheet/Reports.css" /> <style> TD  {font-family: Verdana; font-size: 8pt; border-left: solid 0px black; border-right: solid 0px black;}    </style>
<script type="text/javascript" src="../../../cgi-bin/calendar/tableH.js"></script>
</head>
<body>
<img src="/common/images/logo.gif" border="0">
<br>
<br>
<b><span style="font-size: 12pt; font-variant: small-caps; ">New Starter List</span></b>
<br>Logged In As &quot;UserName&quot;<br>
<br>
<tableonMouseOver="javascript:trackTableHighlight(this.event,'FFFF66');"onMouseOut="javascript:highlightTableRow(0);" border="4" frame="border" width="80%" rules="none" cellspacing="6%" cellpadding="6%">
<th align="left">Date Started</th>
<th align="left">Name</th>
<th align="left">Initials</th>
<th align="left">Department</th>
<th align="left">Contact</th>
<th align="left">IT Completed?</th>
<th align="left">Supervisor Completed?</th>
<tr colspan="6"><td  align="left">25 Sep 2019</td>
<td  align="left"><a href="NewStarterInfo.php?id=3117">Joe Bloggs</a></td>
<td  align="left">JXBL</td>
<td  align="left">Team A</td>
<td  align="left">Manager 1</td>
<td  align="left">No</td>
<td  align="left">Yes</td></tr>
<tr colspan="6"><td  align="left">08 Jul 2019</td>
<td  align="left"><a href="NewStarterInfo.php?id=3149">Harry Bloggs</a></td>
<td  align="left">HXBL</td>
<td  align="left">Team B</td>
<td  align="left">Manager 2</td>
<td  align="left">No</td>
<td  align="left">Yes</td></tr>
<th align="left" colspan="7">72 starters</th>
</table>
</body>
</html>

运行拆分和替换后,如下所示(再次,名称已更改)

25 Sep 2019
Joe Bloggs
JXBL
Team 1
Manager 1
No
Yes
08 Jul 2019
Harry Bloggs
HXBL
Team 2
Manager 2
No
Yes
72 starters

然后想到的是能够利用这些信息来自动化我们的入职流程。

我觉得我缺少明显的东西,比如有一种更整洁或更有效的方法来完成此操作,因为这是我第一次使用Invoke-WebRequest并发现它仍然很麻烦。 / p>

预期结果

我想要的最好是一个用户数组,该数组具有每位信息的属性,例如CSV或PSObject。

因此,当我调用一个包含信息的变量时,我希望它返回如下内容:

Name              : Joe Bloggs
Initials          : JXBL
Department        : Team 1
Manager           : Manager 1
IT                : No
Supervisor        : No

StartDate         : 08 Jul 2019
Name              : Harry Smith
Initials          : HXSM
Department        : Team 2
Manager           : Manager 2
IT                : Yes
Supervisor        : No

类似问题

我只看到一个问题,它看起来可以满足我的要求,但最终导致需要“ try-catch”循环。 Similar Question Link

如果您需要进一步的信息或有任何疑问,请告诉我。

预先感谢您的帮助。

编辑

添加了预期结果,因为我意识到这是缺失的。

0 个答案:

没有答案