C#.NET的IIS远程PowerShell
问题描述:
//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();
所以很干脆我要调用一个电源外壳命令和“输入”下面的代码位是一个列表框对象我填充
但是,当我在IIS服务器上运行它不起作用,我认为这是因为IIS应用程序没有运行远程服务器上的管理员帐户我试图运行该命令。任何人都可以帮助解决这个问题吗?我怎样才能让网页用正确的凭证调用这个invoke命令?
编辑
所以我决定创建的时候打开,我现在用的帐户电源外壳的交换模块被加载,这意味着在Web服务器上的配置文件。但是,使用下面的代码
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服务器上,但我需要它来加载配置文件,但是我看不出为什么它是不这样做。是否有命令强制它加载模块。
答
到底冒充和调用没有做的伎俩(我可以使用调用,但我不想在代码证书)
我发现我不得不改变对应用程序池的属性,然后它工作得很好。
那么,首先要做的事情 - 在那里获得正确的日志记录,以便知道*为什么*这是失败的,而不仅仅是假设。其次,如果是因为权限不足(这可能是一个问题,我同意),那么您可以[以不同的用户模仿](https://www.google.co.uk/search?q=impersonation + iis + asp.net&oq = impersonation + iis + asp.net&aqs = chrome..69i57.4032j0j7&sourceid = chrome&ie = UTF-8)。或者,'Invoke-Command'具有'-Credential'参数,也可以用于模拟。 –
嗨,对不起,我已经打开IIS中的日志记录,但是在日志文件中没有看到任何关于它的信息。 – DevilWAH
对不起 - 我的意思是你应该把日志消息添加到你的应用程序*,通常使用像Log4Net这样的库来确保你可以准确地诊断这个和将来的问题。 IIS日志记录旨在告诉您有关HTTP调用,而不是应用程序处理。 –