私は、文字列変数 (ファイル パス) を取得し、それを PowerShell スクリプトに渡して、さらにコマンドを実行することになっている C# プロジェクトに取り組んでいます。私はオンラインやスタックを見回してきましたが、自分に合ったものを見つけることができませんでした...
現在の私の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# コード:
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.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\"
}
どんな助けでも大歓迎です。ありがとう!