Windows Powershell Hello World无法打印

时间:2017-09-29 14:57:30

标签: function powershell

我有一个脚本。将其保存为Functionssample.ps1并从powershell命令提示符调用它。我已将executionpolicy设置为unrestricted并将powershell作为“Administrator”运行

。\ Functionssample.ps1'Display-HelloWorld'

我在控制台上看不到“你好世界”。

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

    }

3 个答案:

答案 0 :(得分:3)

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

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

要执行您的功能,您需要点源脚本(注意额外的点和空格)

. .\functionsample.ps1

这会在当前作用域中运行脚本,以便在脚本完成后可以使用该函数。

然后,你可以打电话给它。

Display-HelloWorld

答案 1 :(得分:1)

您的选择是:

1)在一个名为any的文件中编写一个包含该函数的脚本和调用它的代码 - 这里' 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()块来接受参数,所以它什么都不做。

答案 2 :(得分:-1)

在您的控制台中尝试此操作:

Import-Module .\Functionssample.ps1

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

Display-HelloWorld

编辑:道歉,我的第一篇帖子有错误的命令

另一种选择是:

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

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