powershell - 如何使用 PowerShell 下载 protected 文件?

标签 powershell teamcity ntlm powershell-3.0 teamcity-7.0

我正在尝试使用 PowerShell 3.0 从我的 TeamCity 构建服务器下载文件。我已将 TeamCity 配置为使用 NTLM 身份验证,但无法直接下载文件并重定向到登录。

我正在尝试使用以下 PowerShell 代码下载文件。

$artifacts = "http://teamcity/repository/download/bt1/.lastSuccessful/%7Bbuild.number%7D.zip"
Invoke-WebRequest -Uri $artifacts -UseDefaultCredentials

我对请求的响应是重定向到登录页面。

最佳答案

这是的代码最终解决方案 .

$artifacts = "http://teamcity/repository/download/bt1/.lastSuccessful/%7Bbuild.number%7D.zip"
$login = "http://teamcity/ntlmLogin.html"
$dest = "Artifacts.zip"

$TeamCitySession = New-Object Microsoft.PowerShell.Commands.WebRequestSession
Invoke-WebRequest -Uri $login -WebSession $TeamCitySession -UseDefaultCredentials -UseBasicParsing
Invoke-WebRequest -Uri $artifacts -WebSession $TeamCitySession -UseBasicParsing -OutFile $dest

为了弄清楚发生了什么,我需要使用 Fiddler 来跟踪成功的请求是什么样的,还需要跟踪 PowerShell 中发生的事情。为了做到这一点,我必须让我的 PowerShell 请求使用它。以下是我如何从 PowerShell 中打开 Fiddler 跟踪。
Invoke-WebRequest -Uri $artifacts -UseDefaultCredentials -Proxy http://localhost:8888/

通过在命令中添加 -Proxy 参数,它告诉他命令使用 Fiddler 作为代理服务器。

从这里我看到 TeamCity 将我重定向到登录页面。由于我打开了 NTLM 身份验证,因此您可以浏览一个特殊页面以登录。所以我想从这里做的是访问这个登录页面,然后使用我返回的 cookie 下载文件,因为 TeamCity 使用 cookie 来跟踪身份验证状态。

事实证明,Invoke-WebRequest cmdlet 还允许您使用 Web session 连接它们。有两种方法可以使用 -WebSession 或 -SessionVariable 参数来完成此操作。经过一些试验和错误,结果证明如果您使用 -SessionVariable 参数,它将在每次请求后覆盖 session 变量,因此它实际上不会共享状态。显然,这不是我正在寻找的行为。相反,我必须使用 -WebSession 参数,然后我可以将登录和文件下载链接在一起。一旦我这样做了,那么一切都开始工作了。

关于powershell - 如何使用 PowerShell 下载 protected 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14242139/

相关文章:

web-services - 如何在 powershell 中创建由 webservice 工厂函数定义的对象?

powershell - 如何在发生某些外部事件之前暂停 Powershell 脚本?

powershell - PowerShell 中的 OAuth2.0 授权代码流

Android:在 TeamCity 服务器上运行仪器化测试

ios - 设置 TeamCity 以集成到 OSX Build Agent

java - 尽管 Ubuntu 上的用户名和密码正确,但 jcifs.smb.SmbAuthException

asp.net - SignalR 不支持 Windows 集成身份验证

powershell - 通过管道传递多个值

teamcity - 有没有办法在 TeamCity 中强制为参数设置默认值,并且一旦设置了不同的值就不会丢失它?

asp.net - NTLM 和自动匿名身份验证 IIS