使用-Co​​mmand和-File开关从命令行(cmd.exe)运行Powershell.exe?

时间:2012-10-12 20:38:40

标签: powershell powershell-v2.0

我有一个名为MyModule.psm1的简单模块,定义为

function Show-Text($p)
{
    Write-Host $p
}

Export-ModuleMember Show-Text

模块保存在这里 - (一切正常,通过ISE或直接Powershell命令行的正常方式

C:\Windows\SysWOW64\WindowsPowerShell\v1.0\Modules\MyModule (because 64-bit OS)

现在,我有一个名为Test.ps1的脚本

Show-Text "Hello World"

注意:我不想在ps1文件中执行Import-Module MyModule

我正在从cmd.exe窗口运行以下命令

C:\>Powershell -Command "& {Import-Module MyModule}" -File "C:\temp\Test.ps1"

我收到以下错误

  

Import-Module:未加载指定的模块“MyModule”,因为   在任何模块目录中找不到有效的模块文件。在线:1   焦炭:17   +& {Import-Module<<<< MyModule} -File Show.ps1       + CategoryInfo:ResourceUnavailable:(MyModule:String)[Import-Module],FileNotFoundException       + FullyQualifiedErrorId:Modules_ModuleNotFound,Microsoft.PowerShell.Comm
  ands.ImportModuleCommand

有人可以通过 cmd.exe ONLY 帮助我如何执行上面的exactly what I have stated而无需硬编码或指定完整的模块路径吗?

我们用于加载SystemModules的类似行 - powershell.exe -ImportSystemModules

2 个答案:

答案 0 :(得分:3)

您确实理解SysWOW64是32位且System32是64位吗?

该模块存在于32位Powershell模块查找路径中,因此只能由32位Powershell控制台查看。如果从64位cmd控制台调用powershell,则将打开64位控制台。

打开32位cmd提示符或将其移动到64位模块路径

答案 1 :(得分:3)

您运行的是32位cmd.exe吗?如果是这样,那么Import-Module应该可以工作。如果您运行的是64位cmd.exe,则会启动64位PowerShell.exe,除非您完全限定了32位版本的PowerShell.exe(c:\ windows \ syswow64 \ windowspowershell \ v1)的路径。 0 \ powershell.exe)。