2012-03-29 2 views
2

J'ai un fichier .ps1 que j'exécute à partir de l'invite PS. Au sommet du fichier que j'ai:Dans PowerShell, l'objet ne se charge pas bien que j'appelle LoadWithPartialName

[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") 

et plus tard dans le code, il a:

$site = new-object Microsoft.SharePoint.SPSite $url; 

Je reçois l'erreur suivante:

Unable to find type [Microsoft.SharePoint.SPWeb]: make sure that the assembly containing this type is loaded.

Si je lance le LoadWithPartialName déclaration de l'invite directement, alors je peux exécuter le script.

Qu'est-ce que je fais mal?

--Update--

Lorsque je supprime le vide, ce qui rend le code:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") 

l'erreur est inchangée car le LoadWithPartialName est l'exécution sans erreur.

--Nouveaux Information--

Il a quelque chose à voir avec l'ajout d'une fonction avec le paramètre typé de SPWeb.

Cela fonctionne:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") 
$url = "http://siteurl/" 
$site = new-object Microsoft.SharePoint.SPSite $url; 
$site.Dispose(); 

Et cela fonctionne:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") 
function doSomething(){ } 
$url = "http://siteurl/" 
$site = new-object Microsoft.SharePoint.SPSite $url; 
$site.Dispose(); 

Mais ce casse si (vous devez commencer une nouvelle session de PS avant qu'il ne soit un problème aussi peu importe. si la fonction est avant ou après la première instanciation de SPSite:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") 
function doSomething( [Microsoft.SharePoint.SPWeb] $web ){ } 
$url = "http://siteurl/" 
$site = new-object Microsoft.SharePoint.SPSite $url; 
$site.Dispose(); 

Je suppose un travail secondaire -around est de ne pas taper le paramètre ou mettre le chargement dans un autre ps1.

+0

Si vous supprimez la distribution à [vide] dans l'appel à LoadWithPartialName dans votre script, vous obtenez un message significatif? Aussi, courez-vous dans un environnement mixte 32 bits/64 bits? –

+0

Il s'agit d'un Windows Server 2003 SP2 64 bits. Il fonctionne sur un hôte VMWare. Il utilise WSS plutôt que MOSS –

+0

Est-ce la version 64 bits de WSS? –

Répondre

1

Est-il possible que cet assemblage ne soit pas dans le GAC? Si ce n'est pas le cas, il doit être dans le répertoire d'installation PowerShell de LoadWithPartialName pour le trouver. Pour info, la méthode LoadWithPartialName est obsolète et n'est pas recommandée. Si vous êtes sur PowerShell V2, essayez de localiser le SharePoint.dll sur votre système de fichiers et d'utiliser Add-Type par exemple:

Add-Type -Path <path>\Microsoft.SharePoint.dll 
+0

'gacutil -l Microsoft.SharePoint' montre –

+1

Ensuite, exécutez cette commande après avoir essayé de charger l'assembly et de voir s'il se trouve dans la liste:' [System.AppDomain] :: CurrentDomain.GetAssemblies() '. –

+0

Il n'est pas assez loin pour exécuter les GetAssemblies. Je pense que ce qui se passe est que PS vérifie pour voir si elle sait quels sont les types de paramètres de fonction avant d'aller de l'avant. ?? –