此代码非常接近完成,但是我无法获取我希望运行的最后一个语句(psexec \\%PC% -i -d -s "\.exe
),仅在设备ping时运行。
目标是,如果设备ping 然后写入主机,它ping并运行psexec命令 else 写入主机它还没有能够ping。
代码:
@ECHO OFF
cls
Clear-Host
set /p PC=PC no?:
FOR %%i IN (
%PC%
) DO (
PowerShell -NoProfile -Command "If (Test-Connection %%i -Count 1 -Quiet) { Write-Host "%%i - successfully pinged" -F Green } (psexec \\%PC% -i -d -s "\.exe that i wish to run")
else { Write-Host "%%i FAILED" -F Red}"
)
pause
答案 0 :(得分:0)
这就像Spanglish或其他东西。 Clear-Host
不是cmd
理解的命令,只是ping
更容易。
@echo off
setlocal
if "%~1"=="" (
set /P "PC=PC no? "
) else (
set "PC=%~1"
)
ping -n 1 %PC% | find /i "TTL=" >NUL 2>NUL && (
powershell "Write-Host '%PC% passed' -f Green"
psexec \\%PC% -i -d -s "\.exe that i wish to run"
) || (
powershell "Write-Host '%PC% failed' -f Red"
)
对于它的价值,如果您不需要psexec
运行的命令的输出,我通常会发现wmic process call create
比psexec
更快
wmic /node:%PC% process call create "exe that you wish to run"
如果您需要提供身份验证信息,请在/user:username
之前添加/password:password
和process call create
个切换。
上面的代码存在一些问题。在批处理脚本中执行PowerShell命令时,您不能轻易地破坏该行。您还应该在psexec
代码块中包含if
命令,而不是像现在一样包含它。如果需要,您可以使用分号与支持的代码块分隔命令。最后,您需要小心地将双引号作为powershell
命令标记的一部分与命令中的双引号混合使用。它可以修复,以便powershell处理条件流,但我的解决方案同样适用,我认为更具可读性。