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.