0

免责声明:我是一个 Powershell 菜鸟,所以请原谅任何缺乏清晰度或糟糕的脚本实践

TL;博士

有没有一种方法可以运行Invoke-RestMethod -Uri $uri -Authentication Basic -Credentials $cred一次,而不必在后续命令中使用-Credentialsor-Authentication标志Invoke-RestMethod来访问同一个 API?

目标

我试图弄清楚如何减少在 Powershell 中运行的每个脚本的登录次数。API 似乎不喜欢我登录这么多来执行 GET HTTP 请求,因为它通知我我的帐户上的密码已过期,尽管密码过期未应用。如果修复也加快了脚本的速度,那是一个好处,但我想这更多地取决于 API 响应时间。

关于平台

由于隐私问题,我不想透露太多关于平台的信息,除非我必须这样做,但这里是基本结构:

每个客户/企业都被视为一个“企业”,每个企业至少有 1 个“站点”。大多数企业只有 1 个站点,每个站点有 6 到 200 个用户,但有些企业最多有 7 个站点。这意味着一些企业拥有接近600个用户。

不幸的是,该平台没有关于我正在使用的 API 的任何文档(我已经请求他们支持但没有运气)。如果没有一些屏幕抓取工具,我们也无法通过门户网站 GUI 导出我们需要的信息。我们更喜欢使用平台 API 的脚本方法,因此我负责编写该脚本。

由于缺乏来自平台支持的帮助和很少的文档,我正在通过在测试站点上登录我们的管理门户、更改设置并检查 .har 文件以查看 GET 请求的 URL 来确定所有正确的 URL为了得到我需要的信息。这很乏味,但从长远来看,它可以为我们节省平台迁移的时间。

此外,我发现该平台使用 REST API 和基本身份验证。

关于剧本

我正在循环使用Invoke-RestMethod -Uri $uri -Authentication Basic -Credentials $credforeach获取信息,然后将其保存到自定义对象中以进行导出。由于当前平台的结构方式,我必须为每个用户执行 5 个 HTTP GET 请求来获取我们需要的信息,每个用户大约需要 4 秒。

使用网络浏览器时,我只需要登录一次,它就会记住我的凭据,那么为什么不一样Invoke-RestMethod呢?我四处寻找,找不到任何有用的东西。

如果有办法使每个后续Invoke-RestMethod命令都不需要-Credentials标志来减少每个脚本运行的登录次数,那将是理想的。如果它恰好也加快了脚本的速度,那就更好了。

4

0 回答 0