【发布时间】:2017-03-22 02:41:35
【问题描述】:
您好,我有以下代码
//set up exchange server name
var Exchangesrv = "ex1.iah.ac.uk";
// Initialize PowerShell engine
var shell = PowerShell.Create();
// Add the script to the PowerShell object
shell.Commands.AddScript("Invoke-Command -Computername hostname.example.com -ScriptBlock{get-alias}");
// Execute the script
var results = shell.Invoke();
Input.DataSource = results;
Input.DataBind();
非常简单,我想调用一个 power shell 命令,“输入”是我正在填充的列表框对象
但是当我在 IIS 服务器上运行它时它不起作用,我认为这是因为 IIS 应用程序没有使用我试图运行命令的远程服务器上的管理员帐户运行。任何人都可以帮助解决这个问题。如何让网页使用正确的凭据调用此调用命令?
编辑
所以我决定在 web 服务器上创建一个配置文件,这意味着当我使用的帐户打开 power-shell 时,交换模块被加载。但是使用以下代码时我看不到这种加载
using (var powershell = PowerShell.Create())
{
//powershell.Runspace = runspace;
// Add the script to the PowerShell object
//powershell.AddScript("Get-alias");
powershell.AddScript("Get-DynamicDistributionGroup");
// Execute the script
var results = powershell.Invoke();
Input.DataSource = results;
Input.DataBind();
所以应该发生的是电源外壳在 Web 服务器上本地运行,但我需要它来加载配置文件但是我不明白它为什么不这样做。是否有命令强制它加载模块。
【问题讨论】:
-
嗯,首先要做的事情是正确登录,这样您就知道为什么它失败了,而不仅仅是假设。其次,如果是因为权限不足(我同意这可能是一个问题),那么您可以 impersonate as a different user 只为那部分代码。或者,
Invoke-Command有一个-Credential参数,也可用于模拟。 -
您好,抱歉,我已开启登录 IIS,但在日志文件中没有看到任何相关内容。
-
抱歉 - 我的意思是您应该将日志消息添加到您的 应用程序,通常使用像
Log4Net这样的库,以确保您可以准确诊断此问题和未来的问题。 IIS 日志记录旨在告诉您 HTTP 调用,而不是应用程序处理。 -
嗨,这似乎是远程加载交换电源外壳管理单元的问题,因为它一直告诉我它不存在。
-
我想我需要这个“New-PSSession -ConfigurationName Microsoft.Exchange”,但我不知道我是如何将它包含在我的代码中的
标签: c# .net powershell iis