ac# アプリケーションから PowerShell スクリプトを実行しようとしています。スクリプトは、特別なユーザー コンテキストで実行する必要があります。
私はさまざまなシナリオを試しましたが、機能しているものと機能していないものがあります:
1. PowerShell からの直接呼び出し
正しいユーザー資格情報で実行されている ps コンソールからスクリプトを直接呼び出しました。
C:\Scripts\GroupNewGroup.ps1 1
結果:スクリプトが正常に実行されました。
2. ac# コンソール アプリケーションから
正しいユーザー資格情報で開始される ac# consoleapplication からスクリプトを呼び出しました。
コード:
string cmdArg = "C:\\Scripts\\GroupNewGroup.ps1 1"
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.ApartmentState = System.Threading.ApartmentState.STA;
runspace.ThreadOptions = PSThreadOptions.UseCurrentThread;
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(cmdArg);
pipeline.Commands[0].MergeMyResults(PipelineResultTypes.Error, PipelineResultTypes.Output);
Collection<PSObject> results = pipeline.Invoke();
var error = pipeline.Error.ReadToEnd();
runspace.Close();
if (error.Count >= 1)
{
string errors = "";
foreach (var Error in error)
{
errors = errors + " " + Error.ToString();
}
}
結果:成功しません。そして、多くの「Null-Array」例外。
3. ac# コンソール アプリケーションから - コード側の偽装
( http://platinumdogs.me/2008/10/30/net-c-impersonation-with-network-credentials )
正しいユーザー資格情報の下で開始される ac# consoleapplication からスクリプトを呼び出しましたが、コードには偽装が含まれています。
コード:
using (new Impersonator("Administrator2", "domain", "testPW"))
{
using (RunspaceInvoke invoker = new RunspaceInvoke())
{
invoker.Invoke("Set-ExecutionPolicy Unrestricted");
}
string cmdArg = "C:\\Scripts\\GroupNewGroup.ps1 1";
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.ApartmentState = System.Threading.ApartmentState.STA;
runspace.ThreadOptions = PSThreadOptions.UseCurrentThread;
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(cmdArg);
pipeline.Commands[0].MergeMyResults(PipelineResultTypes.Error, PipelineResultTypes.Output);
Collection<PSObject> results = pipeline.Invoke();
var error = pipeline.Error.ReadToEnd();
runspace.Close();
if (error.Count >= 1)
{
string errors = "";
foreach (var Error in error)
{
errors = errors + " " + Error.ToString();
}
}
}
結果:
- 「Get-Contact」という用語は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認してから再試行してください。
- 「C:\Scripts\FunctionsObjects.ps1」という用語は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認してから再試行してください。
- Windows PowerShell バージョン 2 用のスナップインは登録されていません。 Microsoft.Office.Server, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c
- System.DirectoryServices.AccountManagement、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089
- "1" 個の引数を指定して ".ctor" を呼び出す例外: "Web アプリケーション
http://XXXX/websites/Test4/
が見つかりませんでした。URL を正しく入力したことを確認してください。URL が既存のコンテンツを提供する必要がある場合は、システム管理者が追加する必要がある場合があります意図したアプリケーションへの新しいリクエスト URL マッピング。」 - null 値の式でメソッドを呼び出すことはできません。null 配列にインデックス付けできません。
今まで有効な答えはありません
違いがある理由と問題の解決方法を知っている人はいますか?