PS A:\> $Example = @"
>> localpath,registry,share,text
>> C:\Temp,HKLM:\SOFTWARE,\\thatshare\me,use a`ttab
>> "@
PS A:\> $Example
localpath,registry,share,text
C:\Temp,HKLM:\SOFTWARE,\\thatshare\me,use a tab
PS A:\> $Example | ConvertFrom-Csv | ConvertTo-Json
{
"localpath": "C:\\Temp",
"registry": "HKLM:\\SOFTWARE",
"share": "\\\\thatshare\\me",
"text": "use a\ttab"
}
My Detection Methods will often look for file checksums, which means a path to the file and the expected checksum.To avoid mistakes, and to make it easier on me, I create a SqLite3 database with the items for my JSON. Exporting from SqLite3 can be sent to a CSV file, and then parsed into JSON. A simple database example:
PS A:\> sqlite3 .\example.db
SQLite version 3.24.0 2018-06-04 19:24:41
Enter ".help" for usage hints.
sqlite> .mode line
sqlite> SELECT * FROM example;
name = David
twitter = dbsteimle
url = rhymeswithtimely.blogspot.com
name = Commander Candy
twitter = codingComander
url = codingcommanders.com
sqlite> .quit
Now, a new trick to me it utilizing temporary files. I am using the dot NET method, which is usable in Linux Powershell as well (your mileage may vary). You can create a temp file with
[System.IO.Path]::GetTempFileName(). To use that file, you want to assign it to a variable.PS A:\> $TempCsv = [System.IO.Path]::GetTempFileName() PS A:\> $TempCsv C:/Users/david/AppData/Local/Temp/tmp47AD.tmp
Next, because SqLite3 does not use \ character in its paths, we need to change them to /.
PS A:\> $TempCsv = $TempCsv.Replace("\","/")
PS A:\> $TempCsv
C:/Users/david/AppData/Local/Temp/tmp47AD.tmp
Now we can create our SQL commands. This could also be a file, but I will use a here-string instead.
PS A:\> $TempSql = @" >> .headers on >> .mode csv >> .output $TempCsv >> SELECT name, >> twitter, >> url >> FROM example; >> .quit >> "@ PS A:\> $TempSql .headers on .mode csv .output C:/Users/david/AppData/Local/Temp/tmp47AD.tmp SELECT name, twitter, url FROM example; .quit
Notice our converted $TempCsv value is in the $TempSql here-string.
Now, pipe the $TempSql into SqLite3:
PS A:\> $TempSql | sqlite3 .\example.db
Our $TempCsv frile will now have the output from SqLite3 in CSV format.
PS A:\> gc $TempCsv name,twitter,url David,dbsteimle,rhymeswithtimely.blogspot.com "Commander Candy",codingComander,codingcommanders.com
We can now use this CSV formatted data, but must convert it to a Powershell Object.
PS A:\> Get-Content $TempCsv | ConvertFrom-Csv | ConvertTo-Json
[
{
"name": "David",
"twitter": "dbsteimle",
"url": "rhymeswithtimely.blogspot.com"
},
{
"name": "Commander Candy",
"twitter": "codingComander",
"url": "codingcommanders.com"
}
]
No comments:
Post a Comment