【问题标题】:Windows Powershell Hello World not printingWindows Powershell Hello World 不打印
【发布时间】:2018-03-11 12:30:15
【问题描述】:

我有一个脚本。将其保存为 Functionssample.ps1 并从 powershell 命令提示符调用它。我已将 executionpolicy 设置为不受限制,并将 powershell 作为“管理员”运行

.\Functionssample.ps1 'Display-HelloWorld'

我在控制台上没有看到“hello world”。

    Function Display-HelloWorld
   {
         cls
       Write-Host "Hello World"

    }

【问题讨论】:

  • 埃里克,我正在调用函数。请阅读我的帖子。文件名和功能

标签: function powershell


【解决方案1】:

您编写了一个包含函数的脚本。由于脚本可以接受参数,调用.\functionsample.ps1 Display-HelloWorld 只是将“Display-HelloWorld”(一个字符串值)作为参数传递给脚本。

当脚本执行时,它会创建一个函数对象,但该函数永远不会被调用。

要执行你的函数,你需要点源脚本(注意额外的点和空格)

. .\functionsample.ps1

这会在您当前的范围内运行脚本,以便在脚本完成后该函数可用。

然后,你可以调用它。

Display-HelloWorld

【讨论】:

    【解决方案2】:

    您的选择是:

    1) 在名为任何东西的文件中编写一个包含函数和调用它的代码的脚本 - 这里是“testing.ps1”:

    Function Display-HelloWorld
    {
        cls
        Write-Host "Hello World"
    }
    Display-HelloWorld
    
    # run it
    PS C:\test> .\testing.ps1
    Hello World
    
    # After it runs, the contents of the script are 'gone' from the current session.
    

    2) 将函数内容放入名为functionname.ps1 的文件中。将脚本本身视为一个函数:

    cls
    Write-Host "Hello World"
    
    # run it, pretending the file is a function
    PS C:\test> .\Display-HelloWorld.ps1
    Hello World
    

    3) 将函数代码以任意名称放在一个文件中:

    Function Display-HelloWorld
    {
        cls
        Write-Host "Hello World"
    }
    
    # dot source or Import-Module the code, to load the file contents ready for use
    PS C:\test> Import-Module .\testing.ps1
    
    # Call the function, loaded from the file
    PS C:\test> Display-HelloWorld
    Hello World
    

    您将它们混合在一起 - 当您将 function xyz 放入文件中,然后运行该文件时,它会作为脚本运行。功能已定义。没有什么叫它。函数从内存中删除。当您运行该文件并为其传递一个参数时,就好像您正在执行 2),正如 Mike Shepard 所说,将“Display-HelloWorld”作为字符串参数传递给文件,就好像文件本身就是一个函数一样。它没有param() 块来接受参数,所以它什么也不做。

    【讨论】:

      【解决方案3】:

      在你的控制台中试试这个:

      Import-Module .\Functionssample.ps1
      

      这将加载您创建的脚本及其函数,因此您现在可以在该控制台中运行它们。虽然它不是一个模块,但它仍然适用于这种情况......

      Display-HelloWorld
      

      编辑:抱歉,我的第一篇文章有​​错误的命令

      另一种选择是:

      powershell -command "& { . .\script1.ps1; Display-HelloWorld }"
      

      它使用点源来运行脚本,然后执行命令。如果您只执行.\Functionssample.ps1 Display-HelloWorld,它实际上似乎并没有正确调用该命令。它会毫无错误地运行,但实际上并没有像您期望的那样运行该函数。如果更有经验的 PowerShell 用户可以解释为什么这不起作用,这将对这篇文章有所帮助。

      【讨论】:

      • 我想了解为什么我的呼叫方式不起作用
      • 我明白了。我认为.\Functionssample.ps1 Display-HelloWorld 不会自己做任何事情。即使您确实运行了函数名称,它实际上似乎并没有调用该函数来运行。我会用更多选项更新我的帖子。
      猜你喜欢
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 2015-05-04
      • 1970-01-01
      • 2012-10-06
      • 2013-08-23
      • 1970-01-01
      • 2021-02-28
      相关资源
      最近更新 更多