【发布时间】:2015-05-13 06:11:25
【问题描述】:
我正在尝试在我的 C# Web 应用程序中运行一个 powershell 脚本。
当我在 powershell 中运行以下命令时,它工作正常。
Import-Module 'C:\\Program Files\\Microsoft Dynamics NAV\\80\\Service\\NavAdminTool.ps1'
Get-NAVTenant -ServerInstance DynamicsHost
但是当我使用我的网络应用程序运行它时,它会告诉我
“Get-NAVTenant -ServerInstance DynamicsHost”一词未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,如果包含路径,请验证路径是否正确,然后重试。
这是我的 C# 代码:
InitialSessionState initial = InitialSessionState.CreateDefault();
initial.ImportPSModule(new string[] { "C:\\Program Files\\Microsoft Dynamics NAV\\80\\Service\\NavAdminTool.ps1" });
Runspace runspace = RunspaceFactory.CreateRunspace(initial);
runspace.Open();
PowerShell ps = PowerShell.Create();
ps.Runspace = runspace;
ps.Commands.AddCommand("Get-NAVTenant -ServerInstance DynamicsHost");
foreach (PSObject result in ps.Invoke())
{
Console.WriteLine(result.ToString());
}
有人能指出我正确的方向吗?
更新:
使用 runspace.SessionStateProxy.PSVariable.GetValue("Error") 我可以看到以下错误:
无法将参数绑定到参数“名称”,因为它为空。
无法将参数绑定到参数“路径”,因为它为空。
找不到路径“HKLM:\SOFTWARE\Microsoft\Microsoft Dynamics NAV\80\Service”,因为它不存在。
提示用户的命令失败,因为主机程序或命令类型不支持用户交互。尝试支持用户交互的主机程序,例如 Windows PowerShell 控制台或 Windows PowerShell ISE,并从不支持用户交互的命令类型(例如 Windows PowerShell 工作流)中删除与提示相关的命令。
提示用户的命令失败,因为主机程序或命令类型不支持用户交互。尝试支持用户交互的主机程序,例如 Windows PowerShell 控制台或 Windows PowerShell ISE,并从不支持用户交互的命令类型(例如 Windows PowerShell 工作流)中删除与提示相关的命令。
提示用户的命令失败,因为主机程序或命令类型不支持用户交互。尝试支持用户交互的主机程序,例如 Windows PowerShell 控制台或 Windows PowerShell ISE,并从不支持用户交互的命令类型(例如 Windows PowerShell 工作流)中删除与提示相关的命令。
【问题讨论】:
-
This 可以帮助您解决问题。您可以从
runspace.SessionStateProxy.PSVariable.GetValue("Error")获取模块导入错误。 -
您必须单独添加 cmdlet 及其参数。
标签: c# .net powershell