首页 > 解决方案 > Powershell 显示变量操作是如何工作的?

问题描述

在PowerShell中

$a = 4;
$a  

将 4 写入输出流。

Write-Ouput $a 

将 4 写入输出流

如果我只想将变量写入输出流,你能解释一下哪种操作性能更好吗?

标签: windowspowershell

解决方案


如果您只想查看变量中的内容,则应在变量名称中使用美元符号。这很可能是显示变量值的最快方法。

更新

简短回答:您应该使用只是$a为了在输出流中写入数据。这是最快的方法。

带解释的长答案:如果你写了类似的东西$a,那么它会直接进入当前 PowerShell 进程的输出流,换句话说,它会进入输出管道。这是因为在 PowerShell 中,您通常只有三种可能的语句:

  1. 定义语句:它们是您可以在代码中定义以供进一步使用的所有内容,例如函数或类。
  2. 赋值语句:给变量赋值。
  3. Putting-in-the-pipeline 语句:除 1 和 2 之外的所有其他内容。

定义语句示例:

Function foo($bar)
{
    #do stuff here
}

赋值语句示例:

$foo = 'bar'

put-in-the-pipeline 语句的示例:这正是您所要求的!如果你写$a,那么它将被写入输出管道。而已。

现在关于Write-Output. 根据官方 PowerShell 存储库中的这段代码,它只是另一个 PowerShell Cmdlet 的包装器,即WriteObject。因此,调用比调用Write-Output花费更多的时间WriteObject

正如 Lee_Dailey 在对您的问题的第一条评论中提到的那样,Mark Kraus 在他的博客中写了一篇精彩的文章Let's Kill Write-Output 。乍一看,这似乎与您的问题没有太大关系,但本文解释了您在脚本中编写的对象以及当它们没有被不同的“打印功能”(如Write-Out. 在那里,您还可以找到如何“绕过”Write-Out在不同情况下使用它带来性能优势的示例。

我还建议阅读 Microsoft 的 DevBlogs 中的这两篇文章:

  1. 了解 PowerShell 中的流、重定向和写入主机
  2. Weekend Scripter:欢迎来到 PowerShell 信息流

他们肯定会帮助理解流是如何实现的以及它们在 PowerShell 中是如何工作的。


推荐阅读