sap脚本运行_用于杀死休眠SAP进程的脚本

您没有使用任何特定代码(例如batch-file或powershell)标记您的问题,然后我假设您需要批处理文件。无论您使用何种语言,算法都是相同的,但显然语法非常不同(PowerShell脚本更简单,更短)。

从命令行(当用户登录时最终使用计划任务或自动启动操作),您可以使用TASKKILL:

TASKKILL /FI "IMAGENAME eq imagename.exe" /FI "USERNAME ne %USERNAME%" /T /F

很少注意到:

将imagename.exe替换为SAP Business One进程的图像名称(使用TASKLIST进行检查),或者您可以使用WINDOWTITLE过滤器。

如果用户已在域下登录,您可能希望将%USERNAME%替换为%USERDOMAIN%\%USERNAME%。

/F强制关闭指定的进程,只有在温和终止无法正常工作时才执行此操作。

/T关闭进程及其所有子进程(我看到其中一些进程有子进程)。

检查TASKKILL帮助以获取更多过滤器,请注意这将导致所有不属于当前登录用户的进程执行此命令。它有一个明显的含义:登录用户必须拥有所需权限,并且您随时只有一个登录用户。

最后一点的含义在某种程度上是巨大的,如果你需要规避这一点,情况会更复杂。鉴于您可以使用TASKLIST /V获取详细的流程信息,并且您可以使用方便的格式格式化输出(假设此示例中流程图像名称为sapbo.exe):

TASKLIST /V /FO:CSV /FI "IMAGENAME eq sapbo.exe"

可以使用以下内容解析:

FOR /F "delims=, tokens=1-7" %1 IN ('TASKLIST /V /FO:CSV "IMAGENAME eq sapbo.exe"') DO (

echo %1 %7

)

您需要确定用户是否已登录。如果它是一个交互式会话,您可以检查Windows Shell进程(如果您想要做好事情,请从注册表中读取它...)我知道最简单的方法是使用this post中的代码:

TASKLIST /FI "IMAGENAME eq myapp.exe" 2>NUL | FIND /I /N "myapp.exe">NUL

IF "%ERRORLEVEL%"=="0" ECHO Programm is running

因为如果没有登录用户你需要终止进程,那么在DO部分之后放置它(它是一行,这里我为了清楚起见而拆分):

TASKLIST /FI "IMAGENAME eq winlogon.exe" /FI "USERNAME eq %7" 2>NUL

| FIND /I /N "winlogon.exe" > NUL

|| TASKKILL /T /F /PID %2

不要忘记根据具体情况调整此代码...

正如我在PowerShell中所说的那样容易得多。首先,您希望所有流程都有资格被杀死:

Get-Process sapbo -IncludeUserName

循环浏览它们并检查是否存在交互式会话:

foreach ($eligibleProcess in Get-Process sapbo -IncludeUserName)

{

if (-not Get-Process winlogon -ErrorAction SilentlyContinue -IncludeUserName | where { $_.UserName -eq $eligibleProcess.UserName })

{

$eligibleProcess.Kill();

}

}

请注意我在这里编写代码然后没有经过测试,请小心......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值