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 を持つコマンドレットは登録されていません。Get-SPRSDatabase : ローカル ファームにアクセスできません。再試行する前に、ローカル ファームが適切に構成され、現在使用可能であること、およびデータベースにアクセスするための適切な権限があることを確認してください。C:\clean.ps1:181 文字:29 + $rsdb = Get-SPRSDatabase <<<< + CategoryInfo : InvalidData: (Microsoft.Repor...ServiceDatabase: GetReportingServiceDatabase) [Get-SPRSDatabase]、SPCmdletException + FullyQualifiedErrorId : Microsoft .ReportingServices.SharePoint.PowerShell.GetReportingServiceDatabase

誰かが何が起こっているのか説明できますか?

4

2 に答える 2

1

これは、ここで説明する「セカンド ホップ」の問題が原因で、リモート サーバー上のコマンドレットが sql データベースに到達しようとするときに発生します (資格情報を渡す必要がありますが、2 回目の委任はできません)。

それを解決するには、サーバーで次を実行します

Enable-WSManCredSSP –Role server

そしてこれはクライアント上で(昇格された特権が必要です)

Enable-WSManCredSSP –Role client –DelegateComputer *

次に、使用することを忘れないでください

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

リモート セッションを開き、$session を invoke-command に渡すとき

Invoke-Command -ScriptBlock $doSomething -Session $session  

これで解決しました:)一般に、invoke-commandを使用するときに見つけた奇妙な問題は、何らかの形で2番目のホップの問題に関連していることがわかりました。それは実際にはセキュリティ機能であるため、少し退屈でも解決するのに役立ちますが、それを解決するのはそれほど難しくありません

于 2015-11-18T17:03:58.110 に答える