1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【C#】PowerShell実行空間上で外部ファイルのps1スクリプトを呼び出す方法

Posted at

趣旨

.NET アプリケーションからPowerShellを実行するケースにおいて、
外部のps1スクリプトを呼び出す時、単純に呼び出すとエラーとなります。

ハンドルされていない例外: System.Management.Automation.PSSecurityException: このシステムではスクリプトの実行が無効になっているため、ファイル Verb-Noun.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(http://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。 ---> System.UnauthorizedAccessException: このシステムではスクリプトの実行が無効になっているため、ファイル Verb-Noun.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(http://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
   --- 内部例外スタック トレースの終わり ---
   場所 System.Management.Automation.Runspaces.AsyncResult.EndInvoke()
   場所 System.Management.Automation.PowerShell.EndInvoke(IAsyncResult asyncResult)
   場所 ConsoleApplication1.Program.Main(String[] args) 場所 Program.cs:行 84

この問題を解決する方法を共有します。

使用するコマンドが事前に用意される場合

Sample.cs
var config = RunspaceConfiguration.Create( );
{
    config.Scripts.Prepend( name: "Verb-Noun", definition: $"{script ...}" );
}
using ( var rs = RunspaceFactory.CreateRunspace( config ) )
using ( var ps = PowerShell.Create( ) )
{
    rs.Open( );
    ps.Runspace = rs;

    ps.AddCommand( cmdlet: "Verb-Noun" )
        .Invoke( );
}

実行中に用意される場合

Sample.cs
var state = InitialSessionState.CreateDefault( ); // or CreateDefault2, Create
{
    state.ExecutionPolicy = ExecutionPolicy.RemoteSigned; // or Unrestricted
}
using ( var rs = RunspaceFactory.CreateRunspace( state ) )
using ( var ps = PowerShell.Create( ) )
{
    rs.Open( );
    ps.Runspace = rs;

    ps.AddCommand( cmdlet: ".\\Verb-Noun.ps1" )
        .Invoke( );
}
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?