我一直在尝试从asp.net运行一个PowerShell脚本,但几天都没有成功。从ASP.NET运行PowerShell脚本
C#的是:
using (var process = new Process())
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = @"powershell.exe";
startInfo.Arguments = "arguments that call the script here";
startInfo.RedirectStandardOutput = false;
startInfo.RedirectStandardError = false;
startInfo.UseShellExecute = true;
startInfo.CreateNoWindow = true;
process.StartInfo = startInfo;
process.Start();
}
它调用PowerShell脚本包含FF:
robocopy "\\network-server\location" "C:\localfolder" "testmovefile.txt"
显然,这里的问题是正确的凭据。但我试过做各种模拟的东西,无论是从C#还是在脚本级别。我试着这样做的PowerShell脚本:使用没有权限的网络帐户,即使,
$username = "domain\user"
$password = ConvertTo-SecureString –String "password" –AsPlainText -Force
$pp = new-object -typename System.Management.Automation.PSCredential -argumentlist $username,$password
start-process powershell -argument "C:\localfolder\CopyFile.ps1" -Credential $pp
它,当我在本地运行在PowerShell控制台剧本的作品,从web应用程序称为然而,当。 。 什么都没发生。
虽然App Pool身份设置为默认的App Pool身份,但我发现如果将身份更改为具有适当权限的自定义帐户,它可以工作。
我仍然试图寻找一个不同的解决方案..我想要一个场景,你可以改变脚本中的任何东西,它仍然会运行。只要不更改应用程序池标识,任何都可以。
我尝试这些以及:
- http://huddledmasses.org/using-alternate-credentials-with-the-filesystem-in-powershell/
- 在C#中的替代过程中使用运行空间,并使用模仿How do you impersonate an Active Directory user in Powershell?
但它仍然无法正常工作。我一直在拒绝访问。问题是,是否可以通过模拟PowerShell内的某个人来工作?
“什么也没有发生”:尝试使用调试器或日志记录(甚至是进程监视器)来确定它到底有多远。也许'process.Start'无法执行任何操作? – Richard 2012-07-13 09:01:43
它可以在本地运行。如果我将App Pool Identity设置为自定义帐户,它也可以工作。 – user1167132 2012-07-16 01:53:43
什么是默认值(原来是:失败)AppPool的身份? – Richard 2012-07-16 06:43:17