gpt4 book ai didi

PowerShell FTP 未能命中 Catch block

转载 作者:行者123 更新时间:2023-12-03 07:50:24 28 4
gpt4 key购买 nike

我有这个脚本,我用 FTP 到大型机下载一些数据进行报告。

我从用户输入中获取用户名和密码。

我把所有东西都包裹在 try/catch 中堵塞。出于某种原因,我似乎没有发现错误。如果我输入不良信用,我希望它出错并点击我的catch阻止并编写适当的错误消息,并阻止我的脚本的其余部分继续。

我环顾四周试图找到答案,但似乎没有任何效果。
这是当我输入错误的登录信息(这显然是预期的)时被抛出到我的控制台的错误。

ftp.exe : Login failed.
At C:\Users\SomeUser\Desktop\PS\script.ps1:348 char:5
+ ftp <<<< -s:ftp.txt | Out-Null -ErrorAction Stop
+ CategoryInfo : NotSpecified: (Login failed.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError

它直接跳过我的 catch block 并继续运行我的脚本。

这是我正在运行的功能,稍作修改。
function FTPMainFrame{

try{

#re-assigning variables
$user = $username
$pass = $password

$pw = $pass | ConvertTo-SecureString -AsPlainText -Force
ConvertFrom-SecureString $pw | Out-File ftppass.txt -Encoding ASCII

$pw = ConvertTo-SecureString -String (Get-Content ftppass.txt)
$cred = New-Object System.Management.Automation.PsCredential(".",$pw)
$cred.GetNetworkCredential()|fl | Out-Null

# Template for FTP script
$Script = @"
open XXX.XXX.XXX.XXX
<username>
<password>
get 'SOME.FILES.1' C:\Users\$userName\Desktop\SomeFolder\data\data1.txt
get 'SOME.FILES.2' C:\Users\$userName\Desktop\SomeFolder\data\data2.txt
get 'SOME.FILES.3' C:\Users\$userName\Desktop\SomeFolder\data\data3.txt
get 'SOME.FILES.4' C:\Users\$userName\Desktop\SomeFolder\data\data4.txt
quit
"@

# Reconstitute stored password
$pw = ConvertTo-SecureString -String (Get-Content ftppass.txt)
$cred = New-Object System.Management.Automation.PsCredential(".",$pw)
$passtext = $cred.GetNetworkCredential().Password
$Script = $Script -replace '<username>', $user
$Script = $Script -replace '<password>', $passtext
$Script | Out-File ftp.txt -Encoding ASCII

Write-Host "Running Batch..."

ftp -s:ftp.txt | Out-Null #error's here

#ftp -s:ftp.txt | Out-Null -ErrorAction Stop
#I've tried this and quite a few other things to force it to be a terminating error...
}
Catch{
Write-Host "FTP Login Failed, please check your user name and password."

$ErrorActionPreference = Stop #should stop the rest of the script..
}
Remove-Item -Path .\ftp.txt
}

我可以在这里做什么来让它击中我的 catch block ,并停止运行脚本?

如果我的问题不清楚或者您需要更多信息,请随时提问。

任何帮助都会很棒,谢谢!

最佳答案

您可以使用自动变量 $?检查上一个命令是否成功执行。

我会删除 try..catch并替换 ftp.exe调用:

# Redirect error output
ftp -s:ftp.txt 2> $null

if(-not $?) {
# Display your message, and stop the script.
throw "FTP Login Failed, please check your user name and password."
}

关于PowerShell FTP 未能命中 Catch block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22509055/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com