所以我要做的是刮擦我的本地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 "UserName"<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
如果您需要进一步的信息或有任何疑问,请告诉我。
预先感谢您的帮助。
添加了预期结果,因为我意识到这是缺失的。