7

के रूप में चलाने पर SharePoint स्क्रिप्ट विफल हो जाती है मैंने एक स्क्रिप्ट लिखी है जो दस्तावेज़ लायब्रेरी में कुछ परीक्षण डेटा डालती है। मैं विजुअल स्टूडियो 2010 में पोस्ट-परिनियोजन चरण के रूप में इसका उपयोग करना चाहता हूं, ताकि & को वापस लेने के बाद लाइब्रेरी खाली न हो।विजुअल स्टूडियो पोस्ट-परिनियोजन कमांड

स्क्रिप्ट के प्रासंगिक अंश इस प्रकार हैं:

Install.ps1:

$scriptDirectory = Split-Path -Path $script:MyInvocation.MyCommand.Path -Parent 
. "$scriptDirectory\Include.ps1" 

$webUrl = "http://localhost/the_site_name" 
$web = Get-SPWeb($webUrl) 
... 

Include.ps1:

function global:Get-SPSite($url) 
{ 
    return new-Object Microsoft.SharePoint.SPSite($url) 
} 
function global:Get-SPWeb($url,$site) 
{ 
    if($site -ne $null -and $url -ne $null){"Url OR Site can be given"; return} 

    #if SPSite is not given, we have to get it... 
    if($site -eq $null){ 
     $site = Get-SPSite($url); 

    ... 
} 

यह ठीक काम करता है जब चलाने के रूप में इस प्रकार से कमांड लाइन, विजुअल स्टूडियो को फिर से तैनात करने के तुरंत बाद:

 
powershell \source\ProjectFiles\TestData\Install.ps1 

हालांकि, यह जब मैं दृश्य स्टूडियो में SharePoint परियोजना के गुणों में एक के बाद तैनाती आदेश पंक्ति के रूप में ठीक उसी आदेश का उपयोग काम नहीं करता:

 
Run Post-Deployment Command: 
New-Object : Exception calling ".ctor" with "1" argument(s): "The Web applicati 
on at http://localhost/the_site_name could not be found. Verify that you have t 
yped the URL correctly. If the URL should be serving existing content, the syst 
em administrator may need to add a new request URL mapping to the intended appl 
ication." 
At C:\source\ProjectFiles\TestData\Include.ps1:15 char:18 
+ return new-Object <<<< Microsoft.SharePoint.SPSite($url) 
    + CategoryInfo   : InvalidOperation: (:) [New-Object], MethodInvoca 
    tionException 
    + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.Power 
    Shell.Commands.NewObjectCommand 

दिलचस्प है, मैं त्रुटि पुन: पेश कर सकते हैं अगर मैं चलाने के कमांड लाइन पर:

 
c:\windows\Syswow64\WindowsPowerShell\v1.0\powershell \source\ProjectFiles\TestData\Install.ps1 

हालांकि, बाद तैनाती आदेश में विफल रहता है, भले ही मैं स्पष्ट रूप से \windows\System32\WindowsPowerShell\v1.0\powershell और \windows\Syswow64\WindowsPowerShell\v1.0\powershell चलाते हैं।

अद्यतन: समाधान पाया

मैं यहाँ पर चर्चा की एक करने के लिए इसी तरह की एक समस्या हो रही हो रहे हैं:

http://social.technet.microsoft.com/Forums/en-US/sharepoint2010programming/thread/faa25866-330b-4e60-8eee-bd72dc9fa5be

मैं एक 64-बिट SharePoint का उपयोग कर एपीआई उपयोग नहीं कर सकते 32-बिट ग्राहकों। चूंकि विजुअल स्टूडियो 32-बिट है, पोस्ट-परिनियोजन कार्रवाई 32-बिट प्रक्रिया में चलती है और विफल हो जाएगी। हालांकि, 64-बिट एमएसबिल्ड है। अगर हम इसे PowerShell स्क्रिप्ट चलाते हैं, तो सब ठीक है।

एक MSBuild में स्क्रिप्ट इस जैसे फाइल लपेटें:

 
%WinDir%\Microsoft.NET\Framework64\v4.0.30319\MSBuild $(SolutionDir)\ProjectFiles\TestData\Install.msbuild 

उत्तर

1

दृश्य स्टूडियो एक 32-बिट अनुप्रयोग है:

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Install" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="Install"> 
    <Exec Command="powershell .\Install" /> 
    </Target> 
</Project> 

फिर, के बाद तैनाती कमांड लाइन करने के लिए सेट , इसलिए 64-बिट विंडोज़ में यह एक अनुरूपित 32-बिट वातावरण में चलता है।

आश्चर्यजनक रूप से, 32-बिट वातावरण को "WoW64" कहा जाता है (जब 32-बिट विंडोज़ ने 16-बिट ऐप्स के लिए यह किया था, इसे "WoW16" कहा जाता था। "वाह" भाग का अर्थ है "विंडोज़ पर विंडोज़"।

यह भी अजीब बात है कि "सिस्टम 32" 64-बिट विंडोज़ के साथ "सिस्टम 64" नहीं बन गया। "32" 16-बिट -> 32-बिट संक्रमण से है, "सिस्टम" से अलग करने के लिए। जो कुछ भी है, आपके लिए विरासत/संगतता

WoW64 में, सब कुछ 32-बिट विंडोज की तरह दिखता है।

उदाहरण के लिए, c:\windows\system32 बस c:\windows\syswow64 पर इंगित करता है। 32-बिट अनुप्रयोग 64-बिट कुछ भी आसानी से नहीं पहुंच सकते हैं।

32-बिट वातावरण से 64-बिट पावरशेल सत्र प्राप्त करने के लिए PowerShell Remoting का उपयोग करना संभव है।

 
PS>gci env:PROCESSOR_ARCH* 

Name       Value 
----       ----- 
PROCESSOR_ARCHITECTURE   x86 
PROCESSOR_ARCHITEW6432   AMD64 


PS>Invoke-Command -ConfigurationName Microsoft.PowerShell -ComputerName LOCALHOST { gci env:PROCESSOR_ARCH* } 

Name       Value          PSComputerName 
----       -----          -------------- 
PROCESSOR_ARCHITECTURE   AMD64          localhost 
+0

धन्यवाद। तो मैं दौड़ने की कोशिश कर रहा हूं: "पावरहेल Invoke-Command-ConfigurationName माइक्रोसॉफ्ट। पावरशेल-कंप्यूटर उपयोगकर्ता LOCALHOST -FilePath C: \ source \ ProjectFiles \ TestData \ Install.ps1"। दुर्भाग्यवश, यह मेरी लिपि को पहली पंक्ति में विफल कर देता है, जहां मैं अन्य ps1 फ़ाइल समेत हूं: पैरामीटर 'पथ' पर तर्क बाध्य नहीं कर सकता क्योंकि यह शून्य है। जाहिर है, $ स्क्रिप्ट: Invoc-Command का उपयोग करते समय MyInvocation काम नहीं करता है। –

2

मेरे पास एक ही स्थिति थी, मुझे अपने स्थानीय उदाहरण पर सूचियों के लिए डमी डेटा बनाने के लिए पोस्ट परिनियोजन शक्तिशक्ति स्क्रिप्ट की आवश्यकता थी। मैंने एमएसबिल्ड को एमएसबिल्ड फ़ाइल का उपयोग करके ऊपर दिए गए सुझावों के साथ कई अन्य तरीकों की कोशिश की, लेकिन मैं सभी चर नहीं कर सका और फ़ाइल को पथ और यूआरएल के साथ हार्ड कोड करना पड़ा, यह वही नहीं था जो मैं चाहता था।

मैं अंत में एक तरह से स्पष्ट रूप से 64-बिट PowerShell.exe

बुला लिए मुझे पता है 64-बिट फ़ाइल कड़ी मेहनत dirve पर वहाँ हो गया है पता लगा। मुझे पता है कि WinSXS फ़ोल्डर में सभी फाइलें हैं। सी: \ विंडोज \ winsxs फ़ोल्डर में powerhell.exe के लिए त्वरित खोज मुझे दो फाइलें मिलीं, इसलिए मैंने amd64 फ़ोल्डर में एक के लिए पथ पकड़ लिया।

यह मुझे आशा है कि यह भविष्य में किसी को मदद मिलेगी मैं पोस्ट तैनाती विकल्प

C:\Windows\winsxs\amd64_microsoft-windows-powershell-exe_31bf3856ad364e35_6.1.7600.16385_none_c50af05b1be3aa2b\powershell.exe -command "&{$(ProjectDir)PowerShell\dataload.ps1 -xmlPath "$(ProjectDir)PowerShell\dataload.xml" -webUrl "$(SharePointSiteUrl)"}" 

में आदेश के रूप में क्या है।

5

उपयोग

% WINDIR% \ SysNative \ WindowsPowerShell \ v1.0 \ PowerShell.exe

यह महत्वपूर्ण है कि आप% WINDIR% \ SysNative की आभासी पथ और नहीं वास्तविक सी के रास्ते का उपयोग करें : \ Windows \ System32। इसका कारण यह है कि विजुअल स्टूडियो 2010 32-बिट एप्लिकेशन है जिसे सफलतापूर्वक लोड करने के लिए powerhell.exe के 64-बिट संस्करण को कॉल करने की आवश्यकता है। SharePoint.Powershell स्नैप-इन।

(ग) "Microsoft SharePoint 2010 के अंदर", माइक्रोसॉफ्ट प्रेस, मार्च 2011

0

मैं सफलता एक पोस्ट तैनाती आदेश के रूप में यह कर राशि:

%comspec% /c powershell -File "c:\foo\bar.ps1" 
संबंधित मुद्दे