Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell FTP脚本字符串串联_Powershell_Ftp - Fatal编程技术网

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

我的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_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。这很有趣,因为我又睡了一整晚才意识到你的反应正是我所需要的。