1

次のような PowerShell スクリプトを作成しました。

  1. Get-SPServiceApplicationPool、Get-SPMetadataServiceApplicationProxy、および Get-SPMetadataServiceApplication を使用して、サービスが既に構成されているかどうかを確認します。
  2. 対応する Remove-* コマンドレットを使用して、アプリケーション プール、プロキシ、およびサービスが存在する場合はそれらを削除します
  3. 対応する New-* コマンドレットを使用して、アプリケーション プール、プロキシ、およびサービスを作成します。
  4. 有効になっていない場合、分類およびメタデータ ナビゲーション機能を有効にします
  5. グループと用語セットを作成して設定します

これを FeatureActivated イベントの機能イベント レシーバーを持つ機能として C# に実装したいと思います。最初のステップで最初の問題に遭遇しました (他にもあるかもしれません)。しばらくの間、自分で C# から SPIisWebServiceApplicationPool を取得する方法を見つけようとした後、Microsoft.SharePoint.Powershell を逆コンパイルして、Get-SPServiceApplicationPool コマンドレットがどのように実装されているかを確認しました。これは、Microsoft.SharePoint アセンブリの SPIisWebApplicationSettings にアクセスすることによって行われます。SPIisWebApplicationSettings.Default.ApplicationPools 列挙を使用します。そのクラスは internal とマークされ、Microsoft.SharePoint アセンブリに InternalsVisibleTo 属性を含めることで、Microsoft.SharePoint.Powershell アセンブリからクラスへのアクセスが許可されます。

では、Microsoft.SharePoint アセンブリをハッキングして再コンパイルしてアセンブリに InternalsVisibleTo へのアクセスを許可したり、機能内で PowerShell をホストしたりせずに、SPIisWebServiceApplicationPool が存在するかどうかを確認し、存在する場合は削除して、新しい SPIisWebServiceApplicationPool を作成するにはどうすればよいでしょうか? また、内部クラスへのアクセスを取得するためにリフレクションを使用することはお勧めできません...これを可能にする SharePoint API に欠けているものを探しています。

4

0 に答える 0