我可以在我的SharePoint服务器上完美地运行此脚本,并且用户的个人资料图片会更新:
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
[Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server")
$siteurl = "http://SHAREPOINTSITE/"
try {
$site = New-Object Microsoft.SharePoint.SPSite($siteurl)
} catch {
New-Item -ItemType File -Path C:\Users\admin\Desktop -Name ERROR1.txt -Value $_.Exception.Message -Force
}
try {
$context = [Microsoft.Office.Server.ServerContext]::GetContext($site)
} catch {
New-Item -ItemType File -Path C:\Users\admin\Desktop -Name ERROR2.txt -Value $_.Exception.Message -Force
}
#This gets the User Profile Manager which is what we want to get hold of the users
$upm = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($context)
$user = "DOMAIN\user.name"
#Put it in a loop for iterating for all users
if ($upm.UserExists($user)) {
try {
$profile = $upm.GetUserProfile($user)
$profile["PictureURL"].Value = "\\Sharepoint\C$\Users\admin\Desktop\1.jpg";
$profile.Commit();
} catch {
New-Item -ItemType File -Path C:\Users\admin\Desktop -Name ERROR3.txt -Value $_.Exception.Message -Force
}
}
New-Item -ItemType File -Path C:\Users\admin\Desktop -Name HELLO.txt -Force
$site.Dispose()
但是当我从远程PowerShell会话中运行它时,我得到了一些奇怪的错误:
ERROR1.txt
使用“1”参数调用“.ctor”的异常:“找不到http://SHAREPOINTSITE/的Web应用程序。验证您是否正确输入了URL。如果URL应该为现有内容提供服务,系统管理员可能需要添加一个新的请求URL映射到预期的应用程序。“
ERROR2.txt
为“GetContext”和参数count:“1”找到了多个模糊的重载。
我检查了所有可能性here,但仍然看到了这个问题。
这就是我从远程机器调用上述脚本的方法:
$spfarm = "DOMAIN\admin.username"
$spfarmpw = ConvertTo-SecureString "password123" -AsPlainText -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $spfarm,$spfarmpw
$session = New-PSSession SharePoint -Authentication Default -Credential $cred
Invoke-Command -Session $session -FilePath "\\SharePoint\C$\Users\admin\Desktop\testremote.ps1"
我试过用几种不同的方式调用它(例如在我的机器上托管脚本或在SharePoint服务器上托管它,以及使用相对路径来调用脚本),但我总是看到这些错误。
任何人都可以帮助我理解为什么从远程PC调用它时这不起作用?该脚本显然被调用(HELLO.txt
始终被创建),但SharePoint配置文件图片永远不会更新 - 即使该脚本肯定应该有效。
非常感谢任何帮助或指导
NSLOOKUP
nslookup SHAREPOINTSITE
输出
Server: dc1.domain.co.uk
Address: xx.xx.x.xx
Name: sharepoint.domain.co.uk
Address: yy.yy.y.yy
Aliases: SHAREPOINTSITE.domain.co.uk
yy.yy.y.yy
是正确的IP(它与我在执行ping SHAREPOINTSITE
时看到的地址相同)
答案 0 :(得分:1)
尝试将Authentication方法更改为CredSSP。这是远程PowerShell所必需的,因此它可以传递凭据。