Import-Module ServerManager : 未能加载指定的模块“ServerManager” (通过Setup Factory调用PowerShell的脚本)

文章来源:365jz.com     点击数:222    更新时间:2017-05-03 10:54   参与评论
Import-Module ServerManager Import-Module : 未能加载指定的模块“ServerManager”,因为在任何模块目录中都没有找到有效模块文件...(通过Setup Factory调用PowerShell的脚本)
操作系统: Windows server 2008 R2(64位)

C:\Windows\System32\WindowsPowerShell\v1.0\Modules 下有ServerManager的东东,可是还是找不到。

解决这个问题,需要2步:

1、Powershell中的执行策略(Execution Policy)
原因一个是因为Powershell默认的执行策略是Restricted,即可以运行单条命令,但不能运行脚本,包括格式和配置文件 (.ps1xml)、模块脚本文件 (.psm1) 和 Windows PowerShell 配置文件 (.ps1)、以及.bat文件。 解决方案是把执行策略改得宽松一点,比如RemoteSigned或者Unrestricted。在Powershell中运行以下命令即可: Set-ExecutionPolicy RemoteSigned 或 Set-ExecutionPolicy Unrestricted或-ExecutionPolicy RemoteSigned

2、64位操作系统和32位操作系统的关系

CMD ,64位操作系统有两个。一个是:C:\Windows\System32\CMD.exe(这个是64位的CMD,尽管名字叫System32);一个是C:\Windows\SysWOW64\CMD.exe(这个是32位的CMD.SysWOW64文件夹下的东西是64位操作系统为运行32位的应用程序而准备的)。

可是我编译生成的.exe是32位的,通过Setup Factory的File.Run(...)或者Shell.Execute(...),会调用C:\Windows\SysWOW64\CMD.exe(32位的CMD)。而ServerManager Module只有64为才有

所以改为编译成64位的就好了。

附(运行的脚本):

InstallDotNET.bat

@echo on
cd C:\Windows\System32\WindowsPowerShell\v1.0
powershell -ExecutionPolicy "UnRestricted" -File C:\InstallDotNET.ps1

InstallDotNET.ps1

import-module ServerManager
Add-WindowsFeature NET-Framework
exit

特别感谢(他们的博客最终给了我解决方案):

http://www.tuicool.com/articles/RvqqI3

Powershell是一个很强大的工具,可用于取代传统的批处理(Batch)。但在默认情况下,Powershell是不允许运行脚本文件的,(可能是出于安全原因的考虑吧)。直接用Powershell运行脚本文件会产生以下错误:

PS C:\Users\liang.huang.QUNARSERVERS\Envs> Import-Module ServerManager
Import-Module : 未能加载指定的模块“ServerManager”,因为在任何模块目录中都没有找到有效模块文件。
所在位置 行:1 字符: 14
+ Import-Module < < < < ServerManager
+ CategoryInfo : ResourceUnavailable: (ServerManager:String) [Import-Module], FileNotFoundException
+ FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

这是因为Powershell默认的执行策略是Restricted,即可以运行单条命令,但不能运行脚本,包括格式和配置文件 (.ps1xml)、模块脚本文件 (.psm1) 和 Windows PowerShell 配置文件 (.ps1)。 解决方案是把执行策略改得宽松一点,比如RemoteSigned或者Unrestricted。在Powershell中运行以下命令即可: Set-ExecutionPolicy RemoteSigned

然后系统会提示: 执行策略更改 执行策略可以防止您执行不信任的脚本。更改执行策略可以会使您面临 about_Execution_Policies 帮助主题中所述的安全风险。是否要更改执行策略? 输入“Y”就可以使新的策略生效了。


http://blog.csdn.net/leon110/article/details/6203380

一个很偏门的问题, C# 调用Powershell脚本,但是在Import-module的时候找不到servermanager module。

操作系统是windows server 2008 R2

但是如果直接执行脚本能找到该模块,而且在Module的目录下也能看到。

"the specified module server manager was not loaded because no valid module was found in any module directory"

这个问题我花费6个小时的时间,终于找到了问题的根源。

原因是ServerManager Module等几个module只有在64位系统上才有。

而我的C#程序编译成了32位,所以才找不到。

------分隔线----------------------------