运行 .ps1 在远程机器上

Run .ps1 on remote machine

我需要在具有管理员权限的远程计算机上执行 powershell 脚本。 我有 2 个脚本:客户端和服务器。 当我启动客户端时。ps1 我在服务器计算机上调用命令但出现访问错误。如果我在 server.ps1 中使用简单代码,我不会收到任何错误消息,例如 write-host "hello".

服务器。ps1:

 Get-service -ComputerName 'client'

客户端。ps1:

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

您的客户端正在尝试打开 D:\server.ps1 但访问被拒绝。您的脚本块甚至不包含使 powershell 处理服务器内容的必要代码。无论如何 ps1。你的方法太复杂了。

您需要正确定义脚本块:

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

运行 此命令将连接到名为 'Server' 的机器并告诉它 运行 Get-Service on 'Client' 你不需要 client.ps1server.ps1 都可以从 1 个脚本完成。

您还需要确保 winrm 已 运行 并且已在服务器上配置。

您的问题是身份验证。您必须启用服务器才能为此使用您的凭据。您可以使用 CredSSP.

来完成此操作
  1. 在您的客户端上启用此功能:

    启用-WSManCredSSP -角色客户端-DelegateComputer ServerNameHere

  2. 在您的服务器上启用它:

    启用-WSManCredSSP -角色服务器

  3. 现在将此添加到您的 Invoke-Command:

-Credential Domain\YourUsername -Authentication CredSSP

对此的评论:使用 CredSSP,如果您连接到受感染的系统(与 RDP 相同),则很容易窃取您的凭据。请确保仅在安全的计算机上执行此操作。