【问题标题】:DownloadString with basic auth similar to psget's具有类似于 psg​​et 的基本身份验证的 DownloadString
【发布时间】:2013-04-24 20:59:20
【问题描述】:

任何人都知道我可以如何修改下面的 DownloadString,以便我也可以传递基本的身份验证凭据吗?

我正在使用与 PsGet (http://psget.net/) 相同的技术来下载我自己的内部脚本并即时执行它们。但是,我的服务器使用基本身份验证进行保护。我无法应用凭据并仍在使用 Invoke-Expression 执行该行。

当我使用“powershell.exe -Command...”执行它时,我需要它在一行中

(new-object Net.WebClient).DownloadString("http://psget.net/GetPsGet.ps1") |即日

【问题讨论】:

    标签: powershell powershell-2.0 powershell-3.0


    【解决方案1】:

    您不能在一行中完成(好吧,除非您将其包装为 cmdlet),但提供所需的凭据很容易:

    $wc = New-Object System.Net.WebClient
    $wc.Credentials = New-Object System.Net.NetworkCredential "user","pass"
    $wc.DownloadString("http://psget.net/GetPsGet.ps1") | iex
    

    【讨论】:

    • Mmm 不幸的是,我需要在一行中使用它,因为我想使用 powershell.exe 远程执行它并且我无法轻松传输 cmdlet。我得另寻他法。谢谢
    • 您可以使用分号将多个命令串在一行中:"$wc.UseDefaultCredentials = $true ; wc.DownloadString('')"
    • @NabilS 你可以检查 ScriptBlock 参数,它允许发送多行脚本
    • 谢谢迈克。这真的很有用
    【解决方案2】:

    尝试在 WebClient 上设置授权标头:

    $wc = New-Object -TypeName System.Net.WebClient
    $cred = 'bob:password'
    $enc_cred = [convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($cred))
    $wc.Headers.Add("Authorization","Basic $enc_cred")
    $wc.DownloadString("http://localhost:81/") | Invoke-Expression
    

    注意 - base64 中的凭据字符串未加密。

    【讨论】:

    • 我能否将上述内容作为入口长字符串传递给 powershell.exe 的 -command 参数。我试过没有运气。
    猜你喜欢
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 2014-04-24
    • 2019-09-27
    • 2013-03-03
    相关资源
    最近更新 更多