Назад | Перейти на главную страницу

Исключение, вызывающее «UploadFile» с аргументом (ами) «2»: «Заголовок Content-Type не может быть задан как составной тип для этого запроса».

Я работаю со сценарием, который должен сначала проверить, жив ли компьютер, а затем FTP-файл на сервер. Однако при запуске скрипта я получаю следующую ошибку:

Исключение, вызывающее «UploadFile» с аргументом (ами) «2»: «Заголовок Content-Type не может быть установлен как составной тип для этого запроса».

Вот сценарий:

$down = "C:\Script\log\down-hosts.log"
$computers = Get-Content "C:\Script\list\Computers.txt"

$sourcefileName = "source_file.csv"

#ftp server 
$ftp = "sftp://servername" 
$user = "user" 
$pass = "pass"

$webclient = New-Object System.Net.WebClient
$webclient.Credentials = New-Object System.Net.NetworkCredential($user,$pass)

# Create empty log file for down hosts (overwrite if exists)
New-Item $down -type file -force

foreach ($computer in $computers) {
if ( Test-Connection -ComputerName $computer -Count 1 -ErrorAction SilentlyContinue ) {
  Write-Host "$computer is up"
  Write-Host "Uploading \\$computer\c$\UPS CSV Exports\$sourcefile..."
  $sourcefilePath = "\\$computer\c$\UPS CSV Exports"
  $uri = New-Object System.Uri($ftp+$computer+"_"+$sourcefileName)
  $webclient.UploadFile($uri,$sourcefilePath+"/"+$sourcefileName)
  if($? -eq $True) {
  write-host "$ftp$sourcefileName ok"
  Remove-Item $sourcefilePath"\"$sourcefileName
 }
} else {
  Write-Host "$computer is down"
  "$computer is down" | Out-File $down -append 
  }
}

Идея состоит в том, что сценарий находит файл, а затем загружает его на FTP-сервер. Если компьютер недоступен, он записывает в файл журнала, чтобы я знал, что нужно вручную получить файл.

Спасибо!

Я немного переписал скрипт, и он заработал без использования протокола FTP. Я изменил его, чтобы вместо этого использовать команду перемещения:

$down = "C:\Script\log\down-hosts.log"
$computers = Get-Content "C:\Script\list\Computers.txt"
$TargetPath = "\\ServerName\ShareName\Path"
$SourceFileName = "source_file.csv"
foreach ($computer in $computers) {
  if ( Test-Connection -ComputerName $computer -Count 1 -ErrorAction SilentlyContinue 
{
    $sourcefilePath = "\\$computer\c$\UPS CSV Exports\$SourceFileName"
    Write-Host "$computer is up"
    Write-Host "Copying $SourceFilePath ..."
    Try {
      If (Test-Path $SourceFilePath) {
         Move-Item $SourceFilePath "$TargetPath\$computer`_$SourceFileName" -force
      } Else {
         Throw "$SourceFilePath does not exist"
      }
    } Catch {
       Write-Host "Error: $($Error[0].Exception.Message)"
    }
  } Else {
    Write-Host "$computer is down"
    "$computer is down" | Out-File $down -append 
  }
}

После внесения изменений скрипт работает отлично!

Вы получаете вводящую в заблуждение ошибку, поскольку он, вероятно, пытается выполнить запрос POST на указанном вами сервере sftp.

Метод UploadFile отправляет локальный файл в ресурс. Этот метод использует команду STOR для загрузки FTP-ресурса. Для ресурса HTTP используется метод POST.

Ссылка: http://msdn.microsoft.com/en-us/library/36s52zhs(v=vs.110).aspx