在C#中执行PowerShell脚本,无需用户名和密码
如何在C#中执行Powershell脚本而不使用用户名和密码?在C#中执行PowerShell脚本,无需用户名和密码
PowerShell脚本:
#Script:This Script generate the Package (Zip file) dynamically for unittest
#DirectoryName is Out Directory of Unittest execution
#location is Out\Resource Directory
#locationdetail is Array of files Directory for generate the Package
#FileName is name of Package generated through this script
#option is use for switch case implementation,currently not implemented
param(
[string]$DirectoryName="."
, [string]$location=""
, [string]$FileName="Test.zip"
, [int] $option
)
[System.Reflection.Assembly]::LoadFrom($DirectoryName+"\\"+"Ionic.Zip.dll");
$locationdetail = "Package\\Resource", "Package\\ResourceBad", "Package\\ResourceEmptymetada","Package\\ResourceEmptydatafile","Package\\EmptyTest"
$directoryToZip=""
foreach ($element in $locationdetail)
{
If($element -eq "Package\\Resource")
{
$directoryToZip= $location+"\\"+"Package\\Resource"
$FileName ="Package (Good Data).zip"
}
If($element -eq "Package\\ResourceBad")
{
$directoryToZip= $location+"\\"+"Package\\ResourceBad"
$FileName ="Package (Bad Data).zip"
}
If($element -eq "Package\\ResourceEmptymetada")
{
$directoryToZip= $location+"\\"+"Package\\ResourceEmptymetada"
$FileName ="Package (Bad with ManifestEmpty).zip"
}
If($element -eq "Package\\ResourceEmptydatafile")
{
$directoryToZip= $location+"\\"+"Package\\ResourceEmptydatafile"
$FileName ="Package (Bad with Datafile Empty).zip"
}
If($element -eq "Package\\EmptyTest")
{
$directoryToZip= $location+"\\"+"Package\\EmptyTest"
$FileName ="EmptyTest.zip"
}
$zipfile = new-object Ionic.Zip.ZipFile
$e= $zipfile.AddDirectory($directoryToZip)
$zipfile.Save($location+"\\"+$FileName)
$zipfile.Dispose()
$directoryToZip=""
}
和我的C#代码
private static void StartPowerShell(string args,string TempScript)
{
string powerShellPath ="C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe";
string commandLine = @" -Sta -Command ""& {{ try {{ {0} }} catch {{throw}} }} """.InvariantCultureFormat(args);
var info = new ProcessStartInfo();
info.FileName = powerShellPath;
info.Arguments = commandLine;
info.WorkingDirectory = Environment.CurrentDirectory;
info.UseShellExecute = false;
info.CreateNoWindow = false;
info.RedirectStandardError = true;
info.RedirectStandardOutput = true;
//Pass the Username and Password here in ProcessStartInfo
info.UserName = "Saroop";
string pw = "saroop";
System.Security.SecureString password = new System.Security.SecureString();
foreach (var item in pw)
{
password.AppendChar(item);
}
info.Password = password;
info.RedirectStandardError = true;
info.RedirectStandardOutput = true;
Process p = new Process();
p.StartInfo = info;
bool flag = p.Start();
string error = p.StandardError.ReadToEnd();
p.WaitForExit();
}
请指引我的人。我尝试使用runas命令以用户(管理员)身份启动Powershell.exe,但它也要求输入用户名和密码。 我尝试System.Management.Automation。 http://msdn.microsoft.com/en-us/library/system.management.automation(v=vs.85).aspx
:DLL,但它没有更多的在.Net4.0 参考链接存在请帮帮我。
我找到了我的查询的答案。 用于执行PowerShell脚本必须执行政策命令 SYSTEM32 C:\ WINDOWS \ SYSTEM32 \ WindowsPowerShell \ V1.0 \ powershell.exe ,如果你的系统是64BIT随后也EXECUTE 64位POWERSHELL.EXE TOO相同的策略。 C:\ WINDOWS \ Syswow64资料\ WindowsPowerShell \ V1.0 \ POWERSHELL.EXE
/// COMMAND : `Set-ExecutionPolicy Unrestricted`
您在评论中写道什么会的作品,但我想给你一个方向运行,从C#代码PowerShell脚本。
您可以使用System.Management.Automation.Runspaces
命名空间,其暴露很容易和更优雅的方式来运行PowerShell命令和检索C#(和使用返回对象,而不仅仅是输出文本流)的结果。尝试阅读有关它。
下载PowerShell SDK http://www.microsoft.com /download/en/details.aspx?id=2560它有C#中的示例如何调用PowerShell。 – 2012-01-30 06:31:32
这个DLL不能在.Net 4.0中使用。 – 2012-01-30 07:45:05
@ Shanhar,Phil:你的方式也没有错,但为此我需要安装Powershell SDK。但是如果我没有任何安装SDK的权利,那么它需要运行,因为Process.My脚本在TFS 2010上运行,我不知道TFS服务器配置的任何信息。因此,我们在不同的场景中都是正确的 – 2012-01-30 11:57:28
我发现我的查询的答案。 用于执行PowerShell脚本必须执行政策命令 SYSTEM32 ** C:\ WINDOWS \ SYSTEM32 \ WindowsPowerShell \ V1.0 \ powershell.exe ** ,如果你的系统是64BIT随后也EXECUTE同样的政策对于64位POWERSHELL .EXE TOO。 ** C:\ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \ POWERSHELL.EXE ** **'命令:Set-ExecutionPolicy Unrestricted' ** – 2012-01-27 13:40:50