「PowerShell」タグアーカイブ

C#からPowerShellを実行した時のメモ System.Management.Automation.dll


C#からPowerShellを実行する時に行った手順を纏めておきます。

2022/4/12 時点でGoogleでC#からPowerShellを実行する方法をぐぐっても古い記事しかヒットせず、役に立ちませんでした。

なので自分用にメモっておきます。

まず、C#からPowerShellを実行する場合

System.Management.Automation.dll

を参照設定しておく必要があります。

古い解説サイトには、

C:\Program Files (x86) の中にある、といった解説がありましたが実際には見つかりませんでした。

そこで以下サイトから

System.Management.Automation.dll

をダウンロードしました。

https://www.exefiles.com/ja/dll/system-management-automation-dll/

ダウンロードが完了したら

プロジェクトの上で右クリック >参照の追加

参照マネージャ > 参照 > 参照(B)… をクリックしてダウンロードした

System.Management.Automation.dll

を参照設定します。

この設定が終わったらソースコードの冒頭に

using System.Management.Automation;
using System.Management.Automation.Runspaces;

を記述します。

参照設定が終わってからでないとusing設定するとエラーが発生します。

※注意※

なお、NuGetパッケージで automationと検索すると

System.Management.Automation

というプログラムが表示されますが、これを設定しても

using System.Management.Automation;
using System.Management.Automation.Runspaces;

の宣言をするとエラーが発生します。

地道に

System.Management.Automation.dll

を探しプロジェクトに参照設定する様にしましょう。

 

追記:2022/4/13 11:10

なお、プロジェクトの中から参照したアセンブリはあくまでも参照しているだけです。その為、参照先のアセンブリを削除してしまうとこの様なエラーメッセージが表示されてしまうので注意しましょう。

 


Windows PowerShell実行時に権限エラーが出る場合の対処方法 / 実行ポリシーの変更


所要でDOSバッチからパワーシェルを実行しようとしたところ権限エラーが出ました。

このエラーが出ない様にするには、

管理者権限でPowerShellを起動し次のコマンドを事前に発行しておきます。「実行ポリシーの変更」と呼ばれています。

マイクロソフトによると、DOSのパワーアップ版がPowerShellみたいです。

Set-ExecutionPolicy RemoteSigned

あと、ファイルの拡張子がDOSバッチ「*.bat」と違ってPowerShellの場合には、「*.ps1」です。

DOSだけではどうしても発行出来ないコマンドがあったので

DOSバッチのキック ⇒ PowerShell実行

という流れで行ったところ問題無く出来ました。

なお、PowerShellはWindowsの設定回りをPowerShellを使うと一度に実行出来るので便利です。

 

※補足

同じディレクトリに*.ps1と*.batファイルを置いてDOSバッチからPowerShellを実行する場合

dosバッチの中身

powershell -Command ./hogehogehoge.ps1

こんな感じで実行出来ます。

Linuxみたいに「./」を頭に付けて実行する必要があります。

複数の端末に同一のWindows設定を行いたい場合には、PowerShellで定義しておくと設定が楽です。