Exceção chamando “UploadFile” com “2” argumento (s): “O cabeçalho Content-Type não pode ser configurado para um tipo de multipartes para esta solicitação.” [duplicado]

1

Eu estou trabalhando com um script que deve primeiro verificar se um PC está vivo, então FTP um arquivo para um servidor. No entanto, ao executar o script, estou recebendo o seguinte erro:

Exceção chamando "UploadFile" com "2" argumento (s): "O cabeçalho Content-Type não pode ser configurado para um tipo de multiparte para esta requisição."

Aqui está o script:

$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 
  }
}

A ideia é que o script encontre o arquivo e faça o upload para o servidor FTP. Se o PC não estiver disponível, ele gravará em um arquivo de log para que eu saiba recuperar manualmente o arquivo.

Obrigado!

    
por DangeRuss 15.08.2014 / 17:48

2 respostas

1

Eu reescrevi um pouco o script e consegui que ele funcionasse sem usar o protocolo FTP. Eu mudei para usar o comando move em vez disso:

$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 
  }
}

Depois de fazer as alterações, o script funciona perfeitamente!

    
por 20.08.2014 / 15:38
0

Você está recebendo um erro enganoso, pois provavelmente está tentando executar uma solicitação POST no back-end do sftp que você especificou.

The UploadFile method sends a local file to a resource. This method uses the STOR command to upload an FTP resource. For an HTTP resource, the POST method is used.

Referência: link

    
por 15.08.2014 / 23:06