首页 > 解决方案 > Powershell FTP 脚本字符串连接

问题描述

我的 Powershell 脚本以这种方式工作正常(它使用 FTP 发送IHM_OTP_CRT_20190812_0701.txt到服务器并将其另存为newfile.txt

$File = "Z:\Export\IHM_OTP_CRT_20190812_0701.txt"

$ftp = "ftp://ftpuse:mypass@e2b.kpsci.com/inbound/newfile.txt"

"ftp url: $ftp"

$webclient = New-Object System.Net.WebClient
$uri = New-Object System.Uri($ftp)

"Uploading $File..."

$webclient.UploadFile($uri, $File)

但是如果我更改第二行它不起作用

$ftp = "ftp://ftpuse:mypass@e2b.kpsci.com/inbound/newfile.txt"

到以下

$File = Get-ChildItem -Recurse | Where-Object { $_.Name -match 'IHM_OTP_CRT_.' } | sort LastWriteTime | select -last 1
$NewFileName = $File.Name
$ftp = "ftp://ftpuse:mypass@e2b.kpsci.com/inbound/" + $NewFileName 

这让我发疯了。

我尝试了各种连接方法...我使用$var1``$var2保存的概念$NewFileName来避免+号,我在参数周围使用了括号,例如:

$ftp = ("ftp://ftpuse:mypass@e2b.kpsci.com/inbound/" + $NewFileName)

更令人沮丧的是,当我使用 时@echo,连接的字符串看起来很完美。此外,这工作正常:

$ftp = "ftp://ftpuse:mypass@e2b.kpsci.com/inbound/" + "IHM_OTP_CRT_20190812_0701.txt"

因此,它只是与一个不起作用的单独对象(即使它是一个字符串)连接。我可以连接到“blah”,但不能连接到等同于“blah”的变量。我已经花了几个小时在这上面,我不认为它应该这么困难。

我收到的错误是:

"Exception calling "UploadFile" with 2 argument(s): "The requested URI is invalid for this FTP command...at :17 char: 22..."

这个错误对我来说很有意义——它认为我的“连接”对象在 Upload File 方法中包含一个单独的参数,但我不明白如何让它明白我打算传递一个字符串。

标签: powershellftp

解决方案


问题是Get-ChildItem对象.ToString()只会返回文件名,而不是完整路径。因此,在 Webclient Upload 中,您必须指定.FullName属性:

$webclient.UploadFile($uri, $File.FullName)

完整代码:

$File = Get-ChildItem -Recurse | Where-Object { $_.Name -match 'IHM_OTP_CRT_.' } | sort LastWriteTime | select -last 1
$NewFileName = $File.Name
$ftp = "ftp://ftpuse:mypass@e2b.kpsci.com/inbound/" + $NewFileName 

"ftp url: $ftp"

$webclient = New-Object System.Net.WebClient
$uri = New-Object System.Uri($ftp)

"Uploading $File..."

$webclient.UploadFile($uri, $File.FullName)

推荐阅读