不能使用远程计算机上获取,服务-ComputerName(Can't use Get-Ser

2019-07-29 13:14发布

我有一个Windows 2003箱设置虚拟框和我不能PowerShell和它的工作。

我尝试这在我的Windows 7机器

Get-Service –ComputerName myserver

我回来

Get-Service : Cannot open Service Control Manager on computer 'myserver'. This operation might require other privileges.
At Script1.ps1:2 char:4
+ gsv <<<<  -cn myserver
    + CategoryInfo          : NotSpecified: (:) [Get-Service], InvalidOperationException
    + FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.GetServiceCommand

虽然周围搜索,我发现我应该尝试使用Enable-PSRemoting

我这样做,现在当我尝试使用它,我得到

WinRM的已经被设置为接收请求在此计算机。 WinRM的已经被设置为这台机器上远程管理。

然而,我仍然得到同样的错误。 这是因为我用的是虚拟机? 我设置的虚拟操作系统上我的域名,我甚至可以用我的AD帐户凭据登录。

我可以得到其他的信息从它回来。

所以它不像我不能使用PowerShell连接到它。

Answer 1:

使用PowerShell V2,你有两个技术途径的远程命令。

内置的远程命令:

一小集PowerShell命令V2的有一个-ComputerName参数,它允许您指定目标机器的访问。

Get-Process
Get-Service
Set-Service

Clear-EventLog
Get-Counter
Get-EventLog
Show-EventLog
Limit-EventLog
New-EventLog
Remove-EventLog
Write-EventLog

Restart-Computer
Stop-Computer

Get-HotFix

这些命令做自己的远程或者是因为底层的基础架构已经支持远程或它们解决的是对系统的管理特别重要场景。 它们是建立在DCOM的顶部,并且,在视图中的接入点,你可以使用它们时,你可以与远程机器建立像命令的会话NET.exePSExec.exe

您正在尝试使用其中一个和你有与证书(有问题-cred参数),因为凭证的凭证不能被用来建立一个管理会话到远程计算机。

在PowerShell远程处理子系统:

之前,你可以使用PowerShell远程访问远程计算机,该计算机上的远程服务,必须明确启用。 这样做使用Enable-PSRemoting cmdlet的。 如果您在工作组中工作,你还需要使服务器使用此命令您的客户端计算机上输入(客户端计算机以管理员):

Set-Item WSMan:\localhost\Client\TrustedHosts *

然后,您将使用New-PSSession Cmdlet的(与-computername-credentials )创建一个会话对象。 然后Invoke-Command (与-session-scriptblock )cmdlet允许您可以远程调用另一台计算机上的脚本块。 这是为在远程处理的大多数功能的基本元件。 您也可以使用Enter-PSSession将建立​​与服务器的交互(SSL等)PowerShell命令行。

有用的链接: 简易指南PowerShell 2.0中远程


测试:

$sess = New-PSSession -ComputerName myServer-Credential (Get-Credential)
Invoke-Command -Session $sess -ScriptBlock {get-service}
...
Remove-PSSession -Session $sess


Answer 2:

如果它仍然是重要的,这里是我的解决方法:

我得到了一个未经授权的用户称为“usser”谁愿意从客户端一个PowerShell(V2)远程服务器B.

脚步:

  1. 上Targetserver乙启用-psremoting作为管理员
  2. SET-PSSessionConfiguration -Name Microsoft.PowerShell -ShowSecurityDescriptorUI上Targetserver B中管理
  3. 添加“usser”拥有完全权限

现在到了最激动人心的部分:

  1. SC附带使用sdshow上Targetserver乙SCMANAGER为管理员
  2. 复制SDDL输出
  3. SC sdset SCMANAGER(FE :)“d:(A ;; CC ;;; AU)(A ;; CCLCRPRC ;;; IU)(A ;; CCLCRPRC ;;; SU)(A ;; CCLCRPWPRC ;;; SY) (A ;; KA ;;; BA)S:(AU; FA; KA ;;; WD)(AU; OIIOFA; GA ;;; WD)”,在输出你有这样的部分后,以填补(A ;; CCLCRPWPRC ;;; SY)此=(A ;; KA ;;; SID)
  4. SID代表当然更无特权的“usser” -用户的SID
  5. 当一切都应该罚款,这将similiar如下所示:

    d:(A ;; CC ;;; AU)(A ;; CCLCRPRC ;;; IU)(A ;; CCLCRPRC ;;; SU)(A ;; CCLCRPWPRC ;;; SY)(A ;; KA ;;; S-1-5-21-4233383628-1788409597-1873130553-1161)(A ;; KA ;;; BA)S:(AU; FA; KA ;;; WD)(AU; OIIOFA; GA ;;; WD)

希望你会喜欢这个小而复杂的解决方法。



Answer 3:

查看和处理服务,需要在目标机器上的管理权限。

我能够尝试运行复制你的错误信息Get-Service -ComputerName MyServer身份登录时不会有问题的服务器管理权限的用户帐户。

您可以通过在目标服务器上或者授予工作站用户帐户管理权限或通过在服务器上创建AA本地组并授予调用权限给该组的成员解决这个问题。 如果你想选择后者,请参阅下面的文章。

msgoodies:使用PS会话,而无需管理权限



Answer 4:

建立在@scusi马库斯的辉煌答案在这里:

比方说,我有一个非特权/受限的用户名为“USER1”谁想要的PowerShell(V2 +)从远程客户端机器A到B. targetserver

脚步:

  1. 从上targetserver乙升高的powershell提示,运行enable-psremoting 。 接受几个Y / N对话框确认或者与运行-force开关。
  2. 在相同的升高提示如步骤1中,SET-PSSessionConfiguration -Name Microsoft.PowerShell -ShowSecurityDescriptorUI
  3. 在出现的对话框中,添加“USER1”。 除非你是打算远程操作服务,在这种情况下,你会想完全控制 读取权限应该是足够了。
  4. 上targetserver B,从提升(非的powershell)提示或管理员,运行sc sdshow scmanager 。 复制SDDL输出。 可能是这个样子: D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)

