Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell:FTP上传整个_Powershell_File Upload_Ftp_Upload - Fatal编程技术网

PowerShell: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

我想上传2个文件从我的电脑上的目录到ftp服务器

这不起作用。有人有主意吗? 提前谢谢

问候

我的新代码:

$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
放入循环中