Thursday, September 15, 2005
This is my last post here... It was nice, however I dont like many things that are here -
missing rss, ads (I didnt know about them, because I am using AdMuncher, however I noticed them few days ago when I connected from public computer) etc...
But that doesnt mean that I will stop blogging :) My new & fresh blog can be found at
MSMVPS.com
Posted at 09:13 am by soulinprague
Permalink
Tuesday, September 13, 2005
This is example. On this picture you can see active job AdobeReader (JobState Running). This job is associated with computers on right (pc####).
Green ones were successful, red failed (in fact I forced that computer to fail), blue means the installation is running right now.
The last three computers were not activated yet, because they are turned off. When user turns them on, Adobe Reader will be automatically installed.
BTW this is alpha GUI, I am not GUI programmer, so excuse the layout

Posted at 04:36 pm by soulinprague
Permalink
I created thread dedicated to SDS development.
You can find it here: http://www.msfn.org/board/index.php?showtopic=55843&hl=
Hope so you will join and (ideally) help!
Martin
Posted at 03:48 pm by soulinprague
Permalink
Hey, yesteday I spend one hour and I creating first GUI for SDS - its working great! :)
I will post some images soon
Posted at 02:34 pm by soulinprague
Permalink
Saturday, September 10, 2005
How did I solve one problem...
One of the SDS installation methods is using scheduled task.
Script is parsing variable %time:~0,5% to variables SDS.ScheduledHour and SDS.ScheduledMinute, then it add SDS.ScheduledTimeout(default is 3) to SDS.ScheduledMinute.
Simply said it will take current time, add three minutes and schedule job on remote computer.
After some playing with SDS I noticed that scheduled jobs are working perfectly, except sometime there is some error preventing script from creating task.
So I tried to run script every minute and save the log files. I found out the jobs are not performed when the time is ##.08 or ##.09 (e.g. 12:08)...
I spend few minutes thinking about this problem and then I remembered, that command Set /a can work not only with decimal values, but also with hexadecimal (0x#) and octal (0#).
And that was my problem - when SDS.ScheduledMinute is equal 08/09, the command Set /a is trying to count with non-allowed octal value (octal values range from 0 to 7).
So I needed to implement the code, that is checking if first characted is 0 and in this case it will remove this zero.
Now everything is working just fine!
Posted at 11:47 pm by soulinprague
Permalink
Friday, September 09, 2005
Oh, I forget this...
Requirements: W2k+ on both server+workstations... Maybe clients can be older, I didnt have a chance to try it.
Space: Whole SDS is around 1MB (!!!) now.
Installation: SDS DONT NEED to install. I tried it just yesterday, when I bring SDS to one company on my flash disk, started TemporarySDSServer.cmd and it worked like a charm! :)
HW: Heh, I dont know... Any computer that can run batches? :)
Posted at 06:08 pm by soulinprague
Permalink
Well, SDS is moving fast to first public beta release. I will now try to describe how it is working etc...
The purpose of SDS is to allow administrators to install software on remote computers.
Whole SDS is based on batches + few AutoIt scripts (for client GUI for example). All operations are filesystem based, so you can create them manually or create some GUI/Web etc.
Right now there are two modes of SDS - SDSAutomatic and SDSManual.
SDSAutomatic is ideal for mass installations - for example to install office to 100 computer, while SDSManual is for one-time operations.
I am using technology I called "batch services" (see few pages ago), and it is working quite well...
Every SW installation (called PACKAGE) is defined in Package.ini. For example .NET framework installation have this Package.ini:
[.NET FrameWork 1.1 SP1]
RunWait="!CurrentDirectory!\Package\NDP1.1sp1-KB867460-X86.exe" /q
I will write about list of available commands in few days.
If you want to install .net framework to computer PC1000 using SDSManual, you have to type command
SDSManual.cmd /Operation:Installation /Package:DotNET/Machine:PC1000
There are more parameters, however I want to keep this sample easy to understand.
Output from this command looks like this:
Operation=Installation
Package=DotNET
Storage=Remote
AllowDefaultPackages=Yes
Restart=No
InstallationMethod=Scheduled
Parsing container 16748510
Creating Package: Disable_User_Input
Creating Package: Disable_Remote_Registry
Creating Package: DotNET
Creating Package: Enable_Remote_Registry
Creating Package: Enable_User_Input
Creating Package: Restart_Computer
Added a new job with job ID = 1
Job will run at 17:47
Job ID 16748510 was successfuly created.
Operation: Installation
Package: DotNET
Computer: PC1000
If you have created special directory for SDSAutomatic (called JOB), installing it is much easier - you just need to create file %ComputerName%.sds inside this folder.
Example job, that will install .NET Framework:
You must create directory Running.DotNET. Running means the job is ready to proceed and will be parsed automatically by SDSAutomatic.
Inside this directory you must create subdirectory ComputerGroups, where you will put all computer that should have this SW installed.
You also must create file job.ini - here you will specify what should this job do. For example
Operation=Installation
Package=DotNET_Framework_1.1
And thats it!
Posted at 06:05 pm by soulinprague
Permalink
Saturday, September 03, 2005
Hi guys, today I successfuly run first Phase 2.5 operation. Now is the time you can help me.
I am looking for
a.) betatesters
b.) someone who could create documentation. I am not good at this job, so I would like if someone else could try it :(
About betatesting, I first need a guy that will create documentation for other betatesters...
Contact me directly to martin.zugec(at)gmail.com
EDIT: My ICQ for faster communication: 137412582
Posted at 11:17 am by soulinprague
Permalink
Friday, September 02, 2005
Heh, today it looks like I did a big piece of work ;)
This is FIRST version of SDSAutomatic (Phase 2.5), that is responsible for automating tasks on many computers.
SetLocal EnableDelayedExpansion
rem Setting internal variables
Set SDS.pathExecutionPath=%~dp0
rem Importing SDS configuration
For /f "usebackq EOL=; delims== tokens=1,2" %%i IN (`Type "%SDS.pathExecutionPath%Configuration\Main.ini"`) Do Set %%i=%%j
For /f "usebackq delims=. tokens=1,2" %%i IN (`dir /b "%SDS.pathJobStorage%"`) Do If /i %%i EQU Running (
Echo Parsing container %%j
For /f "usebackq delims== tokens=1,2" %%a IN (`type "%SDS.pathJobStorage%\Running.%%j\Job.ini"`) Do Set GlobalSDS.%%a=%%b
For /f "usebackq delims=. tokens=1,2" %%a IN (`dir /b "%SDS.pathJobStorage%\Running.%%j\ComputerGroups\*.sds"`) Do (
Set GlobalSDS.Machine=%%a
Set GlobalSDS.Available=0
Call:CheckIfOnline
)
)
Goto:EOF
:CheckIfOnline
Ping -n 1 %GlobalSDS.Machine%
If %ErrorLevel% EQU 0 (
Set GlobalSDS.Available=1
Call:MachineOnline
)
Goto:EOF
:MachineOnline
Call "%pathExecutionPath%SDSMain.cmd" /Storage:!GlobalSDS.Storage! /Operation:!GlobalSDS.Operation! /Job:!GlobalSDS.Job! /Execution:Server /Machine:%GlobalSDS.Machine%
If "%SDS.errMajor%" EQU "" (
Goto:EOF
) Else If "%SDS.errMajor%" EQU "0" (
Move /y "%SDS.pathJobStorage%\Running.%%j\ComputerGroups\%GlobalSDS.Machine%.sds" "%SDS.pathJobStorage%\Running.%%j\ComputerGroups\Failure\%GlobalSDS.Machine%.sds"
) Else (
Move /y "%SDS.pathJobStorage%\Running.%%j\ComputerGroups\%GlobalSDS.Machine%.sds" "%SDS.pathJobStorage%\Running.%%j\ComputerGroups\Pending\%GlobalSDS.Machine%.sds"
)
Posted at 10:04 pm by soulinprague
Permalink
This cmd is responsible for creating RunOnceEx entries...
rem Creating queue of operations + paths
If /i %SDS.varOperationType% EQU Installation (
If /i %SDS.varDestinationStorage% EQU Remote Set SDS.ObjectsToParse.!SDS.intParseObjects!=%SDS.pathInstallationsStore%\!SDS.varJobContainer!\%SDS.JobFile%
If /i %SDS.varDestinationStorage% EQU Local Set SDS.ObjectsToParse.!SDS.intParseObjects!=%SDS.pathLocalStorage%\Installations\!SDS.varJobContainer!\%SDS.JobFile%
) Else If /i %SDS.varOperationType% EQU Command (
If /i %SDS.varDestinationStorage% EQU Remote Set SDS.ObjectsToParse.!SDS.intParseObjects!=%SDS.pathCommandsStore%\!SDS.varJobContainer!\%SDS.JobFile%
If /i %SDS.varDestinationStorage% EQU Local Set SDS.ObjectsToParse.!SDS.intParseObjects!=%SDS.pathLocalStorage%\Commands\!SDS.varJobContainer!\%SDS.JobFile%
)
For /f "usebackq delims== Tokens=1,2" %%i IN (`Set SDS.ObjectsToParse.%SDS.intParseObjects%`) Do Set SDS.LastObject=%%j
rem Generating script for generating RunOnceEx entries
Reg Add %SDS.varRemoteMachine%%SDS.varROEKey%\0%SDS.intROEIndex% /VE /D "%SDS.varJobContainer%" /f
Reg Add %SDS.varRemoteMachine%%SDS.varROEKey%\0%SDS.intROEIndex% /V 1 /D "%SDS.LastObject%" /f
rem If creating registry structure was unsuccessful, fill errMajor variable
If %ErrorLevel% NEQ 0 Set SDS.errMajor=%ErrorLevel%
rem Increasing values of intROEIndex and intParseObjects
Set /a SDS.intROEIndex=%SDS.intROEIndex% + 1
Set /a SDS.intParseObjects=!SDS.intParseObjects! + 1
Posted at 07:57 pm by soulinprague
Permalink