Twi*_*nds 1 powershell function
我实际上是脚本,我脚本的一部分是FTP文件下载.代码字没有任何问题,但我不明白一个具体的部分.它是我自己没有编写的代码中唯一的部分.我理解代码是如何工作的,但实际上我并不理解函数如何返回它的值.你可能会对我的意思感到困惑,所以让我用一些代码解释一下:
function get-ftp {
try {
$ftprequest = [system.net.ftpwebrequest]::Create($uri)
$ftprequest.Credentials = New-Object system.net.networkcredential($user,$pass)
$ftprequest.Proxy = $null
$ftprequest.Method = [System.Net.WebRequestMethods+FTP]::ListDirectory
$ftpresponse = $ftprequest.GetResponse()
$reader = New-Object IO.StreamReader $ftpresponse.GetResponseStream()
$reader.ReadToEnd()
$reader.Close()
$ftpresponse.Close()
}
catch {
Write-host "Error while reading filenames"
}
}
Run Code Online (Sandbox Code Playgroud)
所以这是我从FTP服务器获取所有目录的功能.我用这段代码调用这个函数:
$allXmlFiles = get-ftp
Run Code Online (Sandbox Code Playgroud)
因此,在调用之后,我$allXmlFiles包含一个字符串(使用getTypeon 测试$allXmlFiles),其中包含服务器上的所有文件名.现在我的问题:FTP的答案是如何传递给这个变量的?return功能中没有,所以我很困惑这是如何工作的.我试过这样就把try/catch功能拿出来直接获得答案,但那不起作用.我试图找到它$reader,并在$ftpresponse-没有成功.
如果有人能解释我在这里发生的事情,那真的很酷.如上所述,代码有效,但我想了解这里发生了什么.
它的
$reader.ReadToEnd()
Run Code Online (Sandbox Code Playgroud)
StreamReader.ReadToEnd()方法输出字符串,因为它的结果未分配给变量,所以它将是函数输出.
惯用的方法是这样写:
Write-Output $reader.ReadToEnd()
Run Code Online (Sandbox Code Playgroud)