c# - 如何在 C# 中向 powershellinstance 添加参数
问题描述
我有一个 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
推荐阅读
- sql - 当信息存储在辅助表中时,如何在 SQL 中查询页面的最新版本?
- javascript - 如何在 React 中仅将 css 应用于此组件?
- sql - 不能在 MariaDB 中使用 UDF 作为约束
- c# - 在跨平台 C# .NET 应用程序中导出到 Excel 电子表格
- objective-c - Xcode Build 日志中的“Register MyApp.app”是什么意思?
- c - clock_nanosleep,中断和进程唤醒之间的时间测量
- java - 如何将复杂的 double for 循环转换为 Java 8 Streams 降低复杂性并提高性能
- elasticsearch - elasticsearch wrap bool 并且必须围绕 multi_match
- c++ - 存在可变参数模板时的模板特化
- sockets - 为什么调用 WS2_32 关闭时会创建一个新句柄?