c# - 如何在C#中将参数添加到powershellinstance

标签 c# asp.net .net windows powershell

我有一个Powershell脚本,我需要使用C#执行它

string psData = System.IO.File.ReadAllText(@"C:\Users\m\Desktop\power.ps1");
        using (PowerShell PowerShellInstance = PowerShell.Create())
        {
            PowerShellInstance.AddScript(psData);

            IAsyncResult result = PowerShellInstance.BeginInvoke();
            while (!result.IsCompleted)
            {
                Logger.Info("Wait initiated");
                Thread.Sleep(5000);
            }
            Logger.Info("Execution completed");
        }

使用上述代码脚本正在执行,但如何将参数传递给Shell脚本

我更改了代码
string psData = System.IO.File.ReadAllText(@"C:\Users\m\Desktop\power.ps1");
        Process pr = new Process();
        var processStartInfo = new ProcessStartInfo()
        {
            FileName = "powershell.exe",
            Arguments = $"-NoProfile -ExecutionPolicy unrestricted -file \""+psData+"\" \"arg1\" \"arg2\"",
            UseShellExecute = false
        };
        pr.StartInfo = processStartInfo;
        pr.Start();
        pr.WaitForExit();

最佳答案

使用AddArgument方法。
更多信息-> https://docs.microsoft.com/en-us/dotnet/api/system.management.automation.powershell.addargument?view=pscore-6.2.0
--------旧答案-----------------
不能确定如何通过PowerShellInstance类来执行此操作,但是可以使用Process类来调用带有参数的PowerShell脚本。

var file = @"C:\<Directory>\GetServices.ps1";
var processStartInfo = new ProcessStartInfo()
{
    FileName = "powershell.exe",
    Arguments = $"-NoProfile -ExecutionPolicy unrestricted \"{ps1File}\"",
    UseShellExecute = false
};
Process.Start(startInfo);

有关更多信息-> https://duanenewman.net/blog/post/running-powershell-scripts-from-csharp/
编辑2
  string psData = @"C:\Users\manis\Desktop\test.ps1";
    Process pr = new Process();
    var processStartInfo = new ProcessStartInfo()
    {
        FileName = "powershell.exe",
        Arguments = $"-NoProfile -ExecutionPolicy unrestricted -file {psData} hello",
        UseShellExecute = false
    };
    pr.StartInfo = processStartInfo;
    pr.Start();
    pr.WaitForExit();

我的Powershell脚本如下所示
param ($param1)
write-host $param1 

关于c# - 如何在C#中将参数添加到powershellinstance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61496938/

相关文章:

c# - Comparer<T>.Default 属性

c# - 如何用 C# 中的函数语句替换 for 循环?

c# - 如何显示父DIV中的所有div

c# - 当另一个线程/进程不必要地使用独占锁时,是否可以绕过 C# 中的文件锁?

c# - 正确退出使用 .NET 4.0 任务的 .net 控制台应用程序

c# - 删除字符串中特定字符后的字符,然后删除子字符串?

c# - 系统.MissingMethodException : Method 'Android.Support.V4.Widget.DrawerLayout.AddDrawerListener' not found

c# - 覆盖文本属性以自动修剪文本框值

c# - SSL 页面重定向到另一台服务器上的 SSL 页面

.net - 是否有同步 SQL Server 表的标准做法?