gpt4 book ai didi

c# - 在 C# 中运行 Powershell 脚本

转载 作者:可可西里 更新时间:2023-11-01 09:27:35 29 4
gpt4 key购买 nike

我正在尝试通过 C# 在 Windows 窗体中运行 PowerShell 脚本。

问题是我有两个枚举,我无法在代码中正确地使用它们:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Collections.ObjectModel;
using System.Management.Automation;
using System.Management.Automation.Runspaces;

namespace WindowsFormsApp6
{
static class Program
{
/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
} *here
}

我的理解是,我是否必须在 static void 下添加以下内容? (在*这里):

 using (PowerShell PowerShellInstance = PowerShell.Create())
{
}

那我是复制粘贴进去吗?

但这当然不是那么容易;我用 Google 搜索了它,但我不明白我必须做什么才能使其正常工作...

Enum RandomFood
{#Add Food here:
Pizza
Quesedias
Lasagne
Pasta
Ravioli
}

Enum Meat
{#Add Food here:
Steak
Beaf
Chicken
Cordonbleu
}

function Food {

Clear-Host
$Foods = [Enum]::GetValues([RandomFood]) | Get-Random -Count 6
$Foods += [Enum]::GetValues([Meat]) | Get-Random -Count 1

$foodsOfWeek = $Foods | Get-Random -Count 7
Write-Host `n "Here is you'r List of Meals for this week :D" `n
foreach ($day in [Enum]::GetValues([DayOfWeek])) {
([string]$day).Substring(0, 3) + ': ' + $foodsOfWeek[[DayOfWeek]::$day]
}
}

最后,我希望只需按下表单上的一个按钮,然后让它运行将其输出到文本框的脚本。

这可能吗?

感谢您的帮助!

最佳答案

您可以将您的 PowerShell 脚本放入一个单独的文件中,并在绑定(bind)事件时调用它。

// When a button is clicked...
private void Button_Click(object sender, EventArgs e)
{
// Create a PS instance...
using (PowerShell instance = PowerShell.Create())
{
// And using information about my script...
var scriptPath = "C:\\myScriptFile.ps1";
var myScript = System.IO.File.ReadAllText(scriptPath);
instance.AddScript(myScript);
instance.AddParameter("param1", "The value for param1, which in this case is a string.");

// Run the script.
var output = instance.Invoke();

// If there are any errors, throw them and stop.
if (instance.Streams.Error.Count > 0)
{
throw new System.Exception($"There was an error running the script: {instance.Streams.Error[0]}");
}

// Parse the output (which is usually a collection of PSObject items).
foreach (var item in output)
{
Console.WriteLine(item.ToString());
}
}
}

在此示例中,您可能会更好地利用传入的事件参数,并执行一些更好的错误处理和输出日志记录,但这应该会让您走上正确的道路。

请注意,按原样运行当前脚本只会声明您的Food 函数,但不会实际运行它。确保您的脚本或 C# 代码中有函数调用。

关于c# - 在 C# 中运行 Powershell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50818687/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com