C#调用Powershell脚本失败

时间:2018-01-06 18:39:14

标签: c# powershell azure

我从C#应用程序调用PS脚本时遇到奇怪的情况: 我创建了一个简单的应用程序,它应该从Azure环境中检索虚拟机的状态(运行,停止,取消分配)。因此我尝试了几件事,最简单的就是执行PowerShell脚本,获取VM的状态并在我的应用程序中使用它,这样我就可以对这些信息做些什么。在运行PS脚本之前,我进行了一次find-replace,因此C#解析用户名和密码以登录Azure,因此它不存储在我的ps1文件中。

当我在我的开发机器(Win10和VS2017社区)上尝试这种方法时,它运行正常(C#调用PowerShell并获取输出)。脚本被执行,我可以根据需要使用这些信息。但是,当我在服务器(Win2012)上尝试此操作时,它告诉我Login-Azurermaccount和get-azurermvm不被识别为cmdlet的名称。当我尝试通过运行powershell -file'filename.ps1'从命令行运行完全相同的脚本时,它会按预期运行吗?

是否有人对此问题有相同的解释?

在dev.machine和服务器上是相同版本的PS:5.1

2 个答案:

答案 0 :(得分:0)

Win10 Dev框上的成功,表示您已安装/加载Azure模块,并且您已登录Azure。

必须在主机(直接或代理)上安装/加载Azure模块,您必须登录Azure才能使用它们并访问Azure数据。

答案 1 :(得分:0)

在本地计算机上针对您自己的配置文件运行它并找到它可能表示您运行时模块已自动加载。使用-noprofile尝试使用本地的PowerShell.exe,您可能会得到不同的结果(如服务器上的错误)。

只要让它在两种环境中都能正常工作,我建议您在脚本中放置代码以明确添加所需的模块(假设您在服务器上安装了SDK)。

将此项添加到模块顶部作为第一行。在此之前确认两台机器上都存在该文件,以表明它已以相同的方式安装。

Import-Module" c:\ ProgramFiles(x86)\ Microsoft SDKs \ Azure \ PowerShell \ AzureRM.psd1"

如果服务器上没有安装,请参阅此处的安装说明。

https://docs.microsoft.com/en-us/powershell/azure/other-install?view=azurermps-5.1.1