Question

(NOTE: the following problem after appeared after the production server in question underwent system hardening):

I have a PowerShell module that contains the following line:

[OutputType([Microsoft.SharePoint.Publishing.PublishingPage])]

When I open a PowerShell console running as Administrator (as well as being logged in to the server as a sys admin), I get the following:

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

I am able to "force" the Microsoft.SharePoint.Publishing DLL to load with both LoadWithPartialName as well as Add-Type, but then I get the same error with regard to Microsoft.SharePoint when I try to execute my module.

Both DLLs are definitely in the GAC (version 14.0.0.0 as this is SharePoint 2010) and when I view permissions on the GAC, the permissions are sufficient.

As stated previously, the module executed fine previously, and the "Unable to find" error only started occurring after the server in question underwent some system hardening by a third-party. I have tried to investigate the issue from a permissions and group policy standpoint, but so far I do not have any leads.

I am able to somewhat reproduce the error in my dev environment if I completely trash the permissions on my GAC, but this does not truly reflect the situation in production, as the permissions in production appear to be more than sufficient for being able to "see" a DLL in the GAC.

Any help would be greatly appreciated.

Was it helpful?

Solution 2

In the end, right-clicking on the PowerShell icon and selecting "Import System Modules" was the solution.

When I changed my OutputType to use quotes instead of brackets, I then received an error that Get-SPSite was not recognized as a cmdlet (selecting "Import System Modules" resolved this error.) I then went back to using brackets for the OutputType and confirmed that "Import System Modules" was all that I needed.

OTHER TIPS

You might have better luck with [Microsoft.SharePoint.Publishing.PublishingPage] ;-)

That said, for types that are not part of the BCL, you should use a string instead of a type literal. This allows the module to be loaded - at least - on a machine without sharepoint. That would look like:

[outputtype("Microsoft.SharePoint.Publishing.PublishingPage")]

As far as powershell is concerned, the constraint is the same.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top