私たちは通常にスタンドアロンのPowerShellセッションで実行しますPowerShellスクリプト(StartBackup.ps1)の実行を動かしてるに設定されていますC#アプリケーション。スクリプトは通常PowerShellで直接実行され、モジュール/ DLLをインポートしたり、他のスクリプトに呼び出したり、さまざまな変数を設定したりします。
using (PowerShell powerShell = PowerShell.Create())
{
powerShell.AddCommand("Set-ExecutionPolicy");
powerShell.AddParameter("Scope", "Process");
powerShell.AddParameter("ExecutionPolicy", "RemoteSigned");
powerShell.AddCommand("Set-Location");
powerShell.AddParameter("Path", "E:\\BackupTools");
powerShell.AddCommand("E:\\BackupTools\\StartBackup.ps1", false);
powerShell.AddParameter("Type", "Closed");
Collection<PSObject> results = powerShell.Invoke();
foreach (var resultItem in results)
{
...
}
}
上記の実行がちょうど$グローバル時点まで罰金:C#アプリケーションで
は、私が持っているものが設定されます、そして、それはエラーをスローするように始まることがあります。これらの値はすべて空白です。 は、私は、スクリプトの実行後にこれらの値が設定されているかどうかをチェックするためにpowerShell.AddCommandsのカップルを追加し、彼らが実際にPowerShellのインスタンス内のすべてのNULLです。スタンドアロンシェルでは、すべてうまくセットされています。ここで問題は何ですか? PowerShellインスタンスが実際のシェルと異なるのはなぜですか?
編集:意図は、スクリプトを起動して忘れることではありません。その意図は、PowerShellインスタンスの中に残すアーティファクトがあれば、powershell.exeの場合と同じように作業を続けていくことです。
$グローバルなものを設定したり、エラーを取得しますどこが示されていません。 –
'Set-Location'コマンドは効果がありません。これは問題を引き起こす可能性があります。しかし、[mcve]がなければ、確実に何かを言うのは難しいです。 – PetSerAl
@PetSerAl、効果がない理由を詳しく説明できますか? – RecursiveCall