创建FTP上传的输出脚本文件

时间:2017-05-03 14:57:08

标签: powershell ftp

我有一个将文件上传到FTP服务器的脚本,我有一个服务器列表IP $FTPServer,文件目录已上传\Upload。它使用PSFTP module

以下是我的阅读文件$item并上传到IP $line的代码:

foreach ($line in $FTPServer)
{
    foreach ($item in (Get-ChildItem .\Upload))
    {
        Start-Transcript -Path $results
        Write-Host -Object "ftp url: $line" 
        Set-FTPConnection -Credentials $FTPCredential -Server $line -Session MySession -UsePassive 
        $Session = Get-FTPConnection -Session MySession 
        Write-Host -Object "Uploading $item..."
        Add-FTPItem -Session $Session -Path $FTPPlace -LocalPath .\Upload\$item -Confirm:$false
        Stop-Transcript
    }
}

问题是,有时并非所有文件都可以上传或某个服务器已关闭。因此需要保存上传结果。我想像桌子一样会存储在logs.txt中,看起来像这样:

FTP Server   File       Connected   Uploaded
----------   ---------  --------    --------
192.168.1.2  test.txt   OK          OK #when connected and uploaded file
192.168.1.2  conf.dll   OK          FAIL #when connected but did not upload
192.168.1.20 test.txt   FAIL        FAIL #when did not connect and no uploaded

我在考虑哈希表:

$array = $line, $item, $array[2], $array[3]
$FailTable=New-Object -TypeName PSObject -Property ([ordered]@{"FTP Server"=$array[0]; "File"=$array[1];"Connected"=$array[2];"Uploaded"=$array[3]})
$FailTable|Out-File '.\stats.txt'

但我不知道如何将联系状态和上传到$array[2]$array[3] 我很乐意提供任何帮助。

2 个答案:

答案 0 :(得分:0)

您可以将数组构建为服务器和文件名的组合,然后存储结果传递失败。< / p>

所以,你的表有:

192.168.1.2  test.txt   OK          OK #when connected and uploaded file
192.168.1.2  conf.dll   OK          FAIL #when connected but did not upload
192.168.1.20 test.txt   FAIL        FAIL #when did not connect and no uploaded

看起来像:

"192.168.1.2\test.txt","OK"
"192.168.1.2\conf.dll","OK"
"192.168.1.20\test.txt","FAIL"

如果您使用了不允许的字符(比如IP和名称之间的*,那么您可以执行split("*")将它们分开。

根据您用于FTP的模块,您可能会说:

$results = Add-FTPItem -Session $Session -Path $FTPPlace -LocalPath .\Upload\$item -Confirm:$false

然后查看$results的值以查看是否存在问题(可能?)

答案 1 :(得分:-1)

我昨天对自己的问题添加了答案:

  

我用ftp.ini文件制作了一个ftp脚本文件。
  该文件位于c:\ hotbox \ ftpbat.bat

我的目录错误。该程序运行良好,但是我在不同的驱动器索引中运行了bat程序。我正在VB6索引

中对其进行测试

对不起。