Я хочу, чтобы мой сценарий работал как в системе Win 7, так и в системе Win 10 для создания файлов zip или 7z.
В Win10 для создания zip-файла можно использовать способ Add-Type
.
Add-Type -assembly "system.io.compression.filesystem"
[io.compression.zipfile]::CreateFromDirectory($Source, $destination)
Однако на Win7 это не работает. Поэтому я просто меняю сценарий как:
cmd /c "C:\Program Files\7-Zip\7z.exe" a "D:\$folderName.7z" $source
Однако он работает, не гарантируется, что 7z.exe будет установлен под C:\Program Files\7-Zip
для каждого пользователя.
Поэтому мне было интересно, как я могу написать сценарий PowerShell, который можно использовать как в Win7, так и в Win10, без указания пути zip.exe
.
Вот один из способов проверить, установлен ли 7-Zip:
$sevenZip = Join-Path ([Environment]::GetFolderPath([Environment+SpecialFolder]::ProgramFiles)) "7-Zip\7z.exe"
if ( -not (Test-Path -LiteralPath $sevenZip) ) {
Write-Error "7-Zip is required." -Category ObjectNotFound
return # or exit, if you are in a script
}
# Call it this way:
# & $sevenZip arg1 [arg2 [...]]
Если возможно обновление до PowerShell 5, это просто: просто используйте командлет Сжать-Архив.
Если возможно, лучше всего будет перейти на PowerShell 5. В противном случае вы можете закодировать несколько попыток найти метод сжатия, доступный на машине. Если Add-Type не работает, попробуйте найти 7z.exe в
$Env:ProgramFiles
. Если не там, поищите в$Env:ProgramFile(x86)
Остальное ...