Visual Studio 2012 で SharePoint 2010 ソリューションに取り組んでいるときに、PowerShell スクリプトを実行してリストの 1 つからルックアップ フィールドを削除し、Visual Studio が既存のリストを削除してそれを私のソリューションの1つ。
ただし、Visual Studio でプロジェクトの「配置前コマンド ライン」から PowerShell を実行すると、スクリプトが を使用しようとするget-spweb
と、PowerShell はオブジェクトが見つからないと報告します。Visual Studio の出力ウィンドウを上にスクロールすると、Add-PsSnapin Microsoft.SharePoint.PowerShell
さまざまな問題が報告されていることがわかります。
(注: 実際のエラー メッセージには、$(ProjectDir)
"$(ProjectDir)" というテキストではなく、展開された値が含まれます。適切な 64 ビット バージョンの PowerShell を使用していることを確認するために、さまざまなレベルの間接参照を試みても、この作業ディレクトリは変更されません。スクリプトを呼び出す前にcd
またはコマンドを使用set-location
すると、このディレクトリに違いが生じます.無効な作業ディレクトリが問題の一部であるかどうか疑問に思っています...)
The local farm is not accessible. Cmdlets with FeatureDependencyId are not registered.
Could not read the XML Configuration file in the folder CONFIG\PowerShell\Registration\.
Could not find a part of the path '$(ProjectDir)\CONFIG\PowerShell\Registration'.
No xml configuration files loaded.
Unable to register core product cmdlets.
Could not read the Types files in the folder CONFIG\PowerShell\types\.
Could not find a part of the path '$(ProjectDir)\CONFIG\PowerShell\types'.
"No Types files Found."
Could not read the Format file in the folder CONFIG\PowerShell\format\.
Could not find a part of the path '$(ProjectDir)\CONFIG\PowerShell\format'.
No Format files Found.
コマンド プロンプト ウィンドウから PowerShell スクリプトを直接実行すると問題なく動作し、SharePoint スナップインは正しく読み込まれますが、Visual Studio からの実行は常に失敗します。以前の調査では、SharePoint と SQL Server のアクセス許可に関する潜在的な問題が示されていましたが、私のアカウントには両方で完全な管理者がいます。Visual Studio は「管理者として」実行されています。調査では、32 ビット対 64 ビットで起こりうる問題も明らかになりました。デプロイ前のコマンド ラインで%comspec% /c
、64 ビットを確認するように呼び出されるようになりました。
デプロイ前のコマンド ライン:
%comspec% /c ""$(ProjectDir)PowerShell Scripts\predeployment-command.cmd" "$(SharePointSiteUrl)" "$(ConfigurationName)" "$(ProjectDir)""
*.cmd ファイル:
echo off
rem pre-deployment script
rem call from pre-deployment command line like
rem %comspec% /c ""$(ProjectDir)PowerShell Scripts\predeployment-command.cmd "$(SharePointSiteUrl)" "$(ConfigurationName)" "$(ProjectDir)""
rem
echo Running "predeployment-command.cmd" file
echo
echo %%1 = %~1
echo %%2 = %~2
echo %%3 = %~3
echo
cd "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14"
cd
echo on
powershell.exe -file "%~3PowerShell Scripts\predeployment-script.ps1" -targetWeb "%~1" -CONFIG "%~2"
PowerShell スクリプト ファイル:
<#
.SYNOPSIS
Pre-deployment script for Visual Studio development deployments
add command to run this script in the project's pre-deployment command-line box
.EXAMPLE
powershell .\dev-predeployment-script.ps1
#>
param(
[string] $targetWeb = $(throw "Please specify the site to which Visual Studio is deploying!"),
[string] $CONFIG = $(throw "Please specify the active configuration!")
)
write-host "Running Pre-Deployment PowerShell Script";
# Ensure SharePoint extensions are loaded
$snapin = $(Get-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction "SilentlyContinue");
if($snapin -eq $null) {
Add-PsSnapin Microsoft.SharePoint.PowerShell;
}
$ErrorActionPreference = 'Stop';
#echo back parameter values:
write-host "TargetWeb = $targetWeb"
write-host "Configuration = $CONFIG"
#get web-site
$web = get-spweb $targetWeb;
if($web -ne $null) {
$recipients = $web.lists["Recipients"];
if($recipients -ne $null) {
$lookupField = $recipients.Fields["Request ID"];
if($lookupField -ne $null) {
$recipients.fields.remove($lookupField);
}
}
}
64 ビットの Windows Server 2008 r2 仮想マシンで開発しています。