2018-09-14 15:48:52 +02:00
#A hacky script to convert YML to MD file the way I want
# Used primarly for generating MD files to the LOLBAS-Project site
#Author: Oddvar Moe
#If you can use it, be my guest!
$mainpath = " C:\data\gitprojects\LOLBAS "
function Convert-YamlToMD
{
[ CmdletBinding ( ) ]
Param
(
[ Parameter ( Mandatory = $true ) ]
$YamlObject ,
[ Parameter ( Mandatory = $true ) ]
[ String ]
$Outfile
)
Begin
{
}
Process
{
# Header
" ` # ` # $( $YamlObject . Name ) " | Add-Content $Outfile
" * Functions: $( $YamlObject . Description ) " | Add-Content $Outfile
" `` `` `` " | Add-Content $Outfile
foreach ( $cmd in $YamlObject . Commands )
{
" `n $( $cmd . command ) " | Add-Content $Outfile
" $( $cmd . description ) " | Add-Content $Outfile
}
" `` `` `` " | Add-Content $Outfile
" " | Add-Content $Outfile
" * Resources: " | Add-Content $Outfile
foreach ( $link in $YamlObject . Resources )
{
" * $( $link ) " | Add-Content $Outfile
}
" " | Add-Content $Outfile
" * Full path: " | Add-Content $Outfile
foreach ( $path in $YamlObject . 'Full path' )
{
" * $( $path ) " | Add-Content $outfile
}
" " | Add-Content $Outfile
" * Notes: $( $YamlObject . Notes ) " | Add-Content $Outfile
" " | Add-Content $Outfile
}
End
{
}
}
function Add-MainIndex
{
[ CmdletBinding ( ) ]
Param
(
[ Parameter ( Mandatory = $true ) ]
$YamlObject ,
[ Parameter ( Mandatory = $true ) ]
[ String ]
$Outfile ,
[ Parameter ( Mandatory = $true ) ]
[ String ]
$Type
)
Begin
{
}
Process
{
# Header
# OS BINARIES
#[Atbroker.exe](OSBinaries/Atbroker.md)
if ( $Type -eq " OSBinaries " ) {
2018-09-14 15:54:20 +02:00
" ` [ $( $YamlObject . Name ) ` ] ` ( $Type / $( $YamlObject . Name ) .md ` ) " | Add-Content $Outfile
2018-09-14 15:48:52 +02:00
}
if ( $Type -eq " OSLibraries " ) {
2018-09-14 15:54:20 +02:00
" ` [ $( $YamlObject . Name ) ` ] ` ( $Type / $( $YamlObject . Name ) .md ` ) " | Add-Content $Outfile
2018-09-14 15:48:52 +02:00
}
if ( $Type -eq " OSScripts " ) {
2018-09-14 15:54:20 +02:00
" ` [ $( $YamlObject . Name ) ` ] ` ( $Type / $( $YamlObject . Name ) .md ` ) " | Add-Content $Outfile
2018-09-14 15:48:52 +02:00
}
if ( $Type -eq " OtherBinaries " ) {
2018-09-14 15:54:20 +02:00
" ` [ $( $YamlObject . Name ) ` ] ` ( $Type / $( $YamlObject . Name ) .md ` ) " | Add-Content $Outfile
2018-09-14 15:48:52 +02:00
}
if ( $Type -eq " OtherMSBinaries " ) {
2018-09-14 15:54:20 +02:00
" ` [ $( $YamlObject . Name ) ` ] ` ( $Type / $( $YamlObject . Name ) .md ` ) " | Add-Content $Outfile
2018-09-14 15:48:52 +02:00
}
if ( $Type -eq " OtherScripts " ) {
2018-09-14 15:54:20 +02:00
" ` [ $( $YamlObject . Name ) ` ] ` ( $Type / $( $YamlObject . Name ) .md ` ) " | Add-Content $Outfile
2018-09-14 15:48:52 +02:00
}
#"" | Add-Content $Outfile
}
End
{
}
}
function New-MainIndex
{
[ CmdletBinding ( ) ]
Param
(
[ Parameter ( Mandatory = $true ) ]
[ String ]
$Outfile ,
[ Parameter ( Mandatory = $true ) ]
[ String ]
$Type
)
Begin
{
}
Process
{
if ( $Type -eq " OSBinaries " ) {
" ` # LOLBins - Living Off The Land Binaries " | Add-Content $Outfile
" Please contribute and do point out errors or resources I have forgotten. If you are missing from the acknowledgement, please let me know (I did not forget anyone on purpose). " | Add-Content $Outfile
" " | Add-Content $Outfile
" ` # OS BINARIES " | Add-Content $Outfile
}
if ( $Type -eq " OtherMSBinaries " ) {
" " | Add-content $Outfile
" " | Add-content $Outfile
" " | Add-content $Outfile
" ` # OTHER MICROSOFT SIGNED BINARIES " | Add-Content $Outfile
}
if ( $Type -eq " OtherBinaries " ) {
" " | Add-content $Outfile
" " | Add-content $Outfile
" " | Add-content $Outfile
" ` # OTHER NON MICROSOFT BINARIES " | Add-Content $Outfile
}
if ( $Type -eq " OSScripts " ) {
" ` # LOLScripts - Living Off The Land Scripts " | Add-Content $Outfile
" Please contribute and do point out errors or resources I have forgotten. If you are missing from the acknowledgement, please let me know (I did not forget anyone on purpose). " | Add-Content $Outfile
" " | Add-Content $Outfile
" ` # OS SCRIPTS " | Add-Content $Outfile
}
if ( $Type -eq " OtherScripts " ) {
" " | Add-content $Outfile
" " | Add-content $Outfile
" " | Add-content $Outfile
" ` # OTHER NON MICROSOFT SCRIPTS " | Add-Content $Outfile
}
if ( $Type -eq " OSLibraries " ) {
" ` # LOLLibs - Living Off The Land Libraries " | Add-Content $Outfile
" Please contribute and do point out errors or resources I have forgotten. If you are missing from the acknowledgement, please let me know (I did not forget anyone on purpose). " | Add-Content $Outfile
" " | Add-Content $Outfile
" ` # OS LIBRARIES " | Add-Content $Outfile
}
}
End
{
}
}
function Invoke-GenerateMD
{
[ CmdletBinding ( ) ]
Param
(
[ Parameter ( Mandatory = $true ) ]
[ String ]
$Ymlpath ,
[ Parameter ( Mandatory = $true ) ]
[ String ]
$Outpath ,
[ Parameter ( Mandatory = $true ) ]
[ String ]
$indexfile
)
Begin
{
}
Process
{
#Initialize index files
New-MainIndex -Type $ ( $Outpath . Split ( " \ " ) [ -1 ] ) -Outfile $indexfile
# Read yaml files
$bins = @ ( )
cd
get-childitem -Path $Ymlpath -File | foreach {
Write-Verbose " Add yamls to array "
write-verbose $_
[ string[] ] $fileContent = Get-Content $_ . FullName
$content = ''
foreach ( $line in $fileContent ) { $content = $content + " `n " + $line }
$yaml = ConvertFrom-YAML $content
$bins + = $yaml
}
$bins | foreach {
Write-Verbose " Converting files to yaml "
write-verbose " $( $_ . name ) "
Convert-YamlToMD -YamlObject $_ -Outfile " $Outpath \ $( $_ . name ) .md "
Add-MainIndex -YamlObject $_ -Outfile $indexfile -Type $ ( $Outpath . Split ( " \ " ) [ -1 ] )
}
}
End
{
}
}
#Generate the stuff!
#Bins
Invoke-GenerateMD -YmlPath " $mainpath \yml\OSBinaries " -Outpath " $mainpath \OSBinaries " -indexfile " $mainpath \LOLBins.md " -Verbose
Invoke-GenerateMD -YmlPath " $mainpath \yml\OtherMSBinaries " -Outpath " $mainpath \OtherMSBinaries " -indexfile " $mainpath \LOLBins.md " -Verbose
Invoke-GenerateMD -YmlPath " $mainpath \yml\OtherBinaries " -Outpath " $mainpath \OtherBinaries " -indexfile " $mainpath \LOLBins.md " -Verbose
#Scripts
Invoke-GenerateMD -YmlPath " $mainpath \yml\OSScripts " -Outpath " $mainpath \OSSCripts " -indexfile " $mainpath \LOLScripts.md " -Verbose
Invoke-GenerateMD -YmlPath " $mainpath \yml\OtherScripts " -Outpath " $mainpath \OtherScripts " -indexfile " $mainpath \LOLScripts.md " -Verbose
#Libs
Invoke-GenerateMD -YmlPath " $mainpath \yml\OSLibraries " -Outpath " $mainpath \OSLibraries " -indexfile " $mainpath \LOLLibs.md " -Verbose