首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >函数在PowerShell中的返回值

函数在PowerShell中的返回值
EN

Stack Overflow用户
提问于 2018-03-30 02:11:31
回答 2查看 0关注 0票数 0

我开发了一个PowerShell函数,它执行许多涉及配置SharePoint Team站点的操作。最终,我希望该函数以字符串的形式返回供应网站的URL,以便在函数结尾处具有以下代码:

代码语言:javascript
复制
$rs = $url.ToString();
return $rs;

调用此函数的代码如下所示:

代码语言:javascript
复制
$returnURL = MyFunction -param 1 ...

所以我期待一个字符串,但事实并非如此。相反,它是System.Management.Automation.PSMethod类型的对象。为什么它会返回该类型而不是字符串类型?

EN

回答 2

Stack Overflow用户

发布于 2018-03-30 10:41:38

PowerShell具有非常古怪的返回语义 - 至少从更传统的编程角度来看。有两个主要想法可以包围你的头:

  • 所有输出都被捕获并返回
  • return关键字实际上只是表示一个逻辑出口点

因此,以下两个脚本块将有效地完成同样的事情:

代码语言:javascript
复制
$a = "Hello, World"
return $a

代码语言:javascript
复制
$a = "Hello, World"
$a
return

第二个例子中的$ a变量作为流水线上的输出保留,并且如前所述,返回所有输出。事实上,在第二个例子中,你可以完全忽略返回,并且你会得到相同的行为(当函数自然完成和退出时,返回将被隐含)。

没有更多的函数定义,我不能说你为什么得到一个PSMethod对象。我的猜测是你可能有几行没有被捕获的东西,并且正在被放置在输出管线上。

还值得注意的是,你可能不需要这些分号 - 除非你在一行中嵌套多个表达式。

可以在TechNet 的about_Return页面上阅读关于返回语义的更多信息,或者help return从PowerShell本身调用该命令。

票数 0
EN

Stack Overflow用户

发布于 2018-03-30 11:36:55

这部分PowerShell可能是最愚蠢的方面。在函数期间产生的任何多余的输出都会污染结果,有时候没有输出,并且在某些情况下,除了计划的返回值外,还有一些其他计划外输出。

所以,我所做的就是从原始函数调用中除去赋值,以便输出在屏幕上结束,然后逐步执行,直到我没有计划在调试器窗口中弹出(使用PS ISE)。

即使诸如在外部范围中保留变量之类的东西[boolean]$isEnabled也会导致输出,就像这样会令人烦恼地吐出一个False,除非你这样做[boolean]$isEnabled = $false

另一个好的是$someCollection.Add("thing")吐出新的收藏数量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100004326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档