Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- c:Program Files (x86)PSTools>psexec -u administrator -p force \135.20.230.160 -s -d cmd.exe /c -c "C:Amtrabogus.bat"
- PsExec v2.11 - Execute processes remotely
- Copyright (C) 2001-2014 Mark Russinovich
- Sysinternals - www.sysinternals.com
- cmd.exe started on 135.24.237.167 with process ID 1520.
- psexec -u administrator -p force \135.20.230.160 -s -d cmd.exe /c "C:Amitrabogus.bat"
- @echo off
- :: by Ralph Buchfelder, thanks to Mark Russinovich and Rob van der Woude for their work!
- :: requires PsExec.exe to be in the same directory (download from http://technet.microsoft.com/de-de/sysinternals/bb897553.aspx)
- :: troubleshoot remote commands with PsExec arguments -i or -s if neccessary (see http://forum.sysinternals.com/pstools_forum8.html)
- :: will run *in parallel* on a list of remote pcs (if given); to run serially please remove 'START "" CMD.EXE /C' from the psexec call
- :: help
- if '%1' =='-h' (
- echo.
- echo %~n0
- echo.
- echo Runs a command on one or many remote machines. If no input parameters
- echo are given you will be asked for a target remote machine.
- echo.
- echo You will be prompted for remote credentials with elevated privileges.
- echo.
- echo UNC paths and local paths can be supplied.
- echo Commands will be executed on the remote side just the way you typed
- echo them, so be sure to mind extensions and the path variable!
- echo.
- echo Please note that PsExec.exe must be allowed on remote machines, i.e.
- echo not blocked by firewall or antivirus solutions.
- echo.
- echo Syntax: %~n0 [^<inputfile^>]
- echo.
- echo inputfile = a plain text file ^(one hostname or ip address per line^)
- echo.
- echo.
- echo Example:
- echo %~n0 mylist.txt
- exit /b 0
- )
- :checkAdmin
- >nul 2>&1 "%SYSTEMROOT%system32cacls.exe" "%SYSTEMROOT%system32configsystem"
- if '%errorlevel%' neq '0' (
- echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%getadmin.vbs"
- echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%getadmin.vbs"
- "%temp%getadmin.vbs"
- del "%temp%getadmin.vbs"
- exit /B
- )
- set ADMINTESTDIR=%WINDIR%System32Test_%RANDOM%
- mkdir "%ADMINTESTDIR%" 2>NUL
- if errorlevel 1 (
- cls
- echo ERROR: This script requires elevated privileges!
- echo.
- echo Launch by Right-Click / Run as Administrator ...
- pause
- exit /b 1
- ) else (
- rd /s /q "%ADMINTESTDIR%"
- echo Running with elevated privileges...
- )
- echo.
- :checkRequirements
- if not exist "%~dp0PsExec.exe" (
- echo PsExec.exe from Sysinternals/Microsoft not found
- echo in %~dp0
- echo.
- echo Download from http://technet.microsoft.com/de-de/sysinternals/bb897553.aspx
- echo.
- pause
- exit /B
- )
- :environment
- setlocal
- echo.
- echo %~n0
- echo _____________________________
- echo.
- echo Working directory: %cd%
- echo Script directory: %~dp0
- echo.
- SET /P REMOTE_USER=DomainAdministrator :
- SET "psCommand=powershell -Command "$pword = read-host 'Kennwort' -AsSecureString ; ^
- $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
- [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
- for /f "usebackq delims=" %%p in (`%psCommand%`) do set REMOTE_PASS=%%p
- if NOT DEFINED REMOTE_PASS SET /P REMOTE_PASS=Password :
- echo.
- if '%1' =='' goto menu
- SET REMOTE_LIST=%1
- :inputMultipleTargets
- if not exist %REMOTE_LIST% (
- echo File %REMOTE_LIST% not found
- goto menu
- )
- type %REMOTE_LIST% >nul
- if '%errorlevel%' neq '0' (
- echo Access denied %REMOTE_LIST%
- goto menu
- )
- set batchProcessing=true
- echo Batch processing: %REMOTE_LIST% ...
- ping -n 2 127.0.0.1 >nul
- goto runOnce
- :menu
- if exist "%~dp0last.computer" set /p LAST_COMPUTER=<"%~dp0last.computer"
- if exist "%~dp0last.listing" set /p LAST_LISTING=<"%~dp0last.listing"
- if exist "%~dp0last.directory" set /p LAST_DIRECTORY=<"%~dp0last.directory"
- if exist "%~dp0last.command" set /p LAST_COMMAND=<"%~dp0last.command"
- if exist "%~dp0last.timestamp" set /p LAST_TIMESTAMP=<"%~dp0last.timestamp"
- echo.
- echo.
- echo (1) select target computer [default]
- echo (2) select multiple computers
- echo -----------------------------------
- echo last target : %LAST_COMPUTER%
- echo last listing: %LAST_LISTING%
- echo last path : %LAST_DIRECTORY%
- echo last command: %LAST_COMMAND%
- echo last run : %LAST_TIMESTAMP%
- echo -----------------------------------
- echo (0) exit
- echo.
- echo ENTER your choice.
- echo.
- echo.
- :mychoice
- SET /P mychoice=(0, 1, ...):
- if NOT DEFINED mychoice goto promptSingleTarget
- if "%mychoice%"=="1" goto promptSingleTarget
- if "%mychoice%"=="2" goto promptMultipleTargets
- if "%mychoice%"=="0" goto end
- goto mychoice
- :promptMultipleTargets
- echo.
- echo Please provide an input file
- echo [one IP address or hostname per line]
- SET /P REMOTE_LIST=Filename :
- goto inputMultipleTargets
- :promptSingleTarget
- SET batchProcessing=
- echo.
- echo Please provide a hostname
- SET /P REMOTE_COMPUTER=Target computer :
- goto runOnce
- :runOnce
- cls
- echo Note: Paths are mandatory for CMD-commands (e.g. dir,copy) to work!
- echo Paths are provided on the remote machine via PUSHD.
- echo.
- SET /P REMOTE_PATH=UNC-Path or folder :
- SET /P REMOTE_CMD=Command with params:
- SET REMOTE_TIMESTAMP=%DATE% %TIME:~0,8%
- echo.
- echo Remote command starting (%REMOTE_PATH%%REMOTE_CMD%) on %REMOTE_TIMESTAMP%...
- if not defined batchProcessing goto runOnceSingle
- :runOnceMulti
- REM do for each line; this circumvents PsExec's @file to have stdouts separately
- SET REMOTE_LOG=%~dp0log%REMOTE_LIST%
- if not exist %REMOTE_LOG% md %REMOTE_LOG%
- for /F "tokens=*" %%A in (%REMOTE_LIST%) do (
- if "%REMOTE_PATH%" =="" START "" CMD.EXE /C ^(%~dp0PSEXEC -u %REMOTE_USER% -p %REMOTE_PASS% -h -accepteula \%%A cmd /c "%REMOTE_CMD%" ^>"%REMOTE_LOG%%%A.log" 2^>"%REMOTE_LOG%%%A_debug.log" ^)
- if not "%REMOTE_PATH%" =="" START "" CMD.EXE /C ^(%~dp0PSEXEC -u %REMOTE_USER% -p %REMOTE_PASS% -h -accepteula \%%A cmd /c "pushd %REMOTE_PATH% && %REMOTE_CMD% & popd" ^>"%REMOTE_LOG%%%A.log" 2^>"%REMOTE_LOG%%%A_debug.log" ^)
- )
- goto restart
- :runOnceSingle
- SET REMOTE_LOG=%~dp0log
- if not exist %REMOTE_LOG% md %REMOTE_LOG%
- if "%REMOTE_PATH%" =="" %~dp0PSEXEC -u %REMOTE_USER% -p %REMOTE_PASS% -h -accepteula \%REMOTE_COMPUTER% cmd /c "%REMOTE_CMD%" >"%REMOTE_LOG%%REMOTE_COMPUTER%.log" 2>"%REMOTE_LOG%%REMOTE_COMPUTER%_debug.log"
- if not "%REMOTE_PATH%" =="" %~dp0PSEXEC -u %REMOTE_USER% -p %REMOTE_PASS% -h -accepteula \%REMOTE_COMPUTER% cmd /c "pushd %REMOTE_PATH% && %REMOTE_CMD% & popd" >"%REMOTE_LOG%%REMOTE_COMPUTER%.log" 2>"%REMOTE_LOG%%REMOTE_COMPUTER%_debug.log"
- goto restart
- :restart
- echo.
- echo.
- echo Batch completed. Finished with last errorlevel %errorlevel% .
- echo All outputs have been saved to %~dp0log%REMOTE_TIMESTAMP%.
- echo %REMOTE_PATH% >"%~dp0last.directory"
- echo %REMOTE_CMD% >"%~dp0last.command"
- echo %REMOTE_LIST% >"%~dp0last.listing"
- echo %REMOTE_COMPUTER% >"%~dp0last.computer"
- echo %REMOTE_TIMESTAMP% >"%~dp0last.timestamp"
- SET REMOTE_PATH=
- SET REMOTE_CMD=
- SET REMOTE_LIST=
- SET REMOTE_COMPUTER=
- SET REMOTE_LOG=
- SET REMOTE_TIMESTAMP=
- ping -n 2 127.0.0.1 >nul
- goto menu
- :end
- SET REMOTE_USER=
- SET REMOTE_PASS=
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement