我正在开发一个小型的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)
答案 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方法工作,没有骰子。 祝你好运。祝你好运。