我有一个脚本。将其保存为Functionssample.ps1并从powershell命令提示符调用它。我已将executionpolicy设置为unrestricted并将powershell作为“Administrator”运行
。\ Functionssample.ps1'Display-HelloWorld'
我在控制台上看不到“你好世界”。
Function Display-HelloWorld
{
cls
Write-Host "Hello World"
}
答案 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用户可以解释为什么这样做不会对这篇文章有所帮助。