使用C#

时间:2015-10-02 07:29:55

标签: c# powershell visual-studio-2015

我正在开发一个小型的C#程序来卸载并重新安装windows appxpackages。 我已经手动使用了许多powershell命令,如果通过powershell运行它们都可以正常工作但是我想只需创建一个运行命令的按钮,而不必查看命令然后将其粘贴到提示窗口中。我已经研究了这种方法几天了,但我没有发现任何有用的东西。 在任何地方,我看到其他用户已经做过类似的事情,但是这将编译这将不会做任何事情。也许我只是没有看到某些东西或者没有理解某些东西。任何人都可以帮忙!

Powershell commands:
Get-AppxPackage *windowsstore* | Remove-AppxPackage
Get-AppxPackage *windowsstore* | Add-AppxPackage

using System.Management.Automation;

private void button_Click(object sender, EventArgs e)
{
    PowerShell ps = PowerShell.Create();
    ps.AddCommand("Get-AppxPackage");
    ps.AddArgument("*windowsstore*");
    ps.AddCommand("Remove-AppxPackage");
    ps.Invoke();
    Console.WriteLine("POWERSHELL OUTPUT! =( "+ps+" )");
}

输出:
    POWERSHELL输出! =(System.Management.Automation.PowerShell)

2 个答案:

答案 0 :(得分:0)

您直接打印PowerShell对象,而您想要做的是获取ps.Invoke()的输出并处理并打印它。

摘自example in the documentation

foreach (PSObject result in ps.Invoke())
  {
    Console.WriteLine(
            "{0,-24}{1}",
            result.Members["ProcessName"].Value,
            result.Members["Id"].Value);
  }

您可以在此处查看ps.Invoke()的输出是如何处理的。

如果您希望输出为文本:

foreach (PSObject result in ps.Invoke())
{
    Console.WriteLine("{0}", result);
}

答案 1 :(得分:0)

好的划伤。它令人费解,我已经停止了照顾。

这就是我解决问题的方法。我希望其他人会觉得这很有帮助。

        //Make a folder to keep everything together.
        if (!Directory.Exists(@"C:\\Folder"))
            Directory.CreateDirectory(@"C:\\Folder");

        var result = string.Empty;
        using (var webClient = new WebClient())
        {
            try
            {
                //Download the string of text for the command from a file on the server.
                // the command is just this.
                //Get-AppXPackage -AllUsers | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"}
                result = webClient.DownloadString("http://MyServer.net/scripts/ReinstallWinApps.ps1");

                //Create a .ps1 file and dump the result into it then save.
                FileStream file = new FileStream(@"C:\\Folder\\ReinstallWinApps.ps1", FileMode.Create, FileAccess.ReadWrite);
                StreamWriter print_text = new StreamWriter(file);
                print_text.Write(result);
                print_text.Close();

                //Run the file as admin.
                ProcessStartInfo PS = new ProcessStartInfo(@"C:\\Folder\\ReinstallWinApps.ps1");
                PS.UseShellExecute = true;
                PS.Verb = "runas";
                Process.Start( PS );
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }

如果您找到更好的方法,请回馈世界。 我花了一个星期试图让powershell方法工作,没有骰子。 祝你好运。祝你好运。