从 Web API 连接和 运行 PowerShell 命令
Connect and run PowerShell command from Web API
我正在尝试 运行 来自 Web Api 的 PowerShell 命令。我得到的只是这个错误
术语 'Get-MailUser' 未被识别为 cmdlet、函数、脚本文件或可执行程序的名称。
我可以 运行 来自 PowerShell 7 命令的相同代码并且它工作正常。我在 7.1 级显示的项目中使用 Microsoft PowerShell SDK。
任何帮助将不胜感激!
这是我正在使用的代码。
if (powershell == null)
{
using (Runspace runspace = RunspaceFactory.CreateRunspace())
{
runspace.Open();
powershell = PowerShell.Create();
powershell.Runspace = runspace;
PSCommand command = new PSCommand();
command.AddCommand("Set-ExecutionPolicy").AddArgument("RemoteSigned");
command.AddCommand("New-PSSession");
command.AddCommand("Import-Module").AddParameter("Name", "PowerShellGet");
command.AddCommand("Install-Module").AddParameter("Name", "ExchangeOnlineManagement").AddParameter("Force");
command.AddCommand("Import-Module").AddParameter("Name", "ExchangeOnlineManagement");
command.AddCommand("Connect-ExchangeOnline").AddParameter("CertificateThumbPrint", "mythumbprint")
.AddParameter("AppId", "my app id")
.AddParameter("Organization", "mycompany.onmicrosoft.com");
command.AddCommand("Get-MailUser").AddParameter("Identity", "myemailaddress");
powershell.Commands = command;
// Collection<PSObject> results = powershell.Invoke();
var t1 = powershell.Invoke<PSSession>();
}
}
}
当您连续调用 AddCommand
时,您实际上是在组成一个 管道 - 因此您在 PowerShell 中的代码等效于:
Set-ExecutionPolicy RemoteSigned |New-PSSession |Import-Module -Name PowerShellGet |Install-Module -Name ExchangeOnlineManagement -Force |Import-Module -Name ExchangeOnlineManagement |Connect-ExchangeOnline -CertificateThumbPrint mythumbprint -AppId "my app id" -Organization mycompany.onmicrosoft.com |Get-MailUser -Identity myemailaddress
...这可能不是您想要的。
记得在命令之间调用 AddStatement()
:
command.AddCommand("Install-Module").AddParameter("Name", "ExchangeOnlineManagement").AddParameter("Force");
command.AddStatement();
command.AddCommand("Import-Module").AddParameter("Name", "ExchangeOnlineManagement");
command.AddStatement();
// ... and so forth
我正在尝试 运行 来自 Web Api 的 PowerShell 命令。我得到的只是这个错误 术语 'Get-MailUser' 未被识别为 cmdlet、函数、脚本文件或可执行程序的名称。 我可以 运行 来自 PowerShell 7 命令的相同代码并且它工作正常。我在 7.1 级显示的项目中使用 Microsoft PowerShell SDK。 任何帮助将不胜感激!
这是我正在使用的代码。
if (powershell == null)
{
using (Runspace runspace = RunspaceFactory.CreateRunspace())
{
runspace.Open();
powershell = PowerShell.Create();
powershell.Runspace = runspace;
PSCommand command = new PSCommand();
command.AddCommand("Set-ExecutionPolicy").AddArgument("RemoteSigned");
command.AddCommand("New-PSSession");
command.AddCommand("Import-Module").AddParameter("Name", "PowerShellGet");
command.AddCommand("Install-Module").AddParameter("Name", "ExchangeOnlineManagement").AddParameter("Force");
command.AddCommand("Import-Module").AddParameter("Name", "ExchangeOnlineManagement");
command.AddCommand("Connect-ExchangeOnline").AddParameter("CertificateThumbPrint", "mythumbprint")
.AddParameter("AppId", "my app id")
.AddParameter("Organization", "mycompany.onmicrosoft.com");
command.AddCommand("Get-MailUser").AddParameter("Identity", "myemailaddress");
powershell.Commands = command;
// Collection<PSObject> results = powershell.Invoke();
var t1 = powershell.Invoke<PSSession>();
}
}
}
当您连续调用 AddCommand
时,您实际上是在组成一个 管道 - 因此您在 PowerShell 中的代码等效于:
Set-ExecutionPolicy RemoteSigned |New-PSSession |Import-Module -Name PowerShellGet |Install-Module -Name ExchangeOnlineManagement -Force |Import-Module -Name ExchangeOnlineManagement |Connect-ExchangeOnline -CertificateThumbPrint mythumbprint -AppId "my app id" -Organization mycompany.onmicrosoft.com |Get-MailUser -Identity myemailaddress
...这可能不是您想要的。
记得在命令之间调用 AddStatement()
:
command.AddCommand("Install-Module").AddParameter("Name", "ExchangeOnlineManagement").AddParameter("Force");
command.AddStatement();
command.AddCommand("Import-Module").AddParameter("Name", "ExchangeOnlineManagement");
command.AddStatement();
// ... and so forth