8
0

225 lines
10 KiB
Batchfile

@ECHO OFF
TITLE DIGITAL DATA - %~n0
ECHO -
ECHO Windows Command Line Script
ECHO CMD Version %CMDEXTVERSION% active!
ECHO -
ECHO Digital Data
ECHO Ludwig-Rinn-Strasse 16
ECHO 35452 Heuchelheim
ECHO Tel.: 0641 / 202360
ECHO E-Mail: info@didalog.de
ECHO -
ECHO Version Number: 1.0.0.0
ECHO Version Date: 03.06.2018
pushd "%~dp0"
setlocal
REM --------------------------------------------------------------
REM ----------------------- set variables ------------------------
REM --------------------------------------------------------------
SET ScriptName=%~n0
REM Automatic defined Variable, do not change!
REM Write WITHOUT double Quotes("")!
SET ScriptPath=%~dp0
REM Automatic defined Variable, do not change!
REM Write WITHOUT double Quotes("")!
SET SearchPath=%cd%\
REM Automatic defined Variable, maybe change, if you want to search in designated folder - dont forget the "\" in the end!
REM Write WITHOUT double Quotes("")!
SET SearchFileFilter="*-Example.cmd,*-Example.vbs,*-Example.ps1,*-Example.exe"
REM Set File extension *.exe, *.ps1, *.vbs or *.cmd. Or set whole Filename like test.ps1. Wildcard is also possible: test*.ps1. Also a comma seperated list is possible like *.ps1, *.vbs.
REM Write WITHOUT double Quotes(""), for a single value! Write WITH double Quotes(""), for comma seperated values.
SET Counter=0
REM Predefined Variable, do not change!
REM Write WITHOUT double Quotes("")!
SET PowerShellCMD=powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -File
REM Predefined Variable, do not change!
REM Write WITHOUT double Quotes("")!
SET PowerShellRuntimeScript="%ScriptPath%\%ScriptName%_PowerShellRuntimeScript.ps1"
REM Automatic defined Variable, do not change!
REM Write WITH double Quotes("")!
SET PowerShellWaitForExit=True
REM Set to "True" if found EXE or Scripts Files should be processed one after another. Otherwise set to "False".
REM Write WITHOUT double Quotes("")!
SET RunAsUserName=
REM Set an Username, if you want the EXE or Scripts Files run in an other context, like: "Administrator". But maybe: "domain\Administrator".
REM Write WITHOUT double Quotes("")!
SET RunAsUserPassword=
REM Set Password if you defined the RunAsUserName Variable.
REM Write WITHOUT double Quotes("")!
REM --------------------------------------------------------------
GOTO mainpart
REM --------------------------------------------------------------
REM ------------------------- subroutines ------------------------
REM --------------------------------------------------------------
:CreatePowerShellRuntimeScript
REM GENERIC STARTING PART
SET Item=%1
ECHO -
ECHO Creating PowerShellRuntimeScript for: %Item%
ECHO #Automatic generated PowerShellRuntimeScript>%PowerShellRuntimeScript%
ECHO Clear-Host>%PowerShellRuntimeScript%
ECHO $UserName=^"%RunASUserName%^">>%PowerShellRuntimeScript%
ECHO $UserPassword=^"%RunAsUserPassword%^">>%PowerShellRuntimeScript%
ECHO $Item=(Get-Item %Item%)>>%PowerShellRuntimeScript%
ECHO $Credentials = New-Object System.Management.Automation.PSCredential -ArgumentList @($UserName,(ConvertTo-SecureString -String $UserPassword -AsPlainText -Force))>>%PowerShellRuntimeScript%
ECHO.>>%PowerShellRuntimeScript%
REM BLOCK FOR CMD FILES
IF NOT x%Item:.cmd=%==x%Item% (
ECHO #Runtime File is exclusive build for %SearchFileFilter%>>%PowerShellRuntimeScript%
ECHO $Process = New-Object System.Diagnostics.Process>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.Filename = ^"cmd.exe^">>%PowerShellRuntimeScript%
IF [%RunASUserName%] EQU [] (
ECHO #Start Process in current context.>>%PowerShellRuntimeScript%
ECHO.>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.UseShellExecute = $True>>%PowerShellRuntimeScript%
) ELSE (
ECHO #Start Process in RunAs context.>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.UserName = $Credentials.UserName>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.Password = $Credentials.Password>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.UseShellExecute = $False>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.LoadUserProfile = $True>>%PowerShellRuntimeScript%
)
ECHO $Process.StartInfo.Arguments = "/c ""$($Item.FullName)""">>%PowerShellRuntimeScript%
ECHO #$Process.StartInfo.RedirectStandardOutput = $False>>%PowerShellRuntimeScript%
ECHO #$Process.StartInfo.RedirectStandardError = $True>>%PowerShellRuntimeScript%
ECHO $Process.Start^(^)>>%PowerShellRuntimeScript%
)
REM BLOCK FOR PS1 FILES
IF NOT x%Item:.ps1=%==x%Item% (
ECHO #Runtime File is exclusive build for %SearchFileFilter%>>%PowerShellRuntimeScript%
ECHO $Process = New-Object System.Diagnostics.Process>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.Filename = ^"powershell.exe^">>%PowerShellRuntimeScript%
IF [%RunASUserName%] EQU [] (
ECHO #Start Process in current context.>>%PowerShellRuntimeScript%
ECHO.>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.UseShellExecute = $True>>%PowerShellRuntimeScript%
) ELSE (
ECHO #Start Process in RunAs context.>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.UserName = $Credentials.UserName>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.Password = $Credentials.Password>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.UseShellExecute = $False>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.LoadUserProfile = $True>>%PowerShellRuntimeScript%
)
ECHO $Process.StartInfo.Arguments = "-ExecutionPolicy Bypass -file ""$($Item.FullName)""">>%PowerShellRuntimeScript%
ECHO #$Process.StartInfo.RedirectStandardOutput = $False>>%PowerShellRuntimeScript%
ECHO #$Process.StartInfo.RedirectStandardError = $True>>%PowerShellRuntimeScript%
ECHO $Process.Start^(^)>>%PowerShellRuntimeScript%
)
REM BLOCK FOR VBS FILES
IF NOT x%Item:.vbs=%==x%Item% (
ECHO #Runtime File is exclusive build for %SearchFileFilter%>>%PowerShellRuntimeScript%
ECHO $Process = New-Object System.Diagnostics.Process>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.Filename = ^"wscript.exe^">>%PowerShellRuntimeScript%
IF [%RunASUserName%] EQU [] (
ECHO #Start Process in current context.>>%PowerShellRuntimeScript%
ECHO.>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.UseShellExecute = $True>>%PowerShellRuntimeScript%
) ELSE (
ECHO #Start Process in RunAs context.>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.UserName = $Credentials.UserName>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.Password = $Credentials.Password>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.UseShellExecute = $False>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.LoadUserProfile = $True>>%PowerShellRuntimeScript%
)
ECHO $Process.StartInfo.Arguments = ^"^"^"^"^"^"^"^"^"^"^"^$^(^$Item.FullName^)^"^"^"^"^"^"^"^"^"^"^">>%PowerShellRuntimeScript%
ECHO #$Process.StartInfo.RedirectStandardOutput = $False>>%PowerShellRuntimeScript%
ECHO #$Process.StartInfo.RedirectStandardError = $True>>%PowerShellRuntimeScript%
ECHO $Process.Start^(^)>>%PowerShellRuntimeScript%
)
REM BLOCK FOR EXE FILES
IF NOT x%Item:.exe=%==x%Item% (
ECHO #Runtime File is exclusive build for %SearchFileFilter%>>%PowerShellRuntimeScript%
ECHO $Process = New-Object System.Diagnostics.Process>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.Filename = ^"^$^(^$Item.FullName^)^">>%PowerShellRuntimeScript%
IF [%RunASUserName%] EQU [] (
ECHO #Start Process in current context.>>%PowerShellRuntimeScript%
ECHO.>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.UseShellExecute = $True>>%PowerShellRuntimeScript%
) ELSE (
ECHO #Start Process in RunAs context.>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.UserName = $Credentials.UserName>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.Password = $Credentials.Password>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.UseShellExecute = $False>>%PowerShellRuntimeScript%
ECHO $Process.StartInfo.LoadUserProfile = $True>>%PowerShellRuntimeScript%
)
ECHO #$Process.StartInfo.RedirectStandardOutput = $False>>%PowerShellRuntimeScript%
ECHO #$Process.StartInfo.RedirectStandardError = $True>>%PowerShellRuntimeScript%
ECHO $Process.Start^(^)>>%PowerShellRuntimeScript%
)
REM GENERIC FINISHING PART
IF /i %PowerShellWaitForExit% EQU True (
ECHO $Process.WaitForExit^(^)>>%PowerShellRuntimeScript%
) ELSE (
ECHO #$Process.WaitForExit^(^)>>%PowerShellRuntimeScript%
)
ECHO #[string] $Out = $Process.StandardOutput.ReadToEnd();>>%PowerShellRuntimeScript%
ECHO.>>%PowerShellRuntimeScript%
ECHO Remove-Variable -Name UserName -Force -ErrorAction SilentlyContinue>>%PowerShellRuntimeScript%
ECHO Remove-Variable -Name UserPassword -Force -ErrorAction SilentlyContinue>>%PowerShellRuntimeScript%
ECHO Remove-Variable -Name Item -Force -ErrorAction SilentlyContinue>>%PowerShellRuntimeScript%
ECHO Remove-Variable -Name Credentials -Force -ErrorAction SilentlyContinue>>%PowerShellRuntimeScript%
ECHO Remove-Variable -Name Process -Force -ErrorAction SilentlyContinue>>%PowerShellRuntimeScript%
ECHO.
ECHO Starting RuntimeFile: %PowerShellRuntimeScript%
%PowerShellCMD% %PowerShellRuntimeScript%
DEL %PowerShellRuntimeScript%
GOTO :eof
REM --------------------------------------------------------------
REM --------------------------------------------------------------
REM ------------------------- main part --------------------------
REM --------------------------------------------------------------
:mainpart
cls
ECHO -
ECHO Program Startup: %ScriptName% on %computername%,
ECHO from Account: %userdomain%\%username%.
ECHO On %date% at %time:~0,8% o'clock.
REM Count Files and show Counter
FOR /F "tokens=*" %%f in ('dir /S /b "%SearchPath%\%SearchFileFilter%"') do (set /a Counter+=1)
ECHO -
ECHO Found %Counter% File(s) with File extension %SearchFileFilter% in Directory:
ECHO %SearchPath%
REM If Counter greater then 0 call subroutine for every found file
IF %Counter% GTR 0 (
FOR /F "tokens=*" %%f in ('dir /S /b "%SearchPath%\%SearchFileFilter%"') DO (Call :CreatePowerShellRuntimeScript "%%f")
GOTO PlanedExit
) ELSE (
ECHO -
ECHO Found no Files. Exiting...
GOTO UnplanedExit
)
REM --------------------------------------------------------------
REM --------------------------------------------------------------
REM ----------------------- finishing part -----------------------
REM --------------------------------------------------------------
:UnplanedExit
endlocal
ECHO -
ECHO This Window will close in:
timeout /T 10
rem pause
exit
:PlanedExit
endlocal
rem pause
exit
REM --------------------------------------------------------------