PowerShell:FTP上传整个
我想上传2个文件从我的电脑上的目录到ftp服务器 这不起作用。有人有主意吗? 提前谢谢 问候 我的新代码:PowerShell:FTP上传整个,powershell,file-upload,ftp,upload,Powershell,File Upload,Ftp,Upload,我想上传2个文件从我的电脑上的目录到ftp服务器 这不起作用。有人有主意吗? 提前谢谢 问候 我的新代码: $typeDefinition = @" using System; using System.Net; public class FtpClient : WebClient { protected override WebRequest GetWebRequest(Uri address) { FtpWebRequest ftpWebReques
$typeDefinition = @"
using System;
using System.Net;
public class FtpClient : WebClient
{
protected override WebRequest GetWebRequest(Uri address)
{
FtpWebRequest ftpWebRequest = base.GetWebRequest(address) as FtpWebRequest;
ftpWebRequest.EnableSsl = true;
return ftpWebRequest;
}
}
"@
Add-Type -TypeDefinition $typeDefinition
$LocalFilePath2 = "C:\M122\out"
$RemoteFileName2 = "****************"
$LocalFilePath2 = "******"
$ServerName2 = "*********"
$Username2 = "*******"
$Password2 = "*******************"
$ftpClient = New-Object FtpClient
$ftpclient.Credentials = New-Object System.Net.NetworkCredential($Username2, $Password2)
$files = Get-ChildItem $LocalFilePath2
foreach ($file in $files) {
$uri2 = New-Object System.Uri("ftp://$ServerName2/$RemoteFileName2/$($file.name)")
$ftpclient.uploadfile($uri2, $file.fullname)
}
您需要先创建
$webclient
对象,然后再尝试使用它:
$webclient = New-Object System.Net.WebClient
当您创建$ile
但从不使用它时,您的foreach
循环中有一些奇怪的东西。
此外,您的远程文件名是常量,需要为每个文件更新它。
也许你的意思是:-
$files = Get-ChildItem $LocalFilePath2
foreach ($file in $files) {
$uri2 = New-Object System.Uri("ftp://$ServerName2/$($file.name)")
$webclient.uploadfile($uri2, $file.fullname)
}
如果你需要支持TLS,那么看看这篇文章
以h0r41i0发布的代码为例,使用$ftpClient而不是$webclient
$typeDefinition = @"
using System;
using System.Net;
public class FtpClient : WebClient
{
protected override WebRequest GetWebRequest(Uri address)
{
FtpWebRequest ftpWebRequest = base.GetWebRequest(address) as FtpWebRequest;
ftpWebRequest.EnableSsl = true;
return ftpWebRequest;
}
}
"@
Add-Type -TypeDefinition $typeDefinition
[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
$LocalFilePath2 = "****"
$ServerName2 = "****"
$Username2 = "****"
$Password2 = "****"
$ftpClient = New-Object FtpClient
$ftpclient.Credentials = New-Object System.Net.NetworkCredential($Username2, $Password2)
$files = Get-ChildItem $LocalFilePath2
foreach ($file in $files) {
$uri2 = New-Object System.Uri("ftp://$ServerName2/$($file.name)")
$ftpclient.uploadfile($uri2, $file.fullname)
}
请注意,如果远程服务器上的证书不受信任,则需要使用
ServerCertificateValidationCallback
行接受证书。我不知道原因,但我没有收到任何错误消息。但它不起作用。并且数据(地址等)是正确的。你知道吗?我已经在FTP服务器上测试了我发布的代码,它可以正常工作。也许在循环中写入Host$uri2$file.fullname
,看看它们是否与您期望的值相对应,例如ftp://abc.com/myfile.txt z:\path\to\file\myfile.txt
。并发布更新的代码…$file.fullname的前半部分包含正确的路径,后半部分包含文件名。在uri中,ip是正确的,但在第二部分(文件夹应该在那里),这个ordner中还有一个文件名。你有什么想法吗?整个代码现在都在问题中。将写入主机$uri2$文件.FullName
放入循环中