Powershell和PSExec

3

我发现在我的工作中经常使用psexec远程批量进行更改。当我在PowerShell中运行PSEXEC时,我会在连接到的每台计算机上收到以下消息:

代码:

foreach($computer in $computers) {
        psexec -i \\$computer net localgroup "Administrators" "ITLOCALADMIN" /add
}

以下是结果:

PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com
System error 1378 has occurred.
The specified account name is already a member of the group.
Connecting to {COMPNAME}...Starting PSEXESVC service on {COMPNAME}...Connecting with PsExec service on {COMPNAME}...Starting net on {COMPNAME}...
net exited on {COMPNAME}with error code 2.
psexec : 
At G:\Users\ariggs\Documents\WindowsPowerShell\Scripts\AddItlocaladmin.ps1:3 char:9
+         psexec \\$computer net localgroup "Administrators" "ITLOCALAD ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

是否有可能关闭那些只显示命令输出或错误的消息?这样做会使我很难看到是否存在问题,或者它是否正常工作,因为所有这些文本都在干扰视线。


1
这是在PSEXEC中的内容,至于如何关闭它,我不确定,但你可以全部使用PowerShell来完成,这样就可以消除这些消息了。 - Luke
3
建议使用 PowerShell 远程控制而不是 PSExec,就像 Luke 建议的那样。 - Benjamin Hubbard
@Luke 我的公司关闭了PowerShell远程功能。我已经与他们提出了这个问题,他们认为这是一种风险。 - alexander7567
你为什么想要压制所有这些文本呢?你是想写日志文件吗? - Luke
@Luke:“这样做会让人很难看出是否存在问题,或者它是否按照所有文本的方式工作。”我只想摆脱所有垃圾,这样我就可以只看到实际命令的输出,而不是psexec。 - alexander7567
显示剩余3条评论
1个回答

1

好的,我想到了一个答案,你需要在结尾添加一个空输出,这样你的代码行将如下所示:

psexec -i \\$Computer net localgroup "Administrators" "ITLOCALADMIN" /add > $null 2>&1

现在这将重定向所有输出,现在您还需要添加某种形式的日志记录,我建议将其放入Try、Catch中,或者只需在foreach的末尾添加一行代码,告诉您计算机已完成。
Write-host "Computer $Computer is now done" 

现在,您需要更加信任您的脚本,但这是一种选择。


这看起来很棒,但它是否仍然显示实际net命令的输出? - alexander7567
这是因为它没有,所以你需要自己添加。 - Luke
@alexander7567,这个解决方案是否解决了你的问题? - Luke
不,它没有。就像我说的,我无法知道命令是否失败。这就是我想要所有其他文本消失的原因,这样我就可以看到命令在所有垃圾之间是否输出了任何错误。 - alexander7567
你可以获取返回的完成代码并制作自己的输出,如果它返回错误代码1则表示失败,如果是0则表示成功。 - Luke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接