403Webshell
Server IP : 123.56.80.60  /  Your IP : 216.73.216.78
Web Server : Apache/2.4.54 (Win32) OpenSSL/1.1.1s PHP/7.4.33 mod_fcgid/2.3.10-dev
System : Windows NT iZhx3sob14hnz7Z 10.0 build 14393 (Windows Server 2016) i586
User : SYSTEM ( 0)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /Windows/diagnostics/system/Speech/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /Windows/diagnostics/system/Speech//CL_RTF.ps1
# Copyright © 2009, Microsoft Corporation. All rights reserved.

# Functions
# 
# Build-RTFData:		Takes a Header and Body and wraps it into a string representing the complete file	
# Create-RTFHeader:		Builds an RTF header with overridable default values
# Create-RTFURL:		Builds an RTF URL with a link and a link name
# Insert-RTFURLs:       Uses [URL] tag to convert URLs in text
# Escape-RTF:			Converts international characters to RTF text by optionally adding backslashes etc.
# Escape-RTFProcess:	Helper Function for Escape-RTF
# Add-RTFText:			Insert paragraph text into the RTF
# Create-RTFList:		Takes a list of objects and formats it into an RTF bulleted list, with optional
#						HeaderText, OrderBy, and LocalizationTbl parameters
# Create-RTFSubItem:	Helper function for Create-RTFList
# File-ToHexLines:		Creates a string output of a file in hexidecimal.  Optional ByteWidth parameter
#						specifies number of bytes per line.
# 
# Example:
# 
#	$header = Create-RTFHeader -CharSet 'ansi'
#	$body	= Create-RTFList $myProducts 'ProductName' -HeaderText 'Product List'
#   $body  += Add-RTFText $blocktext
#	$output = Build-RTFData $header $body


function Build-RTFData([string]$RTFHeader, [string]$RTFBody)
{
	[string]$FullText = '{' + $Header + "`r`n" + $RTFBody + "`r`n" + '}'
	return $FullText
}

function Create-RTFHeader
{
	Param(	$CharSet		= 'ansi',
			$MajorVersion	= '1',
			$CodePage		= '1252',
			$DefaultFont	= '0',
			$From			= 'Text',
			$HTMLVer		= '1',
			$Language		= '1033',
			$Language_EA	= '1033',
			$Language_ME	= '1033',
			$Generator		= 'Powershell Script RTFGEN 0.1' 
	)
	
	#RTF Tag / Version
	[string]$Header = '\rtf' + $MajorVersion

	#Character Set
	switch ($CharSet.ToLower())
	{
		'ansi'		{$Header += '\ansi\ansicpg' + $CodePage	}
		'mac'		{$Header += '\mac\ansicpg' 	+ $CodePage	}
		'pc' 		{$Header += '\pc\ansicpg' 	+ $CodePage	}
		'pca' 		{$Header += '\pca\ansicpg' 	+ $CodePage	}
		'fbidis' 	{$Header += '\fbdis'					}
		default 	{$Header += '\ansi\ansicpg' + $CodePage	}
	}

	#RTF Source
	if($From)
	{
		switch ($From.ToLower())
		{
			'text'		{$Header += '\fromtext'				}
			'html'		{$Header += '\fromhtml' + $HTMLVer	}
			default		{}
		}
	}
	
	#Language Info
	
	$Header += '\deflang' 	+ $Language
	$Header += '\deflangfe' + $Language_EA
	$Header += '\adeflang' 	+ $Language_ME
	
	#Font Block
	$Header += "`r`n" + '{\fonttbl{\f0\fnil\fcharset0 Segoe UI;}{\f1\fnil\fcharset0 Segoe UI;}{\f2\fnil\fcharset0 Calibri;}{\f3\fnil\fcharset2 Symbol;}}'

	#Generator
	$Header += "`r`n" + '{\*\generator ' + $Generator + ' ;}'
	return $Header
}

# Escape-RTF can handle strings and arrays of strings.  Can be used as a Pipe-Line.
# In addition to Escaping illegal characters Escape-RTF supports Bold, Italic and Underline
# thrugh [b][/b],[i][/i] and [u][/u] patterns in the text
function Escape-RTF
{
	param([string]$Source)
	
	Begin
	{

	}
	
	Process
	{
		if($_) { Escape-RTFProcess $_ }
	}
	
	End
	{
		if($Source) 
		{ 
			$Source | Foreach-Object { Escape-RTFProcess $_ } 
		}
	}
}

function Create-RTFURL([string]$URL, [string]$URLText)
{
	$output = '{\field{\*\fldinst{HYPERLINK "' + $URL + '"}}{\fldrslt{\ul\cf1 ' + $URLText + '}}}'
	return $output
}

