【问题标题】:Need a one-liner powershell command to download a file with basic authentication需要一个单行 powershell 命令来下载具有基本身份验证的文件
【发布时间】:2020-03-03 00:48:31
【问题描述】:

设置一些 CI 内容。我需要一个单行 powershell 命令来从服务器下载具有基本身份验证的文件。

我可以通过这样的未经身份验证的请求来做到这一点:

iex ((New-Object Net.Webclient).DownloadString('http://myhost.example/resource.etc'))

除了身份验证,我将如何做同样的事情?从How to make an authenticated web request in Powershell?,我可以看到我需要一个 NetworkCredential,只是想弄清楚如何将其压缩为单个命令。

【问题讨论】:

  • 如果您真的想要一行,您可以使用Invoke-RestMethod 并将凭据的 Base64 转换填充到一个表达式中。不会赢得任何选美比赛,但是,嘿。一般来说,如果你真的想要最后的单行,你最好编写自己的 cmdlet,将它们放在脚本中,并确保它由你的 CI 管道导入,这样你就可以在全球范围内使用它们。这也将防止大量的复制粘贴,否则会产生神秘的单行字(如果有错误,祝你好运)。
  • 目标应该是记录成功的、可重复的过程。这使得其他人(以及我们自己在 6 个月内)能够在不重新发明轮子的情况下取得成功。单行代码可能是一种有趣的脑力练习,但它们的价值远不如易于阅读和理解的代码。
  • 这一切都很好,但很傲慢,与问题无关。由于显然在 powershell 中执行此操作将是一个难以理解的混乱(尽管我觉得这很难相信),我可能只会使用 curl 来代替。
  • 它高度 depends on what you consider "intelligible"。 (只需将其中的所有变量替换为它们的表达式,就可以了。)
  • 请参阅this answer 以获取有关如何获取基本身份验证标头并在Invoke-RestMethod 中使用它的示例。 WebClient.Headers 可以添加到,但据我所知,不能在 New-Object -Property Hashtable 中指定。

标签: powershell


【解决方案1】:

这是使用 oneliner powershell 的身份验证下载字符串的方法

iex(((new-object System.Net.WebClient).Credentials = new-object System.Net.NetworkCredential($username, $password, $domain)).DownloadString($url))

【讨论】:

    猜你喜欢
    • 2014-06-18
    • 2018-12-11
    • 2021-04-10
    • 2021-10-10
    • 1970-01-01
    • 2019-03-25
    • 2022-01-10
    • 2019-12-17
    • 2019-07-20
    相关资源
    最近更新 更多