問題タブ [cmdlet]
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# - .cs ファイルを PowerShell コマンドレットに変換する方法は?
C# .NET プログラムを PowerShell コマンドレットに変換するのを手伝ってくれる人はいますか? 私はこの分野に非常に慣れていません。このチェックポイントから抜け出すために私を助けてください!
よろしく、
アルン
powershell - コマンドレットを作成する方法
プログラムは c# .net で作成しました。それをpowershellコマンドレットに変換したい。pssnapin および getproc プログラムを使用するように指示されました。誰でも私を助けてくれますか..
よろしくアルン
c# - CmdLet が C# からプログラムで呼び出されたときに、Powershell CmdLet の詳細出力をキャプチャする方法
バックグラウンド
- Windows 7 で Powershell 2.0 を使用しています。
- Powershell モジュールでコマンドレットを作成しています (「モジュール」は Powershell 2.0 の新機能です)。
- コマンドレットをテストするために、Visual Studio 2008 でコマンドレットをプログラムで呼び出す単体テストを作成しています。
参照
- 「コマンドレット内からコマンドレットを呼び出す方法」というMSDN のこの記事には、C# からコマンドレットを呼び出す方法が示されています。
ソースコード
これは私の実際のコードの要約版です — 私が抱えている問題をはっきりと見ることができるように、コードをできるだけ小さくしました:
/li>
コメント
- Powershell コマンド ラインから詳細出力を有効にしてキャプチャする方法を理解しています。それは問題ではありません。
- この場合、C# からコマンドレットをプログラムで呼び出しています。
- 私が見つけたものは、私の特定のシナリオに対応していません。一部の記事では、独自の PSHost を実装する必要があると示唆されていますが、費用がかかるようであり、コマンドレットをテキストとして呼び出す必要があるようにも思えます。
2009 年 7 月 20 日の更新
これは、以下の回答に基づくソースコードです。
* 「Get-Colors」コマンドレットを呼び出す方法 (理想的には、文字列として ps オブジェクトに渡す必要はありません)最後にそれらのコレクション。
上記のコードは、次の出力を生成します。
2010 年 1 月 16 日の更新
Powershell クラス (System.Management.Automation にありますが、Powershell 2.0 SDK に付属するアセンブリのバージョンにのみあり、Windows 7 ですぐに使用できるものではありません) を使用して、コマンドレットをプログラムで呼び出すことができます。詳細な出力を取得します。残りの部分は、実際にカスタム コマンドレットをその PowerShell インスタンスに追加することです。それが私の当初の目標だったので、PowerShell に付属するコマンドレットではなく、コマンドレットを単体テストすることです。
c# - Powershell プロバイダーのドライブ情報を保持するにはどうすればよいですか?
SQL データベース上のビジネス ロジック レイヤーである私の Powershell プロバイダーでは、Powershell ドライブはデータベース接続設定と同等です。この接続設定のコレクションは、ローカル コンピューター上の暗号化された XML ファイルに保持されます。管理者は、これらの PS ドライブをコンピューターに追加して、別の Powershell ユーザーがスクリプトを作成するときに使用できる SQL Server 資格情報を提供できます。管理者が New-PSDrive を実行すると、ドライブがコレクションに追加され、XML に保存されます。彼らが PSDrive を削除すると、永続的な XML からドライブが削除されます。これはうまくいきます。ただし、Powershell ホストが終了すると、既存のドライブごとに RemoveDrive() が呼び出されます。この時点では、ドライブをコンピューターに保持する必要があるため、ドライブを削除したくありません。
Remove-PSDrive を手動で実行しているユーザーから RemoveDrive() が呼び出されているか、またはホストが終了しているかどうかを確認するにはどうすればよいですか?
また、うまく機能するカスタム ドライブ情報パラメーターを作成しましたが、ドライブの追加と削除に使用するカスタム コマンドレットも作成しました。コマンドレットから psdrive を作成 (および削除) するにはどうすればよいですか?
powershell - スクリプトブロックをパラメーターとして受け入れる PowerShell コマンドレットを作成する
Rename-Item はスクリプトブロック (私が思うに...) をパラメーターとして受け入れるので、一連のファイルの名前を変更したい場合は、次のようにすることができます (たとえば)。
いくつかのアイテムの名前を変更するコマンドレットを作成していて、新しい名前にこのような構文を使用できるようにしたいのですが、このようなスクリプト ブロックまたは単純な文字列を受け入れるようにパラメーターを宣言する方法を教えてください。
powershell - PowerShellコマンドレットのIPropertyCmdletProviderインターフェイスを実装する必要がありますか?
PowerShell用のNavigationCmdletProviderを作成しています。GetItemおよびGetChildItemsオーバーライドを介して、パイプラインに書き込まれるさまざまなタイプのオブジェクトがあります。
IPropertyCmdletProviderインターフェイスのドキュメントには、次のように記載されています。
開発者は、次の条件下でこのインターフェイスを実装する必要があります。
- ユーザーがGet-PropertyコマンドレットやSet-Propertyコマンドレットなどのコマンドレットを使用する必要がある場合。
- ItemCmdletProvider、ContainerCmdletProvider、またはNavigationCmdletProviderクラスから派生するプロバイダーの場合。
錯乱:
Get-PropertyコマンドレットとSet-Propertyコマンドレットを使用する必要があるかどうかをユーザーがどのように知るのでしょうか。それはCmdletの作者次第だと思います。(少なくとも私にとって)大きな混乱は、Cmdletがオブジェクトをパイプラインに書き込むかどうかです。そして、それらのオブジェクトには、呼び出し可能な(つまり、get / set)プロパティが公開されています。Get-Property / Set-Propertyを呼び出すと、オブジェクトを直接操作するよりもどのような利点がありますか?
質問:
どのような状況でIPropertyCmdletProviderインターフェイスを実装する必要がありますか?
私はここで何かが欠けていることを知っています!任意の洞察をいただければ幸いです。
powershell - エクスポート-メールボックスコマンドレットがメールを削除しない
PowershellでExport-Mailboxコマンドレットを使用して、メールボックスから2つの日付の間の電子メールを削除する際に問題が発生しました。私が実行している現在のコードは次のとおりです。
これらの2つの日付の間にある電子メールがあることは知っていますが、コマンドが実行されて完了するたびに、「ステップでエラーが発生しました:メッセージを移動しています。メッセージを宛先メールボックスストアにコピーできませんでした:不明です」というステータスメッセージが表示されますエラーが発生しました。」
Export-Mailboxを使用してメッセージを削除することに成功した人はいますか、またはこれがエラーになる理由を知っていますか?
ありがとう。
- ジョニー
~~~ソリューション~~~
Davidの助けを借りて、次のようにコマンドを再度実行しました。
これは、その期間に3000通を超える電子メールがない限り機能しました。
powershell - パイプライン上のコマンドレット間で共通のPowerShellコマンドラインパラメーターを渡すにはどうすればよいですか?
'new-foo'と'do-bar'の2つのコマンドレットがあるとします。両方のコマンドレットは、アクションを実行するためにサービスに対して認証する必要があり、「do-bar」はfooを取ります。今日、私はできる:
そして私はすることができます:
そして、パイプラインでfooを渡してそれらをチェーンすることもできます。例:
しかし、サービスの場所やパイプラインの要素間の資格情報などの一般的なパラメーターを渡す方法がわかりません。多数のコマンドレットがチェーンされている場合は、最初にクレデンシャルのみを渡し、その後、パイプラインの残りの部分でそれらを再利用したいと思います。
私が欠けているものは、これは明らかなはずです...
design-patterns - Powershell スクリプト: 関数呼び出しがネストされている場合に ShouldProcess を実装するための推奨される方法は?
テスト スクリプト:
出力:
私の目には、ここにいくつかの奇妙な点があります。
- -WhatIf:$foo を指定すると、$foo が何であれ、呼び出し先 (およびその呼び出し先) で常に$WhatIf がオンになります。
- -WhatIf を "実際に" (既存の変数に制約せずに) 指定すると、呼び出し先に暗黙的に伝達されます。パススルーやスプラッティングは必要ありません。
- -WhatIf とは異なり、明示的な -Verbose は呼び出し先に暗黙的にカスケードしません。
- -Verbose:$foo を手動でパススルーしようとすると、動作が -WhatIf:$foo に似ていることがわかります。ただし、$psCmdlet.ShouldProcess() を手動でテストするスクリプトにのみ影響します。組み込みのコマンドレットは影響を受けません。
注意: Confirm の動作は WhatIf と同じです。簡潔にするために省略しました。
Web と Connect を検索すると、高度な機能に関連する ShouldProcess の動作 (賛否両論) についての詳細な議論はほとんど見当たりません。最も近いものは、コール スタック全体で $psCmdlet の 1 つのインスタンスを渡すことを推奨するJames O'Neill の投稿です。ただし、彼はまったく別の問題を回避するためにそうします (複数の -Confirm プロンプトを回避します)。一方、各関数に提供されている標準の $psCmdlet に固執すると、何を期待するかについてのドキュメントが表示されません...デザインパターンやベストプラクティスなどははるかに少ないです...
powershell - PowerShellAdvancedFunctionは現在のParameterSetNameを取得します
C#では、次のようなコードを使用して、PowerShellParameterSetName
のProcessRecord
オーバーライドで電流を取得できます。Cmdlet
ParameterSetName
スクリプトコマンドレット(高度な関数)での値を取得する方法を理解しようとしています。