2017-05-14 221 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

相关问题