Hello,
I’m trying to parse a file and extract specific data from it. I want to also assign handles or objectify the data so that it can be further manipulated, searched, filtered, exported etc…
An example would be NAME = “SNMPConfig”, PARAM_TYPE = STANDARD, ACTIVE = False, MONITOR = False, CHECK = False.
This is only one piece of the puzzle but what I want to accomplish is to take each string in the file similar to this one and break it apart so that NAME becomes a handle, PARAM_TYPE becomes a handle, ACTIVE becomes a handle, MONITOR becomes a handle, and CHECK becomes a handle. Under each handle would be the items on the other side of the equals sign. Each string in the file that is similar to what I provided will have NAME, PARAM_TYPE, ACTIVE etc… and something different on the other side of the equals sign. So imagine you execute get-service or get-process; I want all the different strings in the files I parse to look like the output you get from a typical powershell cmd-let. Is that possible?
Example Text File: Forgive me if I get the code blocks wrong.
!KM ZEROED ON 07/02/14 09:02 AM
!PATROLV3.5.20i 7DA778CDE6DDDF13E2838E4B0F567C54
!#MSG_DOMAIN pwk_sec
!++
!
! PATROL Session Knowledge Module
!
!--
!RELEASE 4.7.00
!REVISION 00
!PACKAGE pwk
!DESCRIPTION PATROL Knowledge Module for Microsoft Windows Operating System
!PRODUCTCODE pwk
VERSION 1.153
COMPUTERS = {
{ NAME = "NT",
SCREEN_POSITION = {12, 24},
OK_PICTURE = "nt_ok.xpm",
WRONG_PICTURE = "nt_warn.xpm",
COMMANDS = {
{ NAME = "SNMP Reconfigure", AVAILABILITY = AVAILABLE_ALWAYS, SECURITY = SECURITY_INHERIT,
BASE_COMMAND = {
{ COMPUTER_TYPE = "NT", COMMAND_TYPE = "PSL",
COMMAND_TEXT = 1087855579 "requires pwk_nt;\
pwk_nt__ReconfigureSnmp();\
pwk_nt__StartSnmp();"}
}
},
{ NAME = "Refresh Parameters", AVAILABILITY = AVAILABLE_ONLINE, SECURITY = SECURITY_INHERIT,
BASE_COMMAND = {
{ COMPUTER_TYPE = "NT", COMMAND_TYPE = "OS",
COMMAND_TEXT = 892081741 "%REFRESH_PARAMS"}
}
},
{ NAME = "OS Command", AVAILABILITY = AVAILABLE_ALWAYS, SECURITY = SECURITY_INHERIT,
BASE_COMMAND = {
{ COMPUTER_TYPE = "NT", COMMAND_TYPE = "OS",
COMMAND_TEXT = 759992599 "%%{OS Command}"}
}
},
{ NAME = "OS Task", AVAILABILITY = AVAILABLE_ALWAYS, SECURITY = SECURITY_INHERIT,
BASE_COMMAND = {
{ COMPUTER_TYPE = "NT", COMMAND_TYPE = "OS",
COMMAND_TEXT = 759992599 "%%{Command}"}
},
TASK = { SHOW_TIMER = True, INTERACTIVE = True, ATTN_POPUP = False }
},
{ NAME = "PSL Command", AVAILABILITY = AVAILABLE_ONLINE, SECURITY = SECURITY_INHERIT,
BASE_COMMAND = {
{ COMPUTER_TYPE = "NT", COMMAND_TYPE = "PSL",
COMMAND_TEXT = 759992599 "%%{Command}"}
}
},
{ NAME = "PSL Task", AVAILABILITY = AVAILABLE_ONLINE, SECURITY = SECURITY_INHERIT,
BASE_COMMAND = {
{ COMPUTER_TYPE = "NT", COMMAND_TYPE = "PSL",
COMMAND_TEXT = 759992599 "%%{Command}"}
},
TASK = { SHOW_TIMER = True, INTERACTIVE = True, ATTN_POPUP = False }
},
{ NAME = "Configure Recovery Actions", AVAILABILITY = AVAILABLE_ALWAYS, SECURITY = SECURITY_INHERIT,
BASE_COMMAND = {
{ COMPUTER_TYPE = "NT", COMMAND_TYPE = "PSL",
COMMAND_TEXT = 984071155 "requires PATROLRecovery;\
ListRecoveryActionsDialog(\"\", TRUE);"}
}
}
},
INFO_BOX = {
{ NAME = "OS Name", AVAILABILITY = AVAILABLE_ONLINE, SECURITY = SECURITY_INHERIT,
BASE_COMMAND = {
{ COMPUTER_TYPE = "NT", COMMAND_TYPE = "PSL",
COMMAND_TEXT = 890946737 "print(get(\"/osName\"));"}
}
},
{ NAME = "OS Version", AVAILABILITY = AVAILABLE_ONLINE, SECURITY = SECURITY_INHERIT,
BASE_COMMAND = {
{ COMPUTER_TYPE = "NT", COMMAND_TYPE = "PSL",
COMMAND_TEXT = 937583757 "#%ECHO %{reg_OsVersion}\
print(get(\"/reg_OsVersion\").\" \".get(\"/reg_SvcPk\"));"}
}
},
{ NAME = "Build Number", AVAILABILITY = AVAILABLE_ONLINE, SECURITY = SECURITY_INHERIT,
BASE_COMMAND = {
{ COMPUTER_TYPE = "NT", COMMAND_TYPE = "PSL",
COMMAND_TEXT = 890946938 "#%ECHO %{reg_BuildNumber}\
print(get(\"/reg_BuildNumber\"));"}
}
},
{ NAME = "UpTime", AVAILABILITY = AVAILABLE_ONLINE, SECURITY = SECURITY_INHERIT,
BASE_COMMAND = {
{ COMPUTER_TYPE = "NT", COMMAND_TYPE = "PSL",
COMMAND_TEXT = 997455536 "requires pwk_ntos;\
print( pwk_ntos__SystemUpTime() );"}
}
},
{ NAME = "Last Reboot At", AVAILABILITY = AVAILABLE_ONLINE, SECURITY = SECURITY_INHERIT,
BASE_COMMAND = {
{ COMPUTER_TYPE = "NT", COMMAND_TYPE = "PSL",
COMMAND_TEXT = 997455547 "requires pwk_ntos;\
print( pwk_ntos__SystemBootTime() );"}
}
},
{ NAME = "NT KM Version", AVAILABILITY = AVAILABLE_ALWAYS, SECURITY = SECURITY_INHERIT,
BASE_COMMAND = {
{ COMPUTER_TYPE = "NT", COMMAND_TYPE = "PSL",
COMMAND_TEXT = 1078269349 "requires pwk_version;\
print( pwk_version__GetVersion() );"}
}
}
},
PARAMETERS = {
{ NAME = "SNMPConfig", PARAM_TYPE = STANDARD, ACTIVE = False, MONITOR = False, CHECK = False,
HELP_FILE = "pwkkm.hlp",
HELP_CONTEXT_ID = 13711,
BASE_COMMAND = {
{ COMPUTER_TYPE = "NT", COMMAND_TYPE = "PSL",
COMMAND_TEXT = 1087855701 "requires pwk_nt;\
pwk_nt__StartSnmp();"}
},
START = "ASAP",
POLL_TIME = "60", EXTERNAL_POLLING = False,
HISTORY_TIME = "60", HISTORY_SPAN = 0, HISTORY_LEVEL = False,
FORMAT = "%f", OUTPUT = OUTPUT_NONE,
AUTO_RESCALE = True, Y_AXIS_MIN = 0, Y_AXIS_MAX = 100,
RANGES = {
{ NAME = "BORDER", ACTIVE = False, MINIMUM = 0, MAXIMUM = 0, STATE = OK, ALARM_WHEN = ALARM_INSTANT, ALARM_WHEN_N = 0
},
{ NAME = "ALARM1", ACTIVE = False, MINIMUM = 0, MAXIMUM = 0, STATE = OK, ALARM_WHEN = ALARM_INSTANT, ALARM_WHEN_N = 0
},
{ NAME = "ALARM2", ACTIVE = False, MINIMUM = 0, MAXIMUM = 0, STATE = OK, ALARM_WHEN = ALARM_INSTANT, ALARM_WHEN_N = 0
}
}
},
{ NAME = "SNMPStart", PARAM_TYPE = STANDARD, ACTIVE = True, MONITOR = False, CHECK = False,
HELP_FILE = "pwkkm.hlp",
HELP_CONTEXT_ID = 13710,
BASE_COMMAND = {
{ COMPUTER_TYPE = "NT", COMMAND_TYPE = "PSL",
COMMAND_TEXT = 1087855708 "requires pwk_nt;\
pwk_nt__StartSnmp();"}
},
START = "ASAP",
POLL_TIME = "30", EXTERNAL_POLLING = False,
TITLE = "SNMPStart",
HISTORY_TIME = "30", HISTORY_SPAN = 0, HISTORY_LEVEL = False,
FORMAT = "%f", OUTPUT = OUTPUT_NONE,
AUTO_RESCALE = True, Y_AXIS_MIN = 0, Y_AXIS_MAX = 100,
RANGES = {
{ NAME = "BORDER", ACTIVE = False, MINIMUM = 0, MAXIMUM = 0, STATE = OK, ALARM_WHEN = ALARM_INSTANT, ALARM_WHEN_N = 0
},
{ NAME = "ALARM1", ACTIVE = False, MINIMUM = 0, MAXIMUM = 0, STATE = OK, ALARM_WHEN = ALARM_INSTANT, ALARM_WHEN_N = 0
},
{ NAME = "ALARM2", ACTIVE = False, MINIMUM = 0, MAXIMUM = 0, STATE = OK, ALARM_WHEN = ALARM_INSTANT, ALARM_WHEN_N = 0
}
}
}
},
COMMAND_TYPES = {
{ NAME = "DISKPERF", TEMPLATE = 1003325895 "diskperf %{command}", KILL_GRP = False, KILL_SIG = 0 },
{ NAME = "SNMPSTART", TEMPLATE = 996242303 "%{snmp_prog} %{snmp_config} %{snmp_parm} %{command}", KILL_GRP = False, KILL_SIG = 0 },
{ NAME = "SNMPHUP", TEMPLATE = 996162113 "%{cmdline}\\bin\\snmphup %{command}", KILL_GRP = False, KILL_SIG = 0 },
{ NAME = "CHKDSK", TEMPLATE = 992614858 "chkdsk %{command}", KILL_GRP = False, KILL_SIG = 0 },
{ NAME = "LOGD", TEMPLATE = 992613024 "logd %{command}", KILL_GRP = False, KILL_SIG = 0 }
}
}
Powershell Command I’ve been trying:
function Get-Params{
[CmdletBinding()]
param(
[Parameter()]
[string[]]$FileName='.\Data Files\NT_CPU.km'
)
Begin{
$Parse = Get-Content -Path $FileName
$Parse = $Parse | Select-String -Pattern RELEASE,DESCRIPTION,PARAM_TYPE,TITLE
$Parse = $Parse -replace "{",""
$Parse = $Parse -replace " ",""
# Replaces with new lines
$Parse = $Parse -replace ",","`r`n"
$Parse = $Parse -replace " ",""
#$Parse = $Parse | Select-String RELEASE,DESCRIPTION,NAME,PARAMETERS,TITLE,UNITS
#$Parse = $Parse -replace "{ NAME = `"BORDER`", ACTIVE = False, MINIMUM = 0, MAXIMUM = 0, STATE = OK, ALARM_WHEN = ALARM_INSTANT, ALARM_WHEN_N = 0",""
#$Parse = $Parse -replace "{ NAME = `"ALARM1`", ACTIVE = False, MINIMUM = 0, MAXIMUM = 0, STATE = OK, ALARM_WHEN = ALARM_INSTANT, ALARM_WHEN_N = 0",""
#$Parse = $Parse -replace "{ NAME = `"ALARM2`", ACTIVE = False, MINIMUM = 0, MAXIMUM = 0, STATE = OK, ALARM_WHEN = ALARM_INSTANT, ALARM_WHEN_N = 0",""
}
Process{
$Parse
}
End{}
Maybe you can tell me if what I’m trying to do given the format of the file is even possible. There is other data I also want from the file but I thought I would start here.