Just for the record I will share my solution that I've got from this answer.
I point in my question that I had also a problem with long path, a problem that I've solved with New-PSDrive, a function that let you map a temporary drive. I've only mapped a temporary drive on the working folder where I unzip stuff.
function Unzip-File($file) {
$path = [io.path]::GetDirectoryName($file.FullName)
$filename = [io.path]::GetFileNameWithoutExtension($file.FullName)
$targetPath = Join-Path $path $filename;
# Check if the directory exists.
if(Test-Path $targetPath) {
# Remove the directory before unzipping.
Remove-Item $targetPath -recurse
}
# Unzip file.
Add-Type -A System.IO.Compression.FileSystem
[IO.Compression.ZipFile]::ExtractToDirectory($file, $targetPath)
}