Powershell FTP 脚本字符串连接

Powershell FTP Script String Concatenation

我的 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 

这让我发疯。

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

$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..."

这个错误对我来说很有意义 - 它认为我的 "concatenated" 对象在上传文件方法中包含一个单独的参数,但我不明白如何让它理解我打算通过一个字符串。

问题是 Get-ChildItem 对象 .ToString() 只会 return 文件名,而不是完整路径。因此,在 Webclient 上传中,您必须指定 .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)