Выполнить сценарий Powershell в C # без имени пользователя и пароля - PullRequest
1 голос
/ 27 января 2012

Как я буду выполнять скрипт Powershell в C # без использования имени пользователя и пароля?

Скрипт 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=""
  }

и код My 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.dll, но его больше нет в .Net4.0 Ссылка: http://msdn.microsoft.com/en-us/library/system.management.automation(v=vs.85).aspx

Пожалуйста, помогите мне.

Ответы [ 2 ]

1 голос
/ 30 января 2012

Я нашел ответ на свой запрос. ДЛЯ ВЫПОЛНЕНИЯ СЦЕНАРИИ ПОЛНОЙ ОБОЛОЧКИ ДОЛЖНЫ ВЫПОЛНИТЬ КОМАНДУ ПОЛИТИКИ ДЛЯ SYSTEM32 C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe И ЕСЛИ ВАША СИСТЕМА 64-битная, ТО ТОЛЬКО ИСПОЛЬЗУЙТЕ ТО ЖЕ ПОЛИТИКУ для 64-битного POWERSHELL.EXE. C: \ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \ Powershell.exe

    /// COMMAND : `Set-ExecutionPolicy Unrestricted`
1 голос
/ 27 января 2012

То, что вы написали в комментарии, будет работать, но я хотел бы дать вам другое направление для запуска сценариев PowerShell из кода C #.

Вы можете использовать System.Management.Automation.Runspaces пространство имен, которое действительно просто и элегантноспособ запуска команд powershell и получения результатов из C # (и с использованием возвращенных объектов , а не только выходного текстового потока).Попробуйте прочитать об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...