2017-05-14 152 views
2

我需要在管理員權限下的遠程計算機上執行powershell腳本。 我有2個腳本:客戶端和服務器。 當我啓動client.ps1我調用服務器上的命令,但獲取訪問錯誤。如果我在server.ps1中使用簡單代碼(如write-host「hello」),則不會出現錯誤。在遠程計算機上運行.ps1

server.ps1:

Get-service -ComputerName 'client' 

client.ps1:

$ScriptBlockContent = { 
     d:\server.ps1 
     } 
$remote=New-PSSession -ComputerName 'server' 
Invoke-Command $remote -ScriptBlock $ScriptBlockContent 
+0

server.ps1位於何處?本地在你的機器上? – restless1987

+0

服務器上的server.ps1,客戶端上的client.ps1。我需要啓動第一個應該在服務器上調用遠程腳本的客戶端 – Damir

+0

這是一個雙跳問題。 CredSSP列出了restless1987是一個解決方案。這裏是[所有解決方案的博客文章](https://blogs.technet.microsoft.com/ashleymcglone/2016/08/30/powershell-remoting-kerberos-double-hop-solved-securely/),基於資源的約束委派是最好的解決方案。 – BenH

回答

1

您的問題是身份驗證。您必須啓用服務器才能使用您的憑證。您可以使用CredSSP來完成此操作。

  1. 您的客戶端上啓用此:

    啓用-WSManCredSSP -Role客戶-DelegateComputer ServerNameHere

  2. 您的服務器上啓用它:

    啓用-WSManCredSSP -Role服務器

  3. 現在將其添加到您的Invoke-Command

-Credential Domain\YourUsername -Authentication CredSSP

上的一句話:隨着CredSSP的,它很容易竊取您的憑據,如果你連接到一個受損的系統(同RDP)。請確保您只在安全的計算機上執行此操作。

1

您的客戶端試圖打開d:\ server.ps1並獲得訪問被拒絕。您的腳本塊甚至沒有包含必要的代碼,導致powershell無論如何都會處理server.ps1的內容。你有辦法變得複雜。

您需要正確定義的腳本塊:

$scriptblock = { Get-service -ComputerName 'client' } 
$remote=New-PSSession -ComputerName 'server' 
Invoke-Command $remote -ScriptBlock $scriptblock 

運行此命令將連接到名爲'Server'機器,並告訴它在'Client'運行Get-Service你不需要client.ps1server.ps1它都可以從1個腳本完成。

您還需要確保winrm正在服務器上運行和配置。

+0

我需要2個腳本。服務器和客戶端。 Winrm配置和工作。我需要從客戶端執行服務器端的腳本... – Damir

相關問題