我开发了一个PowerShell函数,它执行了许多涉及提供SharePoint团队站点的操作。最终,我想函数返回的URL提供的网站作为字符串,所以在我的函数结束,我有以下代码:
$rs = $url.ToString();
return $rs;
调用这个函数的代码如下所示:
$returnURL = MyFunction -param 1 ...
我期待的是一个字符串,但它不是。相反,它是System.Management.Automation.PSMethod类型的对象。为什么它返回的是那个类型而不是String类型?
PowerShell有非常古怪的返回语义——至少从更传统的编程角度来看是这样。这里有两个值得你思考的观点:
捕获并返回所有输出
return关键字实际上只是指示了一个逻辑退出点
因此,下面两个脚本块将有效地完成完全相同的事情:
$a = "Hello, World"
return $a
$a = "Hello, World"
$a
return
第二个示例中的$a变量被保留为管道上的输出,并且如前所述,将返回所有输出。事实上,在第二个示例中,您可以完全省略返回,并且您将得到相同的行为(返回将在函数自然完成和退出时隐含)。
没有更多的函数定义,我不能说为什么你得到一个PSMethod对象。我的猜测是,您可能有一些未被捕获的内容,它们被放置在输出管道中。
同样值得注意的是,您可能不需要这些分号——除非您在一行上嵌套多个表达式。
您可以在TechNet的about_Return页面上阅读更多关于返回语义的信息,或者通过从PowerShell本身调用帮助返回命令。