Function UnpackRAR {
Param(
[String]$RARFileName,
[String]$DestPath
)
$Unrar = @"
$(Get-Content $PSScriptRoot\unrar.cs -Raw)
"@
If([IntPtr]::Size -eq 8) {
$Unrar = "#define x64" + [Environment]::NewLine + $Unrar
}
[IO.Directory]::SetCurrentDirectory($($PSScriptRoot))
Add-Type -TypeDefinition $Unrar -Language CSharp
$ArcHeader = New-Object Unrar+RARHeaderDataEx
$ArcData = New-Object Unrar+RAROpenArchiveDataEx
$ArcData.ArcName = $RARFileName
$ArcData.OpenMode = [Unrar]::RAR_OM_EXTRACT
$ArcData.CmtBuf = [String]::new([Char]" ", 65535)
$ArcData.CmtBufSize = 65535
$hArc = [Unrar]::RAROpenArchiveEx([Ref]$ArcData)
If(($hArc -eq $null) -or ($ArcData.OpenResult -ne [Unrar]::ERAR_SUCCESS)) {
Return
}
If($ArcData.CmtSize -gt 0) {
Write-Host "Comment in archive file: " $ArcData.CmtBuf
}
While([Unrar]::RARReadHeaderEx($hArc, [Ref]$ArcHeader) -eq [Unrar]::ERAR_SUCCESS) {
[Void][Unrar]::RARProcessFile($hArc, [Unrar]::RAR_EXTRACT, `
$DestPath, $null)
}
[Void][Unrar]::RARCloseArchive($hArc)
}
Function Main {
UnpackRAR -RARFileName "$($PSScriptRoot)\\Test.rar" `
-DestPath "C:\\Users\\Public\\Dummy"
}
Main