Saturday, May 28, 2022

Reflecting on Service

I was US Army Airborne Field Artillery - Target Acquisition. I never was in combat, so I don't think of myself as a veteran, but I do think of myself as a soldier. 

My MOS (17C) was eliminated in the early 90s, by drones. I was a 17C1P X3, for those that really want to know. So, I looked up 13F the closest thing I could come up with. I wasn't surprised what had changed. I was surprised at how similar my old MOS is to what I do for a living now.

I was in a position where the knowledge I had required:

  • being the middleman between major areas: Infantry, Artillery, and other resources. 
  • keeping an eye on the big picture: battlefield awareness
  • directly communicating valuable information to decision makers
  • determining where to put big expensive stuff
The position also was high stakes:
  • very small tolerance for margin of error
  • need for strict adherence to protocols
  • ability to make difficult calls under pressure
The above is strangely similar to the needs of ERP systems. A few word changes like infantry and artillery for HR and finance and you have just about the same upper-level job description.

13F Fire Support Specialist (Forward Observer)

Directs artillery fire. See Army MOS 13F | MOSDb.

17C Target Acquisition Specialist

Used sound to triangulate the location of enemy artillery to provide counterfire information. If you want a better description, please read: Army MOS 17C | MOSDb.

Breaking down my MOS:
17C - Field Artillery Target Acquisition Specialist
1P    - Parachutist
X3   - TACFire


Memorial Day

For all the veterans out there, if you're like me you struggle a little with this day. It's a time we remember our fallen brothers and sisters in arms. For most it's a time of celebration, but we remember the price paid for the freedom they bought for us. It's a strange mix.

I just want to remind you of the Veterans Crisis Line:

  • Call 1-800-273-8255 and press 1. 
  • Text 838255.

https://www.va.gov/HEALTH/NewsFeatures/2015/February/VAs-Veterans-Crisis-Line-Saves-Lives-Every-Day.asp

Wednesday, June 14, 2017

Senior Lawson S3 System Administrator Engineer - ERP Systems

As a Senior Lawson System Administrator you can wear many hats:

  • Systems Administration for each host OS (Windows, AIX, HP-UX, and others)
  • Systems Integrator using Cloverleaf, IBM Transformation Extender, SSIS, or scripting
  • Project Manager
  • Network Administrator
  • Security Administrator
  • Interdepartmental liason

Thursday, October 13, 2016

Cross Platform File Automation

