powershell - 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 方法中包含一个单独的参数,但我不明白如何让它明白我打算传递一个字符串。
解决方案
问题是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)
推荐阅读
- excel - 读取 json 数组并使用 vba 打印值
- c - 用于解决迷宫问题的 AC 程序
- java - 使用继承(java)构造对象?
- electron - 使用 ELECTRON_RUN_AS_NODE 作为系统服务的电子
- vuejs2 - Vue, Vuetify 2 - 如何向数据表页脚添加按钮
- android - 如何从 Kotlin 中的 Firebase 查询创建对象?
- python - 它在哪里被视为int?
- javascript - 使用 React-Table 和 Fetch GET JSON 创建包含列的动态表
- node.js - 使用修改后的 mongoose-uuid2 会中断保存操作
- docker - 从外部主机 VM 连接到在 docker 容器中运行的 HDFS 名称节点