Sharepoint远程PowerShell:Invoke命令赢得';t在远程服务器上运行添加PSSnapin

Sharepoint远程PowerShell:Invoke命令赢得';t在远程服务器上运行添加PSSnapin,sharepoint,powershell,Sharepoint,Powershell,我正在编写powershell脚本,以便在sharepoint服务器上执行一些存档功能。我正在使用托管Sharepoint的服务器和运行powershell的远程计算机测试此脚本。脚本的功能部分按照设计从服务器端运行,我只是尝试将其修改为远程运行。我已经在服务器和客户端上使用各自的设置启用了WSmanCredSSP,并启用了这两个服务器之间通信的所有其他设置。运行脚本时,我可以使用凭据成功启动PSSession,但无法从本地计算机运行任何与sharepoint相关的功能。我正在使用Invoke命

我正在编写powershell脚本,以便在sharepoint服务器上执行一些存档功能。我正在使用托管Sharepoint的服务器和运行powershell的远程计算机测试此脚本。脚本的功能部分按照设计从服务器端运行,我只是尝试将其修改为远程运行。我已经在服务器和客户端上使用各自的设置启用了WSmanCredSSP,并启用了这两个服务器之间通信的所有其他设置。运行脚本时,我可以使用凭据成功启动PSSession,但无法从本地计算机运行任何与sharepoint相关的功能。我正在使用Invoke命令运行“在Microsoft.Sharepoint.Powershell中添加PSSnapin”以及一些其他代码来收集站点信息。下面是我的一段代码,它代表了我的问题:

param(
[string]$sitePath = "http://siteurl",
[string]$webPath = "",
[string]$sourceList = "",
)

$session = New-PSSession -Computername 192.168.5.139 -authentication -Credential CompName\admin
Invoke-Command -session $session -ScriptBlock {
    Write-Host $Host.name
    Add-PSSnapin Microsoft.Sharepoint.Powershell
    Start-SPAssignment -Global
    Write-Host "What is the name of the source list? " -NoNewLine
    $sourceList = Read-Host
    $site = new-object Microsoft.SharePoint.SPSite($sitePath)
    $web = $site.AllWebs | where { $_.name -eq $webPath}
}
代码将一直运行,直到行“$site=new object…”出现以下错误: “找不到构造函数。找不到Microsoft.SharePoint.SPSite类型的合适构造函数。” 我假设这意味着没有为管理单元命令启动sharepoint程序集,尽管我不知道为什么,因为它在服务器端运行良好$Invoke命令内部的Host.name输出“ServerRemoteHost”,我认为这表明它正在工作到那个点。在此方面的任何帮助都将不胜感激,我当然不是powershell或sharepoint方面的专家,但我需要让这一切顺利进行。谢谢


更新:我意识到$sitePath和$webPath需要在Invoke命令块中创建,执行此操作后,构造函数错误不再发生,而是在“$web=$site.Allwebs…”行上生成了一个新错误:“尝试枚举集合时发生以下异常:“访问被拒绝。”有没有关于为什么不授予权限的想法?

解决方案:需要做两件事来解决我的问题。首先,必须在Invoke命令中声明所有变量,因为这些变量不会在计算机之间传递。基本上,我所做的只是将整个脚本放在Invoke命令脚本块中,除了enter和exit PSSession行之外。接下来,为了修复我收到的“访问被拒绝”错误,我添加了两行:$siteID=Get-SPWebApplication-Identity$siteID。GrantAccessToProcessIdentity(“ServerDomain\username”)脚本按照设计在此之后运行。如果需要将变量从本地计算机传递到远程计算机,可以添加一个参数($var1,$var2,…)将块样式设置为调用命令ScriptBlock,然后使用-ArgumentList参数和要传递的参数数组。例如:Invoke Command-session$session-ScriptBlock{Param($sitePath,$webPath);}-ArgumentList$sitePath,$webPath