これはいくぶんSharePointに関連していますが、質問の本質は実際にはSharePoint固有のものではないと思います.
これが状況です。サードパーティの SharePoint アドオンを使用しています。このアドオンをインストールすると、SharePoint ライブラリ設定ページにレコード ライブラリのリンクが表示されます。リンクをクリックすると、いくつかのコードが実行され、ライブラリに対していくつかの構成が行われます (カスタム コンテンツ タイプのインストールなど)。
リンク自体がいくつかの Javascript を実行します。
function dialogCallback()
{
SP.UI.Notify.addNotification('Content types installed and settings configured.');
SP.UI.ModalDialog.RefreshPage(SP.UI.DialogResult.OK);
}
function openInstallContentTypesDialog()
{
var options = SP.UI.$create_DialogOptions();
options.url = 'http://my.sharepoint.site/_layouts/Custom/Feature/ExecuteConfigurationCode.aspx?SiteUrl=http://my.sharepoint.site&ListId={6767676a-0101-b4dc-a67a-67a67a67a67a}';
options.dialogReturnValueCallback = Function.createDelegate(null, dialogCallback);
SP.UI.ModalDialog.showModalDialog(options);
}
openInstallContentTypesDialog();
50 個までのライブラリを構成する必要があるため、UI から各ライブラリの設定ページに移動してそのリンクをクリックする必要はありません。(特に、複数の開発/テスト/etc 環境でファームをセットアップするため、複数回実行する必要があるためです。) Powershell スクリプトを作成し、すべてのライブラリを循環させ、そのリンクをクリックすることを何らかの方法でシミュレートしたいと考えています。ページを呼び出しExecuteConfigurationCode.aspx
ます。Powershell を介してクエリ文字列 (サイト URL とリスト ID) に必要な情報を取得できることはわかっていますが、aspx ページのコードを起動する方法がわかりません。
System.Net.WebClient
私はいくつか掘り下げて、オブジェクトを使用してそれを呼び出すように言っているいくつかの投稿を見つけましDownloadString()
た。何かのようなもの:
$web = get-spweb http://my.sharepoint.site
$list = $web.Lists["My Record Library"]
$requestUrl = $web.Url+"/_layouts/Custom/Feature/ExecuteConfigurationCode.aspx"
$querystring = new-object system.collections.specialized.namevaluecollection
$querystring.Add("SiteUrl", $web.Url)
$querystring.Add("ListId", "{"+$list.Id.Tostring()+"}")
$webclient = new-object system.net.webclient
$webclient.Credentials = new-object system.net.networkcredential("Site Collection Admin", "password")
$webclient.QueryString = $querystring
$response = $webclient.downloadstring($requestUrl)
また、ページを構成する HTML はすべて取得できますが、aspx ページの背後にあるコードは実行されません。
また、このメソッドを試してUploadString()
、POST である必要があるかどうかを確認しました。結果は同じでした。ページの HTML はすべて返されましたが、aspx ページのサーバー側コードは実行されませんでした。
では...どうすればPowershellを介してそのリンクをクリックすることをシミュレートできますか? (また、SharePoint であるため、Powershell 2.0 である SharePoint 2010 管理シェルを使用していることにも注意してください。そのため、Invoke-WebRequest
コマンドレットは使用できません。)