問題タブ [pscmdlet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - PowerShell スイッチの検出
C# で PowerShell コマンドレットを開発しており、true/false の切り替えステートメントがあります。bool を true にしたい場合は、-SwitchName $true を指定する必要があることを指摘しました。それ以外の場合は、次のようになります。
スイッチは次のように装飾されています。
スイッチの存在を検出するにはどうすればよいですか (-SwitchName が true に設定され、-SwitchName がない場合は false を示します)。
c# - AppDomain.CurrentDomain.BaseDirectory が間違ったディレクトリに変更される
dll
コマンドを使用して を作成しましたCmdlet
(Get_DemoNames.cs を参照)。これからcmdlet
メソッドを呼び出しますUpdateXml()
。これまでのところ、すべてが機能しています。ただしUpdateXml()
、ファイルが存在しない場合はファイルも作成します。UpdateXml()
このようなクラスファイルを呼び出すと:
そして、正しいディレクトリに移動するプロジェクトを実行します。
しかし、インポートをロードしてdllをロードし、次のDemoNames
ように別のテストプロジェクトでコマンドを実行すると:
プログラムが間違ったディレクトリに移動し、次のエラーが発生します。
Get-DemoNames : パス 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\beheer_extern\config' へのアクセスが拒否されました。行:1 文字:10 + DemoNames <<<< + CategoryInfo : NotSpecified: (:) [Get-DemoNames], UnauthorizedAccessException + FullyQualifiedErrorId : System.UnauthorizedAccessException,EF.XML.Get_DemoNames
ネットでこのエラーを検索したところ、他の人がコンストラクターに次の行を追加することで解決できたことがわかりました。
これにより、別の間違ったパスが得られます。
Get-DemoNames : パス 'C:\Windows\system32\beheer_extern\config' へのアクセスが拒否されました。行:1 文字:10 + DemoNames <<<< + CategoryInfo : NotSpecified: (:) [Get-DemoNames], UnauthorizedAccessException + FullyQualifiedErrorId : System.UnauthorizedAccessException,EF.XML.Get_DemoNames
Get_DemoNames.cs
パーサー.cs
プロジェクトの正しいディレクトリ (www ディレクトリ) を取得するにはどうすればよいですか?
c# - PSHost PromptForChoice 形式 ChoiceDescription
私のPSCmdlet
クラスでは、ユーザーに で選択するように求めていますPromptForChoice
。ユーザーは、使用する接続文字列を選択するよう求められます。ChoiceDescriptions
私は正しいフォーマットを与えることができません。
これをくれる
接続文字列
使用する接続文字列を選択します
[0] 0data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true
[1] 1有効な接続文字列。
[2] 2Data Source=111.111.1.1;Initial Catalog=Test;User id=User;Password=Password;MultipleActiveResultSets=true
[?] ヘルプ (デフォルトは「0」):
ご覧のとおり、数字は接続文字列のテキストにも含まれていますが、これは私が望んでいるものではありません。
これは私が達成しようとしているものです:
[0] データ ソース=.\SQLEXPRESS;統合セキュリティ=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;ユーザー インスタンス=true
などなど
結果として、ユーザーの選択が必要になりますint
。達成したい結果を得るにはどうすればよいですか?
コード:
c# - PowerShell で呼び出し可能な PowerShell クラスを作成する
コマンドレット (および/または PSCmdlet) を使用して、作成できます
次に、powershell でコマンドを呼び出すことができます
そして、すべてが順調です。
しかし、オブジェクトを取得してpowershellで使用できるように、関数ではなくクラスを作成したいと思います
何かのようなもの
上記はC#でできますか?もしそうなら、どのように?
c# - C# Powershell コマンドレット: 別のコマンドレットを呼び出す
C# で一連の PowerShell コマンドレットを作成しました。
これで、別のコマンドレットのコードを再利用できるコマンドレットができました。
Powershell では、パラメーターを指定してコマンドレットを呼び出すだけなので簡単ですが、C# で呼び出す方法はありますか? 完全なロジックは // 実装で実装されてBeginProcessing()
おり、基本的には return ProcessRecord()
/ useなので、それは不可能 (?) になると思います。EndProcessing()
void
WriteObject()
私が正しければ、これを処理する正しい方法は何ですか? メソッドから重要なコードを抽出し、BeginProcessing()
それを別のメソッドに入れて利用できるようにする必要がありますか?
フィードバックをお待ちしております、ジョエル
c# - コマンドレットの詳細ストリーム
現在、PowerShell 5.0 SDK を使用して C# コマンドレットを作成しています。
「リアルタイム」でpowershellから実行したときに、サードパーティの実行可能ファイルのStandardErrorをコマンドレット出力にパイプしようとしています。
現在、プロセスの実行を処理するために MedallionShell ライブラリを使用しています。私はこれを通常の C# win フォームで試し、 Command.StandardError.PipeToAsync(Console.OpenStandardOutput()) を使用して出力を取得し、実行可能ファイルが「リアルタイム」でコンソールに生成したときに出力を取得しました。
WriteVerbose を呼び出す独自の Stream オブジェクトを作成しようとしましたが、powershell 画面に何も出力されていないようです (実行時にコマンドレットに -Verbose を渡しています)。
私の現在の流れは次のようになります。
- Powershell ISE を開く
- モジュールをロードする (C# dll)
- パラメーターを指定してコマンドレットを呼び出す
- Command.Run
- Command.StandardError.PipeToAsync(???)
- Command.Wait (このステップの間、出力は powershell ウィンドウに流れているはずです)
- Command.Result.Success を確認してください。
誰かがこれについて正しい方向に私を向けることができますか?