脚本手动运行但不是通过 c#

Script runs manually but not via c#

我写了一个简单的控制台应用程序,应用程序 运行s 具有管理员权限,代码基于 this link,用户输入一个 .ps1 (powershell) 脚本 path 并且应用程序在此路径中执行此脚本。

首先,我在 "Hello World" 脚本上尝试了该应用程序,它工作正常,但是当我尝试其他脚本时,powershell 出现错误。

我在 .ps1 scipt 中有这个:

install-WindowsFeature smtp-server
Read-Host -Prompt “Press Enter to exit”

令人惊讶的是,如果我手动 运行 这个命令 install-WindowsFeature smtp-server 它工作正常。

但我需要该应用程序能够执行此操作,而不是手动执行。

这里是 powershell 错误:

install-WindowsFeature : The term 'install-WindowsFeature' is not recognized as the name of a cmdlet, function, script
file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct
and try again.
At c:\users\administrator\desktop\EnableSMTP.ps1:1 char:1
+ install-WindowsFeature smtp-server
+ ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (install-WindowsFeature:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Press Enter to exit:

我想你可能需要大写 "I" ... 安装-WindowsFeature

Install-WindowsFeature 是 ServerManager 模块提供的一个 cmdlet。当您手动 运行 脚本时,您必须已经将此模块导入到您的会话中。当通过程序 运行 时,模块未导入,因此无法识别 cmdlet 名称。尝试将 Import-Module ServerManager 添加为脚本的第一行,看看是否能解决您的问题。

我以前也遇到过这种情况。

在解决方案资源管理器中,右键单击项目-->属性-->生成

将平台目标从 "Any CPU" 更改为 x64