問題タブ [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.

0 投票する
1 に答える
808 参照

c# - PowerShell スイッチの検出

C# で PowerShell コマンドレットを開発しており、true/false の切り替えステートメントがあります。bool を true にしたい場合は、-SwitchName $true を指定する必要があることを指摘しました。それ以外の場合は、次のようになります。

スイッチは次のように装飾されています。

スイッチの存在を検出するにはどうすればよいですか (-SwitchName が true に設定され、-SwitchName がない場合は false を示します)。

0 投票する
2 に答える
2941 参照

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 ディレクトリ) を取得するにはどうすればよいですか?

0 投票する
0 に答える
285 参照

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。達成したい結果を得るにはどうすればよいですか?

コード:

0 投票する
1 に答える
206 参照

c# - PowerShell で呼び出し可能な PowerShell クラスを作成する

コマンドレット (および/または PSCmdlet) を使用して、作成できます

次に、powershell でコマンドを呼び出すことができます

そして、すべてが順調です。

しかし、オブジェクトを取得してpowershellで使用できるように、関数ではなくクラスを作成したいと思います

何かのようなもの

上記はC#でできますか?もしそうなら、どのように?

0 投票する
0 に答える
279 参照

c# - C# Powershell コマンドレット: 別のコマンドレットを呼び出す

C# で一連の PowerShell コマンドレットを作成しました。

これで、別のコマンドレットのコードを再利用できるコマンドレットができました。

Powershell では、パラメーターを指定してコマンドレットを呼び出すだけなので簡単ですが、C# で呼び出す方法はありますか? 完全なロジックは // 実装で実装されてBeginProcessing()おり、基本的には return ProcessRecord()/ useなので、それは不可能 (?) になると思います。EndProcessing()voidWriteObject()

私が正しければ、これを処理する正しい方法は何ですか? メソッドから重要なコードを抽出し、BeginProcessing()それを別のメソッドに入れて利用できるようにする必要がありますか?

フィードバックをお待ちしております、ジョエル

0 投票する
2 に答える
621 参照

c# - コマンドレットの詳細ストリーム

現在、PowerShell 5.0 SDK を使用して C# コマンドレットを作成しています。

「リアルタイム」でpowershellから実行したときに、サードパーティの実行可能ファイルのStandardErrorをコマンドレット出力にパイプしようとしています。

現在、プロセスの実行を処理するために MedallionShell ライブラリを使用しています。私はこれを通常の C# win フォームで試し、 Command.StandardError.PipeToAsync(Console.OpenStandardOutput()) を使用して出力を取得し、実行可能ファイルが「リアルタイム」でコンソールに生成したときに出力を取得しました。

WriteVerbose を呼び出す独自の Stream オブジェクトを作成しようとしましたが、powershell 画面に何も出力されていないようです (実行時にコマンドレットに -Verbose を渡しています)。

私の現在の流れは次のようになります。

  1. Powershell ISE を開く
  2. モジュールをロードする (C# dll)
  3. パラメーターを指定してコマンドレットを呼び出す
    • Command.Run
    • Command.StandardError.PipeToAsync(???)
    • Command.Wait (このステップの間、出力は powershell ウィンドウに流れているはずです)
    • Command.Result.Success を確認してください。

誰かがこれについて正しい方向に私を向けることができますか?