2

我有一个文件“test.ps1”,其内容如下:

$getRSDBName =
{
    Add-PSSnapIn Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
    $rsdb = Get-SPRSDatabase

    return $rsdb
}


$rsdb = invoke-command  -scriptblock $getRSDBName 

$rsdb

如果我将其称为:

powershell -f c:\test.ps1

如果我使用 WinRS,我会收到错误消息:

winrs -r:xxxxx -u:xxxxxx -p:xxxxx powershell -f c:\test.ps1

我也通过输入-Authentication CredSSP -Credential $creds参数来尝试它Invoke-Command,但我得到了和以前一样的结果。在这两种情况下,错误都是:

当地农场无法进入。未注册具有 FeatureDependencyId 的 Cmdlet。Get-SPRSDatabase : 无法访问本地场。在重试之前,验证本地场是否已正确配置、当前可用,并且您具有适当的每个任务来访问数据库。在 C:\clean.ps1:181 char:29 + $rsdb = Get-SPRSDatabase <<<< + CategoryInfo : InvalidData: (Microsoft.Repor...ServiceDatabase: GetReportingServiceDatabase) [Get-SPRSDatabase], SPCmdletException + FullyQualifiedErrorId : Microsoft .ReportingServices.SharePoint.PowerShell.GetReportingServiceDatabase

有人可以解释发生了什么吗?

4

2 回答 2

1

这是由此处描述的“第二跳”问题引起的,当远程服务器上的命令行开关依次尝试访问 sql 数据库时(它必须将凭据传递给它,但不能再次委派它们)

解决它在服务器上运行以下

Enable-WSManCredSSP –Role server

这在客户端(需要提升的权限)

Enable-WSManCredSSP –Role client –DelegateComputer *

然后记得使用

$session = New-PSSession -ComputerName $computer -Credential $credential -Authentication CredSSP

当您打开远程会话并将 $session 传递给调用命令时

Invoke-Command -ScriptBlock $doSomething -Session $session  

这为我解决了:) 一般来说,我发现使用调用命令时发现的任何奇怪问题都与第二跳问题有关。这实际上是一个安全功能,因此即使它有点无聊,它也可以帮助我们,但解决它并不难

于 2015-11-18T17:03:58.110 回答
0

您是否能够创建一个 PS-Session,然后在该远程 shell 中运行脚本?如果是这样,为什么不在当前脚本中添加创建/销毁会话?

$Session = New-PSSession -ComputerName "computerNameHere"
Import-PSSession -Session $Session

$getRSDBName = {
    Add-PSSnapIn Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
    $rsdb = Get-SPRSDatabase

    return $rsdb
}
$rsdb = invoke-command  -scriptblock $getRSDBName 
$rsdb

Remove-PSSession -ComputerName "computerNameHere"
于 2013-09-13T17:28:42.643 回答