Powershell FTP脚本字符串串联
我的Powershell脚本通过这种方式工作正常(它使用FTP将Powershell FTP脚本字符串串联,powershell,ftp,Powershell,Ftp,我的Powershell脚本通过这种方式工作正常(它使用FTP将IHM\u OTP\u CRT\u 20190812\u 0701.txt发送到服务器,并将其另存为newfile.txt) 但是如果我换第二行,它就不起作用了 $ftp = "ftp://ftpuse:mypass@e2b.kpsci.com/inbound/newfile.txt" 以下 $File = Get-ChildItem -Recurse | Where-Object { $_.Name -match 'IHM_OT
IHM\u OTP\u CRT\u 20190812\u 0701.txt
发送到服务器,并将其另存为newfile.txt
)
但是如果我换第二行,它就不起作用了
$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..."
这个错误对我来说很有意义-我认为我的“连接”对象包含一个单独的参数到Upload File方法中,但我不明白如何让它理解我打算传递一个字符串。问题是
Get ChildItem
对象。ToString()
只会返回文件名,不是完整的路径。因此,在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)
问题是
Get ChildItem
对象.ToString()
将只返回文件名,而不是完整路径。因此,在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)
在ISE或VSCode中逐步浏览代码,当您到达问题行时,您可以看到变量和正在发生的事情,答案将很明显。我尝试过-我的“Echo”语句都可以正常工作,但最终的FTP不起作用……但后来我更改了一些代码,此时我想检查我的正则表达式。我想找到一个以“IHM_OTP_CRT_”开头的文件的最新版本,尽管最后会附加日期。因为我确信现在甚至没有填充该文件,尽管我知道它是较早的…:)这是一个愚蠢的问题,但是这个工作示例与您的其他示例所做的不同。您是否试图将目标ftp路径设置为
$ftp=“ftp….inbound/IHM_OTP_CRT_20190812_0701.txt”
或$ftp=“ftp….inbound/newfile.txt”
?目标路径应为$ftp=“ftp….inbound/IHM_OTP_CRT_20190812_0701.txt”,在ISE或VSCode中逐步检查您的代码,当您遇到问题时,你可以看到变量和正在发生的事情,答案很明显。我试过了——我的“Echo”语句都很好,但最终的FTP不起作用……但后来我改变了一些代码,现在我想检查我的正则表达式。我想找到一个以“IHM_OTP_CRT_”开头的文件的最新版本,尽管最后会附加日期。因为我确信现在甚至没有填充该文件,尽管我知道它是较早的…:)这是一个愚蠢的问题,但是这个工作示例与您的其他示例所做的不同。您正在尝试将目标ftp路径设置为$ftp=“ftp….inbound/IHM_OTP_CRT_20190812_0701.txt”
或$ftp=“ftp….inbound/newfile.txt”
?目标路径应为$ftp=“ftp….inbound/IHM_OTP_CRT_20190812_0701.txt“是的,谢谢!!我过于关注$ftp变量,但我需要将完整文件路径传递到“UploadFile”中,因为我的文件存储在与脚本运行位置不同的位置……同时将短文件名附加到/inbound。这很有趣,因为我睡了一整晚才意识到你的回答正是我所需要的。是的,谢谢!!我过于关注$ftp变量,但我需要将完整文件路径传递到“UploadFile”中,因为我的文件存储在与脚本运行位置不同的位置……同时将短文件名附加到/inbound。这很有趣,因为我又睡了一整晚才意识到你的反应正是我所需要的。