我有一个powershell脚本:MyPSScript.ps1
:
function DoFoo() {
$Powershell = "C:\windows\System32\WindowsPowerShell\v1.0\Powershell.exe"
$Command = "& C:\Temp\myscript.ps1"
Start-Process $Powershell -ArgumentList ("-noexit", "-noprofile", "-Command", $Command)
}
在myscript.ps1
我有:
Import-Module "C:\Temp\myscript2.ps1"
DoSomething()
在myscript2.ps1
我有:
function DoSomething() {
Write-Output "Hello World"
}
问题是myscript.ps1
已正确执行,但未导入模块,因为没有打印任何内容。此外,由于我使用-noexit
打开新的PowerShell窗口,我可以输入它,如果我尝试调用DoSomething
,Powershell会抱怨,因为它无法找到命令。
有趣的是,如果我尝试手动输入相同的导入指令,那么它会正确导入文件......
从Powershell导入模块是否存在任何问题?我正在从另一个进程调用该模块?
答案 0 :(得分:0)
除了我在您的问题中修复的错误(缺少" ="),您提供的脚本中存在一些问题。第一个(MyPSScript.ps1
)定义函数DoFoo但从不调用它。第二个(myscript.ps1
)错误地用括号调用DoSometing()。如果你解决了这两个问题,你就会看到你的" Hello World"。
<强> MyPSScript.ps1:强>
function DoFoo() {
$Powershell = "C:\windows\System32\WindowsPowerShell\v1.0\Powershell.exe"
$Command = "& C:\Temp\myscript.ps1"
Start-Process $Powershell -ArgumentList ("-noexit", "-noprofile", "-Command", $Command)
}
DoFoo
<强> myscript.ps1:强>
Import-Module "C:\Temp\myscript2.ps1"
DoSomething
答案 1 :(得分:0)
Powershell模块的文件扩展名为.psm1。
将您的文件“myscript2.ps1”重命名为“myscript2.psm1”,然后它应该可以正常工作。