2012-09-14 132 views
0

所以基本上,我想要做的就是在100个服务器上执行一个“sc”命令,这些服务器的名字在文本文件“server.txt”中提到。我尝试了以下,它不工作,因为它返回空的记事本文件。如何通过批处理文件远程执行命令?

for /f %%a in (servers.txt) do sc \\server_name query | find "SERVICE_NAME">>servicecontroller.txt 

我在本地尝试了上述命令,它工作得很好。我知道问题出在“\ server_name”中。不知道这是错的。我需要使用隐藏的股票吗? 也许这样吗?

\\server_name\c$ /user:domain\username password  

还是这样?

\\server_name\c$ 

回答

1

如果你在那里硬编码\\server_name而不是%%a,那么这就是你的问题。试试这个:

for /f %%a in (servers.txt) do sc \\%a query | find "SERVICE_NAME">>servicescontroller.txt 

编辑: 以下行帮助所有服务器上获取管理员权限一致。这是我(OP)所寻找的路线。

net use \\servername\ipc$ /u:domain\user password 
+0

我做了“%% a”的事情。没有硬编码。问题是我有一个权限问题,这就是为什么我不确定我是否应该使用用户名和密码域模式。 – Gutsygibbon

+0

无论如何,我会+1你,因为你至少在正确的轨道上。 – Gutsygibbon

+0

啊,我明白了。 sc确实假设你有权访问这些远程计算机作为你当前登录的帐户。如果您尝试使用不同的凭据,那么我会使用:net use \\ servername \ ipc $/u:domain \ user password 插入有关以明文形式输入密码的标准警告。 – Mark

2

您可以使用PsExec在网络中的远程机器上执行命令。我用它来执行批处理文件并向它们传递参数,以及检查正在运行的服务。甚至有一种特殊的语法可以在文本文件中列出的许多计算机上执行。

或者,如果powershell是一个选项,您可以考虑使用powershell remoting

+1

嗯,我wud更喜欢只有一个批处理解决方案,而无需安装PSexec – Gutsygibbon

1

作为替代方法,你可以为使用WMIC:

执行对许多机器一次,并保存列表作为很好的格式化的HTML表(其他格式中):

wmic /node:@servers.txt /output:services.html service get caption /format:htable 

中当然你可以查询除名称/标题以外的更多属性。

+0

我已经试过了。限制是你说的。我不能“仅”获取服务名称。 – Gutsygibbon

+0

@Gutsygibbon如果它不适合你的需求,那就这样吧。你是代码大师:)但我不确定你的意思。如果你省略'/ format',你可以得到每行只有服务名的文本文件(使用'get name')。包括'名字'作为拳头线,但你可以很容易地摆脱这一点。 – wmz

+0

嗯,我在上一篇文章中没有提到这个问题。问题是我们有两种不同的服务器(2003和2008)。由于两者都具有不同版本的Windows Installer和SNMP,因此WMIC在两者中都有所不同。而且,即使使用WMIC,我仍然在某些远程服务器上遇到身份验证问题(我认为它是LDAP服务器的问题)。我想要一种方式来指定特定的凭据来访问服务器,然后运行sc或wmic。这个问题再次涉及到这个凭证。抱歉,说“我不能”只是“获取服务名称”。没有任何理由哈哈。 – Gutsygibbon

相关问题