Я работаю со сценарием, который должен сначала проверить, жив ли компьютер, а затем 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