我正在开发一个 C# 项目,该项目应该获取一个字符串变量(文件路径)并将其传递给 PowerShell 脚本以使用它完成进一步的命令。我一直在网上和通过 Stack 环顾四周,但找不到适合我的东西......
这是我现在的 C# 代码:
string script = System.IO.File.ReadAllText(@"C:\my\script\path\script.ps1");
using (Runspace runspace = RunspaceFactory.CreateRunspace())
{
runspace.Open();
PowerShell ps = PowerShell.Create();
ps.Runspace = runspace;
ps.AddScript(script);
ps.Invoke();
ps.AddCommand("LocalCopy");
foreach (PSObject result in ps.Invoke())
{
Console.WriteLine(result);
}
}
这是我的 PowerShell 脚本:
Function LocalCopy
{
Get-ChildItem -path "C:\Users\file1\file2\file3\" -Filter *.tib -Recurse |
Copy-Item -Destination "C:\Users\file1\file2\local\"
}
我想要做的是脚本的第一部分:"C:\Users\file1\file2\file3\"
替换为(我假设是)一个我可以从 C# 代码传递到 PowerShell 脚本的变量。我对使用 PowerShell 非常陌生,并且不太确定我将如何去做这样的事情。
- -编辑 - -
我的代码仍然存在问题,但我没有收到任何错误。我相信这是因为变量仍然没有被传递......
C#代码:
字符串脚本 = System.IO.File.ReadAllText(@"C:\my\script\path\script.ps1");
using (Runspace runspace = RunspaceFactory.CreateRunspace())
{
runspace.Open();
PowerShell ps = PowerShell.Create();
ps.Runspace = runspace;
ps.AddScript(script);
ps.Invoke();
ps.AddArgument(FilePathVariable);
ps.AddCommand("LocalCopy");
foreach (PSObject result in ps.Invoke())
{
Console.WriteLine(result);
}
}
PowerShell代码:
Function LocalCopy
{
$path = $args[0]
Get-ChildItem -path $path -Filter *.tib -Recurse |
Copy-Item -Destination "C:\Users\file1\file2\local\"
}
任何帮助将非常感激。谢谢!