function Insert-RTFURLs
{
	param( 	[string]$InString,
			[string]$Start 	= '[URL]',
			[string]$End 	= '[/URL]'		)
			
	[String[]]$arrOutput	= @()
	[int]$index 			= $InString.IndexOf($Start) + $Start.Length
	While ($index -ne $Start.Length - 1)
	{
		[string]$StartString	= $InString.Substring(0, ($index - $Start.Length) )
		[string]$EndString		= $InString.Substring(($Instring.IndexOf($End, $index) + $End.Length), ($InString.Length - ($inString.IndexOf($End, $index) + $End.Length)) )
		[string]$BetweenText	= $InString.Substring($index, $InString.IndexOf($End, $index) - $index)
		[string]$Insert			=  Create-RTFURL $BetweenText $BetweenText
		$InString				= $StartString + $Insert + $EndString
		$index = $InString.IndexOf($Start, $index) + $Start.Length
	}
	
	return $inString
}



function Escape-RTFProcess([string]$inString)
{
	if ($inString -match '^[a-z0-9\-/ ]*$') { return $inString }
			
	$Output = new-object system.text.stringbuilder
	$arrSource = [Char[]]$inString
	
	foreach ($character in $arrSource)
	{
		if ($character -gt 127)
		{
			$Output.append('\u')				| Out-Null
			$Output.append([uint32]$character)	| Out-Null
			$Output.append('?')					| Out-Null
		}
		elseif (('\', '{', '}') -eq $character)
		{
			$Output.append('\')					| Out-Null
			$Output.append($character)			| Out-Null
		}
		else
		{
			$Output.append($character)			| Out-Null
		}
	}
	
	[string]$OutString = $Output.ToString()
	$OutString = Insert-RTFURLs $OutString
	
	if ($OutString -match '\[.*\]')
	{
		$OutString = $OutString.Replace('[b]', '\b '	)
		$OutString = $OutString.Replace('[B]', '\b '	)
		$OutString = $OutString.Replace('[/b]', '\b0 '	)
		$OutString = $OutString.Replace('[/B]', '\b0 '	)

		$OutString = $OutString.Replace('[u]', '\ul '	)
		$OutString = $OutString.Replace('[U]', '\ul '	)
		$OutString = $OutString.Replace('[/u]', '\ul0 '	)
		$OutString = $OutString.Replace('[/U]', '\ul0 '	)

		$OutString = $OutString.Replace('[i]', '\i '	)
		$OutString = $OutString.Replace('[i]', '\i '	)
		$OutString = $OutString.Replace('[/i]', '\i0 '	)
		$OutString = $OutString.Replace('[/I]', '\i0 '	)
	}
	
	return $OutString
	
}

function Add-RTFText
{
	param(	[string]$Source,
			[int]$Fontsize = 9,
			[switch]$IgnoreNewLines = $false,
			[switch]$bold = $false,
			[switch]$italic = $false
	)
	$RTFFontSize = $Fontsize * 2

	[string]$Output = ''
	[string]$boldstart = ''
	[string]$boldend = ''
	[string]$italstart = ''
	[string]$italend = ''

	if($bold)
	{
		[string]$boldstart = '\b'
		[string]$boldend = '\b0'	
	}

	if($italic)
	{
		[string]$italstart = '\i'
		[string]$italend = '\i0'	
	}

	if($IgnoreNewLines)
	{
		$Output += '\pard' + $italstart + $boldstart + '\f0\fs' + $RTFFontSize + ' ' + (Escape-RTF $string.trim()) + $boldend + $italend  + '\par'
	}
	else
	{
		$arrSource = $Source.Split("`n")
		foreach( $string in $arrSource) 
		{ 
			$Output += '\pard' + $italstart + $boldstart + '\f0\fs' + $RTFFontSize + ' ' + (Escape-RTF $string.trim()) + $boldend + $italend + '\par'
		}
	}
	
	return $Output	
}

# Create-RTFList
# This function builds a 2-Level RTF formatted list from an array of objects and NoteProperty fields.
# A Note Property has a Name and Value... which are handled different ways by the function
# 
# $KeyName:		This is the Name of the NoteProperty in each object which will comprise the first
#				level of the bulleted list.  The Key Name is never displayed, however its value is.
# 
# $HeaderText:	If this is entered, a header at the top of the RTF list is displayed
# 
# $OrderBy:		This array is an in order list of the note-property names that will be displated.  Any
#				NoteProperties not listed in this array will not be displayed, so it can be used to 
#				both order the output and exclude unwanted data.  If not specified all NoteProperties
#				will be displayed in no specific order as data is stored in a Hash Table
# 
# $LocalizationTbl: Use this hash table to change the display value of NoteProperty names to a localized
#					value.  Any omissions will simply result in the display of a non-localized name.
function Create-RTFList
{
	param	(	
				[array]$objArray, 
				[string]$KeyName,
				[string]$HeaderText = $null,
				[string[]]$OrderBy = $null,
				[hashtable]$LocalizationTbl = $null
			)

	if ($objArray -eq $null) { return }

	[string]$myData = ''
	
	if(!([System.String]::IsNullOrEmpty($HeaderText)))
	{
		$myData += '\viewkind4\uc1\pard\sl276\slmult1\lang9\f0\fs36 ' + (Escape-RTF $HeaderText) + '\par' + "`r`n"
	}
	
	foreach($object in $objArray)
	{
		$ItemName = ''
		[hashtable]$ListItems = @{}
		
		# Gather Data
		[array]$properties = Get-Member -InputObject $object -MemberType NoteProperty

		if ($properties -ne $null)
		{
			foreach($property in $properties)
			{	
				if($property.Name -ieq $KeyName)
				{
					$ItemName = $object.$($property.Name)
				}
				else { $ListItems.Add($property.Name, $object.$($property.Name)) }
			}
		}
		else { break }
		
		# Output Header
		$myData += "\pard\sl240\slmult1\b\f1\fs20 " + (Escape-RTF $ItemName) + '\par' + "`r`n"
		
		#Formatting at begining of list
		$myData += "\pard{\*\pn\pnlvlblt\pnf3\pnindent0{\pntxtb\'B7}}\fi-360\li720\sl240\slmult1\b0\f2"
		
		# Output List: -OrderBy Work Flow
		if($OrderBy -ne $null)
		{
			foreach($entry in $OrderBy)
			{
				if($ListItems.ContainsKey($entry))
				{
					[string]$ListItemName = $ListItems.Keys | Where-Object { $_ -ieq $entry }
					if($LocalizationTbl -ne $null) 
					{ 
						if($LocalizationTbl.Item($entry) -ne $null) { $ListItemName = $LocalizationTbl.Item($entry) }
					}
					
					# Only do something if the key has a name
					if(!([System.String]::IsNullOrEmpty($ListItemName))) 
					{
						$myData += Create-RTFSubItem $ListItemName $ListItems[$entry]					
					}
				}
			}
		}
		# Output List: Non -OrderBy Work Flow
		else
		{
			$enumList = $ListItems.GetEnumerator()
			foreach ($item in $enumList)
			{
				[string]$ListItemName = $item.Key

				if($LocalizationTbl -ne $null) 
				{ 
					if($LocalizationTbl.Item($item.Key) -ne $null) { $ListItemName = $LocalizationTbl.Item($item.Key) }
				}
				
				# Only do something if the key has a name
				if(!([System.String]::IsNullOrEmpty($ListItemName))) 
				{
					$myData += Create-RTFSubItem $ListItemName $item.Value
				}
			}
		}
	}
	
	$myData += '\pard\par'
	return $myData
}

# Helper Funciton for Create-RTFList
function Create-RTFSubItem([string]$Name, $Value)
{
	[string]$output = ''
	
	foreach($item in $Value)
	{
		if($item -isnot [string]) { $item = $item.ToString() }
		
		# Format the list item depending on whether or not it has a value pair 
		if([System.String]::IsNullOrEmpty($item))
		{
			$output += "\fs18{\pntext\f3\'B7\tab}" + (Escape-RTF $Name) + '\fs20\par' + "`r`n"					
		}
		else
		{
			$output += "\fs18{\pntext\f3\'B7\tab}\b " + (Escape-RTF $Name) + ':\b0  ' + (Escape-RTF $item) + '\fs20\par' + "`r`n"
		}
	}
	
	return $output
}

function File-ToHexLines
{
	param	(	[string]$path, 
				[int]$ByteWidth = 40
			)
			
	if(!(Test-Path $path) -or $ByteWidth -lt 0 ){ return }

	[string]$output = ''
   
    [Byte[]]$data = Get-Content -ReadCount 0 -Path $path -Encoding Byte
	[int] $i = 0
	
	if($ByteWidth -gt 0)
	{
		for($i; $i -lt ($data.Count - $ByteWidth); $i = $i + $ByteWidth)
		{
			[string]$line = ''
			for($j = 0 ; $j -lt $ByteWidth;$j++)
			{
				[string]$thisbyte = [convert]::ToString($data[$i+$j], 16).PadLeft(2,'0')
				$line += $thisbyte
			}
			$line += "`r`n"
			$output += $line
		}
	}
    for($i; $i -lt $data.Count ; $i++) { $output += [convert]::ToString($data[$i], 16).PadLeft(2,'0') }
   
    return $output
}

function Add-RTFImage([string]$Path, [string]$Type)
{

	$myData = '{\*\shppict{\pict'
	
	switch ($Type.ToLower())
	{
		'emf'		{$myData += '\emfblip'}
		'png'		{$myData += '\pngblip'}
		'jpg'		{$myData += '\jpegblip'}
		'jpeg'		{$myData += '\jpegblip'}
		'mac'		{$myData += '\macpic'}
		'pict'		{$myData += '\macpict'}		
		default 	{$myData += '\jpegblip'}
	}
	
	#pic size 
	$myData += "`r`n" + (File-ToHexLines $path -ByteWidth 64) + "}}`r`n"

	return $myData
}

function Select-Between([string]$InString, [string]$Start, [string]$End)
{
	[String[]]$arrOutput	= @()
	[int]$index 			= $InString.IndexOf($Start) + $Start.Length
	
	While ($index -ne $Start.Length -1)
	{
		$arrOutput		+=	$InString.Substring($index, $InString.IndexOf($End, $index) - $index)
		$index			=	$InString.IndexOf($Start, $index) + $Start.Length
	}
	
	return $arrOutput
}


Youez - 2016 - github.com/yon3zu
LinuXploit