无法从Start-Process开始从Powershell导入模块

时间:2014-12-18 10:11:24

标签: powershell process

我有一个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导入模块是否存在任何问题?我正在从另一个进程调用该模块?

2 个答案:

答案 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”,然后它应该可以正常工作。