该函数如何返回其值?

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-没有成功.

如果有人能解释我在这里发生的事情,那真的很酷.如上所述,代码有效,但我想了解这里发生了什么.

bea*_*ker 6

它的

$reader.ReadToEnd()
Run Code Online (Sandbox Code Playgroud)

StreamReader.ReadToEnd()方法输出字符串,因为它的结果未分配给变量,所以它将是函数输出.

惯用的方法是这样写:

Write-Output $reader.ReadToEnd()
Run Code Online (Sandbox Code Playgroud)