简体   繁体   English

如何调用 Powershell 脚本并从 C# windows 表单传递参数

[英]How to call Powershell script and pass parameters from C# windows form

I want to call powershell script which accepts some parameters from c# windows form.我想调用 powershell 脚本,它接受来自 c# windows 表单的一些参数。

For Example:- I have powershell script which accepts 2 parameters and i have a windows form with two textbox and a submit button.例如:- 我有 powershell 脚本,它接受 2 个参数,我有一个 windows 表单,带有两个文本框和一个提交按钮。 i want to pass parameters to powershell script from these two textboxes.我想从这两个文本框中将参数传递给 powershell 脚本。 When i press the submit button it will call the powershell script and run it on powershell terminal and also show result in powershell terminal.当我按下提交按钮时,它将调用 powershell 脚本并在 powershell 终端上运行它,并在 powershell 终端上显示结果。

Here is working example for powershell script, that gives you ASCII code for char.这是 powershell 脚本的工作示例,它为您提供 char 的 ASCII 代码。 Assuming you have richTextbox1 for showing output of the script and that you have button1 which you trigger it to run - here is the code:假设您有 richTextbox1 用于显示脚本的 output 并且您有 button1 触发它运行 - 这是代码:

        public void RunPowershell()
        {
            var ps1File = @"C:\asc.ps1";

            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.FileName = @"powershell.exe";
            startInfo.Arguments = $@"& '{ps1File}' f";
            startInfo.RedirectStandardOutput = true;
            startInfo.RedirectStandardError = true;
            startInfo.UseShellExecute = false;
            startInfo.CreateNoWindow = true;
            Process process = new Process();
            process.StartInfo = startInfo;
            process.Start();

            string output = process.StandardOutput.ReadToEnd();
            string errors = process.StandardError.ReadToEnd();

            richTextBox1.Text = $"Output: {output}{Environment.NewLine}Errors = {errors}";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            RunPowershell();
        }

This will give ascii code for char 'f'.这将为 char 'f' 提供 ascii 代码。

Bellow is the PS script attached to example: Bellow 是附在示例中的 PS 脚本:

function Syntax {
    Write-Host
    Write-Host "Asc.ps1,  Version 1.00"
    Write-Host "Returns the numeric ASCII value for the specified character"
    Write-Host
    Write-Host "Usage:   " -NoNewline
    Write-Host "ASC.PS1  char" -ForegroundColor White
    Write-Host
    Write-Host "Returns: Numeric ASCII value of " -NoNewline
    Write-Host "char" -ForegroundColor White
    Write-Host
    Write-Host "Notes:   The ASCII value is written to Standard Output (usually the screen)"
    Write-Host "         as well as returned as `"errorlevel`""
    Write-Host "         If more than 1 character is passed on the command line, only the first"
    Write-Host "         character will be used, the remainder of the string will be ignored."
    Write-Host "         The `"errorlevel`" will equal the ASCII value, or 0 if no parameter"
    Write-Host "         was passed, or -1 in case of errors or for this help"
    Write-Host
    Write-Host "Credits: Code to pass exit code as `"errorlevel`" to the calling batch file"
    Write-Host "         or PowerShell script by Serge van den Oever:"
    Write-Host "         weblogs.asp.net/soever/returning-an-exit-code-from-a-powershell-script" -ForegroundColor DarkGray
    Write-Host
    Write-Host "Written by Rob van der Woude"
    Write-Host "http://www.robvanderwoude.com"

    $Host.SetShouldExit( -1 )
    Exit
}

if ( $args.Length -eq 1 ) {
    if ( $args[0] -eq "/?" ) {
        Syntax
    } else {
        $input = $args[0]
    }
} else {
    Syntax
}

if ( $input -eq "" ) { $input = [string][char]0 }

[char]$char = $input[0]

Write-Host ([byte]$char) -NoNewline

# Pass exit code to calling batch or PowerShell script, by Serge van den Oever
# https://weblogs.asp.net/soever/returning-an-exit-code-from-a-powershell-script
$Host.SetShouldExit( [byte]$char )
Exit

Save it to disk C , call it asc.ps1 --> and you have working example.将其保存到磁盘C ,将其命名为asc.ps1 --> 你就有了工作示例。

Just start powershell.exe with parameters只需启动带参数的 powershell.exe

To start any external application you may want to check how is working Process.要启动任何外部应用程序,您可能需要检查 Process 的工作方式。

Process Class 工艺 Class

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM