使用psexec发送多个命令

时间:2012-09-12 16:51:00

标签: powershell

我想凝聚

psexec \\server taskill /f /t /fi "USERNAME eq $username" /im soffice*
psexec \\server taskill /f /t /fi "USERNAME eq $username" /im swriter*
psexec \\server taskill /f /t /fi "USERNAME eq $username" /im scalc*
psexec \\server taskill /f /t /fi "USERNAME eq $username" /im simpress*

进入一个psexec命令。通常我会尝试使用&运算符so & so,但由于我在PS中执行此操作,所以似乎并不喜欢这样。我尝试了()""的数组,但它似乎也不喜欢它们。

编辑[回答]

结束只复制.cmd(BAT)文件并在我的$PROFILE本地创建快捷方式。

function flushlibra
{
param([string]$user = "")
if ($user -eq "")
{
    $user = Read-Host "User to nuke LibraOffice proccesses: "
}

psexec -c "\\unc\path\to\flushlibra.cmd" $user
}

.cmd档案

taskkill /f /t /fi "USERNAME eq %1" /im soffice*
taskkill /f /t /fi "USERNAME eq %1" /im swriter*
taskkill /f /t /fi "USERNAME eq %1" /im scalc*
taskkill /f /t /fi "USERNAME eq %1" /im simpress*

3 个答案:

答案 0 :(得分:8)

psexec允许您远程调用批处理脚本,而不仅仅是单个命令。使用-c开关指示应将脚本复制到远程系统。

所以如果你在本地有一个脚本KillProcs.cmd:

taskill /f /t /fi "USERNAME eq $username" /im soffice*
taskill /f /t /fi "USERNAME eq $username" /im swriter*
taskill /f /t /fi "USERNAME eq $username" /im scalc*
taskill /f /t /fi "USERNAME eq $username" /im simpress*

然后你可以像这样远程运行

psexec \\server -c c:\localpath\KillProcs.cmd

答案 1 :(得分:1)

如果您只想在一行上连接命令,请使用语句分隔符;,例如:

psexec \\server taskill /f /t /fi "USERNAME eq $username" /im soffice*; psexec \\server taskill /f /t /fi "USERNAME eq $username" /im swriter* ; psexec \\server taskill /f /t /fi "USERNAME eq $username" /im scalc* ; psexec \\server taskill /f /t /fi "USERNAME eq $username" /im simpress*

从查看PSEXEC的用法来看,它似乎不允许您在PSEXEC的单个调用中指定多个程序。

BTW你可以使用PowerShell的远程处理功能 - 假设server安装了WMF 2.0或更高版本,并启用了WSMan远程处理,例如:

Invoke-Command -ComputerName server {Stop-Process -Name soffice*,swriter*,scalc*,simpress* -Force}

如果你不能去远程路由,另一种方法是创建一个PowerShell函数:

function Stop-RemoteProcess([string]$ComputerName, [string[]]$Programs, [string]$UserName)
{
    foreach ($program in $Programs)
    {
        psexec "\\$ComputerName" taskill /f /t /fi "USERNAME eq $UserName" /im $program
    }
}

Stop-RemoteProcess server soffice*,swriter*,scalc*,simpress* JohnDoe

答案 2 :(得分:0)

我总是这样使用:)并且正常运作

psexec \\COMPUTER -e cmd /c (COMMAND1 ^& COMMAND2 ^& COMMAND3)