更新:如果我们有限用户添加到目标计算机的远程管理用户组,我们可以添加(A;;LCRPWPDTLO;;;RM)D:以上SDDL字符串的一部分,并且跳过步骤5和6。

  1. 确定贫困用户帐户的SID(在我们的情况下,“用户1”)。 (提示:尽量wmic useraccount where name='user1' get sid
  2. 插入以下文本我们在步骤5中复制的输出: (A;;KA;;;*SID*)其中* SID *是在步骤中确定的用户的SID 5.在之前的地方插入它的地方S:在步骤4所以现在检索到的SDDL字符串的一部分,你应该有一个字符串看起来像这样: D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;S-1-5-21-4233383628-1788409597-1873130553-1161)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)
  3. 在targetserver B,运行sc sdset scmanager其次是我们的新修改的SDDL字符串。 所以整个命令将是这个样子: sc sdset scmanager D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;S-1-5-21-4233383628-1788409597-1873130553-1161)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)

您现在应该能够远程访问服务控制管理器在远程服务器上同时登录到客户机A作为“USER1”。

在客户端机器A,你会发现,当你运行Get-Service –ComputerName remoteserver未列出的所有服务。 您可能需要重复上述过程(始于步骤4)为特定的服务,你需要远程访问,但其未在上市Get-Service在客户端机器A.例如输出,如果SQLServerAgent服务不上市(但你知道它是存在于targetserver),你会再次登录targetserver B和执行sc sdshow但这次不是SCMANAGER但对于SQLServerAgent服务,因此sc sdshow sqlserveragent 。 你会再次收到一些SDDL输出将需要被操纵如上。 在这一点上,它可能是值得学习更多有关SDDL(谷歌它-这个链接是对我有帮助),与主事情你要当心了D:S:在SDDL字符串的一部分,并确保你不会搞乱与S:部分。



Answer 5:

我知道,这是不是对这个问题的理想的答案,但我有一个类似的问题,试图用PowerShell来谈谈Windows 7的框。 原来,WMI没有安装使用随Win7的本地PSV2。

虽然我安装V3作为WMI 3.0软件包的一部分很快,问题就解决了本身。 我建议确保所有相关的WMI服务是在服务器上运行。 除非你有冲突,我也建议升级到3.0 WMI。



文章来源: Can't use Get-Service –ComputerName on remote computer