在远程计算机上运行.ps1
我需要在管理员权限下的远程计算机上执行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
您的问题是身份验证。您必须启用服务器才能使用您的凭证。您可以使用CredSSP
来完成此操作。
-
您的客户端上启用此:
启用-WSManCredSSP -Role客户-DelegateComputer ServerNameHere
-
您的服务器上启用它:
启用-WSManCredSSP -Role服务器
现在将其添加到您的
Invoke-Command
:
-Credential Domain\YourUsername -Authentication CredSSP
上的一句话:随着CredSSP的,它很容易窃取您的凭据,如果你连接到一个受损的系统(同RDP)。请确保您只在安全的计算机上执行此操作。
您的客户端试图打开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.ps1
和server.ps1
它都可以从1个脚本完成。
您还需要确保winrm
正在服务器上运行和配置。
我需要2个脚本。服务器和客户端。 Winrm配置和工作。我需要从客户端执行服务器端的脚本... – Damir
server.ps1位于何处?本地在你的机器上? – restless1987
服务器上的server.ps1,客户端上的client.ps1。我需要启动第一个应该在服务器上调用远程脚本的客户端 – Damir
这是一个双跳问题。 CredSSP列出了restless1987是一个解决方案。这里是[所有解决方案的博客文章](https://blogs.technet.microsoft.com/ashleymcglone/2016/08/30/powershell-remoting-kerberos-double-hop-solved-securely/),基于资源的约束委派是最好的解决方案。 – BenH