Here are the guidelines I use whenever I have an automated task where the files may end up on an OS other than the one created.


  • Keep the names as short as possible
  • Use YYYYMMDD for dates - this makes things easier to sort later
  • Symbols 
    • I only use the underscore - if any at all
    • Spaces - can interfere with scripting
    • File system deliminator: . / \
    • Punctuation: . , ! ? : ; 
    • Grouping: () | , ' " `
    • Commenting: ! # - < >
    • Math % ^ * - + = /
    • System variables % $
    • Programmatic operators: ` ~ $ & |
    • Special use: @ 
I know there are more examples but I think you get the point. Someone scripts in java, the other in bash or PowerShell - each RegEx can be picky - 

Wednesday, June 04, 2014

Internet Explorer vs. the web...

These are notes on ways to have Internet Explorer display specific sites content as a different version.

So you have IE 11+ and you have some site that 'requires' IE 7. What do you do?
The main methods:

  • GPO
  • meta http-equiv="X-UA-Compatible"

    • Recoding pages
    • Using an appliance to modify the HTML traffic
  • Force compatibility mode
    • GPO
    • Browser settings
    • IIS Settings - if you own the content
  • IE Tools
    • Enterprise Mode, a compatibility mode that runs on Internet Explorer 11 on Windows 8.1 Update and Windows 7 devices, lets websites render using a modified browser configuration that’s designed to emulate Internet Explorer 8, avoiding the common compatibility problems associated with web apps written and tested on older versions of Internet Explorer.

Home vs. Business

Friday, February 28, 2014

Make sure you're clear to change your password

The following script I use to verify that I am not logged in anywhere else before I change my domain password.

@echo off
set me=logon

for /F %%S in (myservers.txt) do (@echo %%S && @query session /SERVER:%%S | find "%me%")

  • Change `me` to your domain logon
  • create myservers.txt with a list of the servers you want to limit your search to, then save it in the same folder as this script.

Cheap Portal Monitor

Below is a script that I use to check that the portals are running and errors are not present. Sometime services lie!

@echo off
cls
SETLOCAL ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
set pre=http://
set sufix=^.domain^.org/lawson/portal
set lbpsufix=^.domain^.root^.loc/lbp9
set lbisufix=^.domain^.root^.loc:9080/efs/
:: Inteded to have wget installed on host pc
set wgetpath=C:\wget\bin
:: intended to be run from USB drive
set locroot=%~dp0
rem <esc>[<attribute>;<foreground>;<background>m
set yellow=[1;33;40m
set cyan=[1;36;40m
set red=[1;31;40m
set normal=[0;32;40m

goto start

:start
cd %locroot%\scripts\Infor\
@del /Q h*.tmp.txt && @cls
@del /Q index.html.* && @cls
@del /Q out.*txt && @cls
@del /Q final.txt && @cls
@del /Q finalf.txt && @cls
@del /Q SSOServlet@_action* && @cls
@del /Q null && @cls
goto:flow

:flow
for %%M in (server1 server2) do call :verportal %%M
for %%N in (server3 server4) do call :verportal1 %%N
for %%O in (server5 server6) do call :verportal2 %%O
@cls
call :doublecheck
call :display
goto:EOF

:verportal
%wgetpath%\wget %pre%%1%sufix% 1>nul 2>"%1.tmp.txt"
find /c "connected" "%1.tmp.txt" >NULL
if %errorlevel% equ 1 goto notthere
goto:end

:verportal1
%wgetpath%\wget %pre%%1%lbpsufix% 1>nul 2>"%1.tmp.txt"
set result=("type "%1.tmp.txt" | @find /i "connecting" | @find /i "connected"")
find /c "connected" "%1.tmp.txt" >NULL
if %errorlevel% equ 1 goto notthere
goto:end

:verportal2
%wgetpath%\wget %pre%%1%lbisufix% 1>nul 2>"%1.tmp.txt"
set result=("type "%1.tmp.txt" | @find /i "connecting" | @find /i "connected"")
find /c "connected" "%1.tmp.txt" >NULL
if %errorlevel% equ 1 goto notthere
goto:end

:notthere
echo ------- FAILURE reaching page!!!!
goto:end

:doublecheck
echo Checks to see if 200 OK was received ^| 1 = was received
for /r %%B in ("h*.tmp.txt") do (@find /c "200 OK" %%B) >> out.txt
for /r %%C in (out.txt) do (@type out.txt | @findstr /E /R /X ".*1$" >> final.txt)
for /r %%D in (out.txt) do (@type out.txt | @findstr /E /R /X ".*0$" >> finalf.txt)
goto:end

:display
for /F "delims=\ tokens=4,5" %%E in (final.txt) do @echo %cyan% %%E
for /F "delims=\ tokens=4,5" %%F in (finalf.txt) do @echo %red% %%F
goto:end

:end
@echo %normal%

:EOF
endlocal
exit /B
-

Output looks like:

Checks to see if 200 OK was received | 1 = was received
 server1.TMP.TXT: 1
 server2.TMP.TXT: 1
 server3.TMP.TXT: 1
 server4.TMP.TXT: 1
 server5.TMP.TXT: 1
 server6.TMP.TXT: 0

F:\scripts\Infor>

Wednesday, September 18, 2013

One Liners: Sys Admin



  • To get a list of the applications using the most memory: tasklist | sort /+65 /R | more
  • To get the date your password will expire: net user %USERNAME% /domain | find /i "expires"



Thursday, February 07, 2013

Testing tools

Found a few sites that have great links to resources: opensourcetesting.org & softwareqatest.com.

I'm trying Log Parser Studio and have tried Splunk.

I've evaluated Telerik's Test Studio and was very impressed, but it's not something I can afford out of my pocket.

I've gotta say that if I can't persuade my employer to purchase PowerGREP I may pay for it myself. It does a lot when you need to look through and report on a variety of logs (WebSphere, IIS, Apache, DB2, SQL, vendor specific...). It uses regular expression or literal text and does collection that can be raw or grouped using a variety of methods.

Monday, February 04, 2013

Lawson Cleanup

Lawson Cleanup

The following are compiled from several resources and are in no particular order:



deljobhst -cjrw delete everything over 90 days
delusers delete orphaned users
jobinteg -vd
secinteg
permsmaint



Thursday, January 17, 2013

RegEx Examples

Regular Expression Examples

Text Log Extractions

Multi-Line

^2013-01-16.{1,}16:[0-9]{2}:[0-9]{2}.+\)\x0AUSER:\s000000\x0Afinished\s.+ACCESS\sDENIED\x0a$

Breakdown:
^   Start Multi-line pattern
2013-01-16.{1,}16:[0-9]{2}:[0-9]{2}   Date stamp
.+   any character 1 or more times
\)   specific character ) could use \x29 or \051
\x0A  New line could be \n

USER:   beginning of next line starts with USER:
\s   There's white space
000000  looks for specific number sequence
\x0A  New line could be \n
finished   beginning of next line starts with finished
\s   There's white space
.+   any character 1 or more times
ACCESS\sDENIED   finds `ACCESS DENIED`
\x0A   New line could be \n
$   end of multi-line pattern

To get the UID, token and action that was denied:

^(USER:\s)([0-9]{6})(\r\n|\n)(.+tokenName=)(([A-Z]{2}[0-9]{2,3}\.[0-9]{1})|([A-Z]{2}[0-9]{2,3}))(.+actionCode=)([A-Z]{1})(:.+DENIED)$
Collect: $2,$5,$9\n
will return:        000000,GL124,I

How it works:
^ starts the multi-line pattern
(USER:\s) looks for the user
([0-9]{6}) gets the UID
(\r\n|\n) looks for the line break
(.+tokenName=) looks for the token
(([A-Z]{2}[0-9]{2,3}\.[0-9]{1})|([A-Z]{2}[0-9]{2,3})) gets the token
(.+actionCode=) looks for the action
([A-Z]{1})gets the action
(:.+DENIED) filters only the DENIED messages
$ ends the multi-line string

Tuesday, September 25, 2012

LII

Lawson Information Investigator

I edited the following line (3787 in doLBP Budgeting & Planning) to correct formatting:
#push @lawson, ( XMLEntry( 'product', '', 'name', 'LBP', 'version,', $version, 'location', $dir, 'connection', $connection ) );
push @lawson, ( XMLEntry( 'product', '', 'name', 'LBP', 'version', $version, 'location', $dir, 'connection', $connection ) );

One Liners: Remote Commands

One Liners: Remote Commands

Terminate a disconnected terminal services session: rwinsta 0 /server:%server%
Remotely reboot machine: shutdown /m \\192.168.1.1 /r /t 0 /f

Copy entire folder and its contents from a remote source to local machine: xcopy /s \\remotecomputer\directory c:\local
Get server uptime: systeminfo /s <server> | find /i "boot time"

WMIC Remote Queries

Remotely determine logged in user: wmic /node:remotecomputer computersystem get username
List running processes: wmic /node:remotecomputer process list brief
Determine open shares: wmic  /node:remotecomputer share list brief

Remotely display machine’s MAC address
wmic /node:machinename nic get macaddress

Remotely list running processes every second
wmic /node:machinename process list brief /every:1

Remotely display System Info
wmic /node:machinename computersystem list full

Disk drive information
wmic diskdrive list full
wmic partition list full

Bios info
wmic bios list full

List all patches
wmic qfe

Look for a particular patch
wmic qfe where hotfixid="KB958644" list full

Remotely List Local Enabled Accounts
wmic /node:machinename USERACCOUNT WHERE "Disabled=0 AND LocalAccount=1" GET Name

Start a service remotely
wmic /node:machinename 4 service lanmanserver CALL Startservice
sc \\machinename start lanmanserver

List services
wmic service list brief
sc \\machinename query

Disable startup service
sc config example disabled

List user accounts
wmic useraccount list brief

Enable RDP remotely
wmic /node:"machinename 4" path Win32_TerminalServiceSetting where AllowTSConnections=“0” call SetAllowTSConnections “1”

List number of times a user logged on
wmic netlogin where (name like "%adm%") get numberoflogons

Query active RDP sessions
qwinsta /server:192.168.1.1

Remove active RDP session ID 2
rwinsta /server:192.168.1.1 2

Remotely query registry for last logged in user
reg query "\\computername\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon" /v DefaultUserName

One Liners: DSQUERY DSGET

One Liners: DSQUERY | DSGET

Required: Remote Server Installation Tools

Most Used

  • dsquery user -name "*name*"
  • dsget user <FullCN> -memberof
  •  dsquery user -name "*name*" |   dsget user -memberof 
  • dsget user <FullCN> -memberof | find "blah"
  • dsquery user <CN> -name l* | dsget user -samid
  • dsquery computer domainroot -name "name*" | dsget computer -samid

Less Used

  • Get members of an AD Group:
    • dsget group "CN=Blah,OU=Blah,DC=domain,DC=domainsuffix" -members
  • Find the number of mailboxes on the specified msExchHomeServerName
    • dsquery * -filter "(&(objectClass=User)(objectCategory=Person)(mailnickname=*)(msExchHomeServerName=*servername*))" -limit 0 | find /i /c "cn"
  • Query for global security or distribution groups
    • dsquery * -filter "(&(groupType:1.2.840.113556.1.4.803:=2))"
  • Query for global security groups
    • dsquery * -filter "(&(groupType:1.2.840.113556.1.4.803:=-2147483646))"
  • Find the domain controller GUID of the specified DC
    • dsquery * "CN=dcname,OU=Domain Controllers,DC=domainRoot" -scope base -attr objectguid
  • Find the domain GUID
    • dsquery * "domainRoot" -scope base -attr objectGUID
  • Find DFS roots from Active Directory
    • dsquery * "CN=Dfs-Configuration,CN=System,domainRoot" -filter "(objectClass=fTDfs)"
  • Find the Exchange storage groups known to AD
    • dsquery * "CN=Configuration,domainRoot" -filter "(&(objectClass=msExchStorageGroup))" -attr name msExchESEParamCircularLog msExchESEParamEventSource msExchESEParamLogFilePath msExchESEParamLogFileSize msExchESEParamSystemPath msExchESEParamZeroDatabaseDuringBackup msExchRecovery msExchESEParamEnableOnlineDefrag msExchESEParamEnableIndexChecking msExchESEParamBaseName msExchESEParamCommitDefault msExchESEParamDbExtensionSize msExchESEParamPageTempDBMin msExchESEParamPageFragment msExchESEParamCheckpointDepthMax
  • Find AdminSDHolder / SDPROP groups in the directory
    • dsquery * -filter "(&(objectClass=Group)(objectCategory=Group)(adminCount=1))"  
  • Query for all objects that are protected (that are members of the groups above)
    • dsquery * -filter "(adminCount=1)"
  • Count how many user accounts are protected by the SDPROP process
    • dsquery * -filter "(&(objectClass=User)(objectCategory=Person)(adminCount=1))" | find /i /c "CN="
  • Find SCPs (Service Connection Points) for objects other than print queues
    • dsquery * -filter "&((objectClass=ConnectionPoint)(!(objectClass=PrintQueue)))" -limit 0
  • Check a 2008 R2 schema forest prep has run successfully (rvevision=5)
    • dsquery * "CN=ActiveDirectoryUpdate,CN=ForestUpdates,CN=Configuration,domainRoot" -attr * -scope base
  • Check a 2008 R2 schema domain prep has run successfully (revision=5)
    • dsquery * "CN=ActiveDirectoryUpdate,CN=DomainUpdates,CN=System,domainRoot" -attr * -scope base
  • Find the infrastructure role holder for the DNS domain application partition
    • dsquery * "CN=Infrastructure,DC=DomainDNSZones,domainRoot" -attr fSMORoleOwner  
  • Find the application partitions from the forest root configuration NC
    • dsquery * "CN=Partitions,CN=Configuration,domainRoot" -filter "(&(objectClass=crossRef)(msDS-SDReferenceDomain=*))" -attr ncName dnsRoot
  • Find computer accounts not server, XP or Vista
    • dsquery * domainroot -filter "(&(objectCategory=Computer)(objectClass=Computer)(&(!(operatingSystem=*prof*)(!(operatingSystem=*server*)(!(operatingSystem=*vista*))))))" -limit 0 -attr CN operatingSystem operatingSystemVersion
  • Find SPNs from the directory
    • dsquery * -filter "(servicePrincipalName=*)" -attr cn servicePrincipalName -limit 0
  • Query a list of groups and determine the group type (global/local/universal)
    • dsquery group -name *groupfilter* | dsget group -scope -secgrp -dn

Monday, September 24, 2012

Lawson Health Check Automation

Lawson Health Check Automation

Disclaimer

While I use these scripts in my environment they are only tested in my environment. These examples are in no way endorsed by Lawson, Infor or any of their affiliates. There is no warranty, expressed or implied, to them  -- use at your own risk.

-- Common sense dictates that you at least read through thet script to understand what it does.

Base Script


:: This file gathers logs from the production Lawson system
::   and places them in a temporary local folder where it then
::   parses them for the current day's events and any errors.
:: 20120913 garymartin2007@gmail.com
:: REQUIREMENTS:
::   -- Microsoft .NET Framework v4 +
::   -- WinSCP with .NET COM interop
::      -- Create WinSCP script file
::   -- PowerShell
::   -- tidyit.cmd
:: COMMAND LINE ARGUMENTS - none
:: PROGRAM Flow
::   -- Set log file
::   -- Get date formats using PowerShell
::   --- Set date formats
::   -- Run WinSCP script to gather log files
::   -- Parse Lawson log files for errors and ouput to log file
:: CHANGELOG
::    -- 20120913 Beta version testing
::    -- 20120913 Modifed output for HTML file creation
::    -- 20120914 Added HTML Tidy to clean up any errors in output file

@echo off
setLocal EnableDelayedExpansion
set LOGFILE=C:\Lawson\reports\scrout.html
set LOCALLOGFOLDER=C:\Lawson\reports\logs\

:: get date and set vars for later use
::   Powershell is used because Win 7 does not provide
::     week day names
powershell -NonInteractive -Command "& {Get-Date -Format ddd.MMM.dd}" > date.txt
REM powershell -NonInteractive -Command "& {Get-Date -Format .MMM.dd', 'yyyy}" > date1.txt
powershell -NonInteractive -Command "& {Get-Date -Format .MMM.dd}" > date1.txt

:: Date format for latm, ladb, and lajs logs
for /f "tokens=* delims= " %%a in (date.txt) do (
set DATESTR1=%%a
)
:: Date format for ProcessFlow logs
for /f "tokens=* delims= " %%a in (date1.txt) do (
set DATESTR2=%%a
)

:: get the current logs using WinSCP script
C:\gmTools\WinSCP\WinSCP.exe /console /script=c:\Lawson\reports\WinSCPHC.txt

:: Search and log errors to file
:: Start Head section
@ECHO ^<html lang="en"^>^<head^>^<title^>Lawson ERP AHC Implementation^</title^> > %LOGFILE% 2>&1
:: to enable HTML5 in IE
@ECHO ^<script^>document.createElement('header'); document.createElement('nav'); document.createElement('article'); document.createElement('footer'); document.createElement('aside');^</script^> >> %LOGFILE% 2>&1
@ECHO ^<link rel="stylesheet" href="scrout.css" /^> >> %LOGFILE% 2>&1
@ECHO ^</head^>^<body^> >> %LOGFILE% 2>&1
@ECHO ^<h1^>Production^</h1^>^<p^> >> %LOGFILE% 2>&1
@ECHO DATESTR1 = %DATESTR1% ^<br /^> DATESTR2 = %DATESTR2% ^<br /^>for findstr regex format. Last run >> %LOGFILE% 2>&1
time /t >> %LOGFILE% 2>&1
@ECHO . ^</p^> >> %LOGFILE% 2>&1
:: End Head section
:: lawsec section
@ECHO ^<h2^>LAWSEC Results^</h2^> >> %LOGFILE% 2>&1
@ECHO ^<pre^> >> %LOGFILE% 2>&1
findstr /i /b "Lawson" %LOCALLOGFOLDER%heilawwi004\lawsec.txt >> %LOGFILE% 2>&1
@ECHO ^</pre^> >> %LOGFILE% 2>&1
:: jqstatus section
@ECHO ^<h2^>JQSTATUS Results^</h2^> >> %LOGFILE% 2>&1
@ECHO ^<pre^> >> %LOGFILE% 2>&1
findstr /i /n /b "^[0-9]" %LOCALLOGFOLDER%heilawwi004\jqstat.txt >> %LOGFILE% 2>&1
@ECHO ^</pre^> >> %LOGFILE% 2>&1
:: jobinteg section
@ECHO ^<h2^>JOBINTEG Results^</h2^> >> %LOGFILE% 2>&1
@ECHO ^<pre^> >> %LOGFILE% 2>&1
findstr /i /n /b "ORPHANED " %LOCALLOGFOLDER%heilawwi004\orphans.txt >> %LOGFILE% 2>&1
@ECHO ^</pre^> >> %LOGFILE% 2>&1
:: secinteg section
@ECHO ^<h2^>SECINTEG Results^</h2^> >> %LOGFILE% 2>&1
@ECHO ^<pre^> >> %LOGFILE% 2>&1
findstr /i /n /b "corrupt" %LOCALLOGFOLDER%heilawwi004\secinteg.txt >> %LOGFILE% 2>&1
@ECHO ^</pre^> >> %LOGFILE% 2>&1
:: latm log
@ECHO ^<h2^>LATM.LOG Errors only^</h2^> >> %LOGFILE% 2>&1
@ECHO ^<pre^> >> %LOGFILE% 2>&1
findstr /i /n /b %DATESTR1% %LOCALLOGFOLDER%heilawwi004\latm.log | find "PrcTPCrash" >> %LOGFILE% 2>&1
@ECHO ^</pre^> >> %LOGFILE% 2>&1
@ECHO ^<hr /^> >> %LOGFILE% 2>&1
@ECHO ^<pre^> >> %LOGFILE% 2>&1
findstr /i /n /b %DATESTR1% %LOCALLOGFOLDER%heilawwi004\latm.log | find /i "ERROR" >> %LOGFILE% 2>&1
@ECHO ^</pre^> >> %LOGFILE% 2>&1
:: ladb log
@ECHO ^<h2^>LADB.LOG ^</h2^> >> %LOGFILE% 2>&1
@ECHO ^<p^>Filtered out (LoadLic) lines.^</p^> >> %LOGFILE% 2>&1
@ECHO ^<pre^> >> %LOGFILE% 2>&1
findstr /i /n /b %DATESTR1% %LOCALLOGFOLDER%heilawwi004\ladb.log | find /v "(LoadLic)" >> %LOGFILE% 2>&1
@ECHO ^</pre^> >> %LOGFILE% 2>&1
:: lajs log
@ECHO ^<h2^>LAJS.LOG All events^</h2^> >> %LOGFILE% 2>&1
@ECHO ^<pre^> >> %LOGFILE% 2>&1
findstr /i /n /b %DATESTR1% %LOCALLOGFOLDER%heilawwi004\lajs.log >> %LOGFILE% 2>&1
@ECHO ^</pre^> >> %LOGFILE% 2>&1
:: pflow.out log
@ECHO ^<h2^>PFLOW.OUT^</h2^> >> %LOGFILE% 2>&1
@ECHO ^<p^>Java com.lawson errors only^</p^> >> %LOGFILE% 2>&1
@ECHO ^<pre^> >> %LOGFILE% 2>&1
findstr /i /n /b %DATESTR2% %LOCALLOGFOLDER%heilawwi004\pflow.out | find "at com.lawson" >> %LOGFILE% 2>&1
@ECHO ^</pre^> >> %LOGFILE% 2>&1
:: pfsch.out log
@ECHO ^<h2^>PFSCH.OUT Database Exception errors only ^</h2^> >> %LOGFILE% 2>&1
@ECHO ^<pre^> >> %LOGFILE% 2>&1
findstr /i /n /b %DATESTR2%",.[0-9]*.[0-9]*:[0-9]*:[0-9].*.M\].*Lawson.Database.Exception" %LOCALLOGFOLDER%heilawwi004\pfsch.out >> %LOGFILE% 2>&1
@ECHO ^</pre^> >> %LOGFILE% 2>&1
@ECHO ^<p^>There are:^</p^> >> %LOGFILE% 2>&1
@ECHO ^<pre^> >> %LOGFILE% 2>&1
REM findstr /i /n /b %DATESTR2%",.[0-9]*.[0-9]*:[0-9]*:[0-9].*.M\].*Scheduler shutdown waiting for jobs to complete" %LOCALLOGFOLDER%heilawwi004\pfsch.out | find /c "Scheduler shutdown waiting for jobs to complete" >> %LOGFILE% 2>&1
findstr /i /n /b %DATESTR2%",.2012.[0-9]*:[0-9]*:[0-9]*.[A|P]M\].Scheduler shutdown waiting for jobs to complete" %LOCALLOGFOLDER%heilawwi004\pfsch.out | find /c "Scheduler shutdown waiting for jobs to complete" >> %LOGFILE% 2>&1
@ECHO ^</pre^> >> %LOGFILE% 2>&1
@ECHO ^<p^>jobs waiting for scheduler to shut down. If there are more than a few: to correct this: ^<br /^> ^<br /^> Follow AR_1095827 instructions.^<br /^> ps -ef ^&#124; grep WfSche ^&#124; less ^<br /^> to kill the hung processes.^</p^> >> %LOGFILE% 2>&1
:: Start footer
@ECHO ^<br /^>^<p^>Completed  >> %LOGFILE% 2>&1
time /t >> %LOGFILE% 2>&1
@ECHO ^</p^> >> %LOGFILE% 2>&1
:: Close HTML tags
@ECHO ^</body^>^</html^> >> %LOGFILE% 2>&1
call tidyit.cmd %LOGFILE%
endlocal

@start "" /b C:\PROGRA~2\INTERN~1\iexplore.exe C:\Lawson\reports\scrout.html

Requires

Set the following to run as a cron job:
jqstatus –rwh > /law/app/jqstat.txt
jobinteg –vd > /law/app/orphans.txt
lawsec > /law/app/lawsec.txt
secinteg –fv > /law/app/secinteg.txt

Tuesday, May 10, 2011

When to switch a platform

Face it. With a huge change there's a lot of stress. There are a lot of factors: costs in money and effort, vendor and technical stability of the current and prospective solution, motivation (is your idea or your boss'), and political comfort.

The overall theme I adhere to is that nothing is perfect.

The Short Story
Change when:

  • you know there is going to be a significant change in your vendor or their technology
    • Example: Your current system requires a technology (hardware, software, OS) that is no longer supported or is set to sunset before you can replace the system
    • Example: Your current vendor is in some crisis that will prevent you from getting support
  • your current solution is not able to scale with your company's growth
    • Example: You are using a spreadsheet for your accounting when your company had 3 employees, now you have 1,000 you need a solution that is a better fit.
Majors
  • In-house, hosted, virtual or physical
  • Licensing
to be continued . . .

Reflecting on Service

I was US Army Airborne Field Artillery - Target Acquisition. I never was in combat, so I don't think of myself as a veteran, but I do th...