我正在尝试建立一个服务,我可以使用 Microsoft BITS 将许多文件传输到我们的 IIS 服务器。
我已经在 IIS 服务器上安装了所需的组件并成功上传了几个文件,但是一旦我将身份验证添加到虚拟目录,它就不可靠了。
我正在使用此代码片段进行传输:
Get-ChildItem $sourcePath | % {
try
{
Start-BitsTransfer -Source $_.FullName -Destination "$destinationPath/$_" -TransferType Upload -Authentication Basic -Credential $credentials
}
catch
{
$_
}
}
如果我省略身份验证和凭据参数并启用匿名身份验证,它每次都有效。
如果我关闭匿名身份验证,添加基本身份验证并设置$credentials
为我的域和用户名,它会要求输入密码并且每次都有效。与摘要身份验证相同。
如果我使用基本身份验证并使用以下代码设置凭据,它会第一次工作,然后失败。如果我稍等片刻再试一次,它有时会重置并第一次工作,然后失败。与摘要身份验证相同。
我用来设置凭据的代码如下:
$username = "mydomain\myuser"
$password = "mypassword"
$securePassword = ConvertTo-SecureString -String $password -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PSCredential -ArgumentList ($username, $securePassword)
它失败时给出的错误是:
Start-BitsTransfer : Value does not fall within the expected range.
At D:\Projects\Powershell\MoveFiles.ps1:48 char:9
+ Start-BitsTransfer -Source $_.FullName -Destination "$destinationPath/$_ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Start-BitsTransfer], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException,Microsoft.BackgroundIntelligentTransfer.Management.NewBitsTransferCommand
无论我使用 HTTP 还是 HTTPS,结果都是相同的,并且失败的尝试不存在于 IIS 日志中。
有没有人知道问题是什么?我认为这是一个 Powershell 问题,因为如果我输入密码而不是在 Powershell 中设置它,它确实可以工作。
我发现的最后一点信息......我使用 Sharp BITS 编写了一个简单的 BITS 上传程序,它没有任何问题。