2015-06-12 5 views
0

Я хочу создать файл cab папки и ее файлы с помощью powershell. Я пробовал сценарий ниже, но он дает мне ошибку.Создайте файл cab из папки powershell

Param(
    $filepath = "D:\Script", 
    $path = "D:\Script\aCab.cab", 
    [switch]$debug 
) 
Function New-Cab($path,$files) 
{ 
$makecab = "makecab.makecab" 
Write-Debug "Creating Cab path is: $path" 
$cab = New-Object -ComObject $makecab 
if(!$?) { $(Throw "unable to create $makecab object")} 
$cab.CreateCab($path,$false,$false,$false) 
ForEach ($file in $files) 
{ 
$file = $file.fullname.tostring() 
$fileName = Split-Path -path $file -leaf 
Write-Debug "Adding from $file" 
Write-Debug "File name is $fileName" 
$cab.AddFile($file,$filename) 
} 
Write-Debug "Closing cab $path" 
$cab.CloseCab() 
} #end New-Cab 

# *** entry point to script *** 
if($debug) {$DebugPreference = "continue"} 
$files = Get-ChildItem -path $filePath | Where-Object { !$_.psiscontainer } 
New-Cab -path $path -files $files 

Ошибка:

New-Object : Retrieving the COM class factory for component with CLSID {00000000-0000-0000-0000-000000000000} failed due to the following error: 80040154 Class not 
registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). 
unable to create makecab.makecab object 

At D:\SCCM Script\Cabmaker.ps1:11 char:14 

Я пытался скачать Makecab.exe из Micorosoft но не получает загружены. MakeCab.exe Link

Может кто-нибудь посоветует мне, что я делаю неправильно?

ответ

1

вы можете проверить, если в этом списке ComObject присутствует:

Get-ChildItem HKLM:\Software\Classes -ErrorAction SilentlyContinue | Where-Object { 
    $_.PSChildName -match '^\w+\.\w+$' -and (Test-Path -Path "$($_.PSPath)\CLSID") 
} | Select-Object -ExpandProperty PSChildName 

Ошибка вы дайте мне подумать, что это не Registerd.

Кажется, что команда MAKECAB.EXE присутствует из окон 2000 в папке c:\windows\system32. Here ссылка на документацию

+0

Я проверил и makecab.exe находится на моей машине. Однако, когда я запускаю код выше, он не показывает классы makecab.exe. Нужно ли что-либо сделать для правильной загрузки. – Ironic

+0

@ 404 Я не уверен, но comobject установлен только с sdk. Microsoft заканчивает публикацию sdk, и я не знаю почему. Почему вы не используете makecab.exe в своем скрипте? –

+0

Я не нашел ничего подходящего или пример кода для makecab.exe – Ironic

Смежные вопросы