如何以管理员身份从C#运行PowerShell?

如何以管理员身份从C#运行PowerShell?,c#,powershell,C#,Powershell,我想通过C#执行一些PowerShell脚本,但它需要管理员权限。这是我的代码(我知道了): 使用(新的模拟程序(“用户”、“域”、“密码”)) { //创建Powershell运行空间 Runspace Runspace=RunspaceFactory.CreateRunspace(); //打开它 Open(); //创建一个管道并向其提供脚本文本 Pipeline Pipeline=runspace.CreatePipeline(); pipeline.Commands.AddScript

我想通过C#执行一些PowerShell脚本,但它需要管理员权限。这是我的代码(我知道了):

使用(新的模拟程序(“用户”、“域”、“密码”))
{
//创建Powershell运行空间
Runspace Runspace=RunspaceFactory.CreateRunspace();
//打开它
Open();
//创建一个管道并向其提供脚本文本
Pipeline Pipeline=runspace.CreatePipeline();
pipeline.Commands.AddScript(scriptText);
//添加参数(如果有)
foreach(参数中的var参数)
{
pipeline.Commands[0].Parameters.Add(parameter.Key,parameter.Value);
}
//添加一个额外的命令来转换脚本
//将对象输出为格式良好的字符串
//删除此行以获取实际对象
//脚本返回的值。例如,脚本
//“获取进程”返回一个集合
//系统。诊断。过程实例的。
pipeline.Commands.Add(“输出字符串”);
//执行脚本
收集结果=pipeline.Invoke();
//关闭运行空间
runspace.Close();
//将脚本结果转换为单个字符串
StringBuilder StringBuilder=新的StringBuilder();
foreach(结果中的PSObject对象)
{
stringBuilder.AppendLine(obj.ToString());
}
返回stringBuilder.ToString();
}
无论如何,这在我的机器上不起作用。例如,如果脚本文本为“
Set ExecutionPolicy Unrestricted
”,则“
对注册表项“HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell”的访问被拒绝。

在我的例子中,它无法通过
getvm
命令获取虚拟机列表。(我发现,
getvm
只有在以管理员权限运行时才返回结果。)


我做错什么了吗?此问题是否有其他解决方案?

这将以管理员身份启动PowerShell:

var newProcessInfo = new System.Diagnostics.ProcessStartInfo();
newProcessInfo.FileName = @"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe";
newProcessInfo.Verb = "runas";
System.Diagnostics.Process.Start(newProcessInfo);
如果需要传入脚本以运行,请使用:

newProcessInfo.Arguments = @"C:\path\to\script.ps1";

这将以管理员身份启动PowerShell:

var newProcessInfo = new System.Diagnostics.ProcessStartInfo();
newProcessInfo.FileName = @"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe";
newProcessInfo.Verb = "runas";
System.Diagnostics.Process.Start(newProcessInfo);
如果需要传入脚本以运行,请使用:

newProcessInfo.Arguments = @"C:\path\to\script.ps1";

你不能以管理员的身份运行它吗?我是通过C#运行它的,所以我正在设法弄清楚如何做到这一点。:)如果以管理员身份运行应用程序(或者直接从visual studio运行,则以管理员身份运行visual studio),它启动的进程应自动以管理员身份运行。此代码将作为网站的一部分,并且不允许以管理员身份运行网站。通过网站访问注册表和/或执行power shell是一个好主意吗?您不能以管理员身份运行它吗?我通过C#运行它,因此我正在尝试解决该问题。:)如果您以管理员身份运行应用程序(或者直接从visual studio以管理员身份运行,则以管理员身份运行visual studio),则它启动的进程应自动以管理员身份运行。此代码将作为网站的一部分,不允许以管理员身份运行网站。通过网站访问注册表和/或执行power shell是一个好主意吗?