Witam wszystkich, potrzebuję pomocy, aby zrozumieć interfejsy API, rzeczywiście stworzyłem ładny mały kod, ale nie chce się uruchomić. Oto komunikat o błędzie:
Oto scenariusz:
$function Get-SWFileProperties {
param(
[ciąg]$directoryPath
)
if (-not (Get-Module -ListAvailable -Name ImportExcel)) {
    Install-Module -Name ImportExcel -Scope CurrentUser -AllowClobber -Force
}
$excelFile = Join-Path -Path $directoryPath -ChildPath "SolidWorks_Properties.xlsx"
$SolidWorks = New-Object -ComObject SldWorks.Application
$SolidWorks.Visible = $false
$swDocumentTypes = New-Object -ComObject SolidWorks.Interop.swconst.swDocumentTypes_e
$swOpenDocOptions = New-Object -ComObject SolidWorks.Interop.swconst.swOpenDocOptions_e
$swOpenDocOptions_Silent = $swOpenDocOptions.swOpenDocOptions_Silent
$data = @()
$files = Get-ChildItem -Path $directoryPath -Include *.sldprt, *.slddrw, *.sldasm -Recurse
$totalFiles = $files.Count
$processedFiles = 0
foreach ($file in $files) {
    $filePath = $file.FullName
    $fileType = $null
    switch ($file.Extension.ToLower()) {
        ".sldprt" { $fileType = $swDocumentTypes.swDocPART }
        ".sldasm" { $fileType = $swDocumentTypes.swDocASSEMBLY }
        ".slddrw" { $fileType = $swDocumentTypes.swDocDRAWING }
    }
    $doc = $SolidWorks.OpenDoc6($filePath, $fileType, $swOpenDocOptions_Silent, "", [ref] 0, [ref] 0)
    if ($doc -ne $null) {
        $customPropMgr = $doc.Extension.CustomPropertyManager("")
        $properties = @{}
        $names = @()
        $customPropMgr.GetNames([ref]$names)
        foreach ($name in $names) {
            $value = $null
            $customPropMgr.Get4($name, $false, [ref]$value, [ref]$null)
            $properties[$name] = $value
        }
        $properties['FilePath'] = $filePath
        $data += New-Object PSObject -Property $properties
        $SolidWorks.CloseDoc($doc.GetTitle())
    }
    $processedFiles++
    Write-Progress -Activity "Processing SolidWorks Files" -Status "$processedFiles out of $totalFiles processed" -PercentComplete (($processedFiles / $totalFiles) * 100)
}
$data | Export-Excel -Path $excelFile -WorksheetName "Properties" -AutoSize -TableName "SWProperties"
$SolidWorks.ExitApp()
Write-Progress -Activity "Processing SolidWorks Files" -Completed
Write-Host "Processing complete. $processedFiles files processed."
}
Przykład zastosowania
Get-SWFileProperties -directoryPath " F:\Machine_3D\BDD "
Oto, co robi w szczegółach:
- Sprawdzanie modułu ImportExcel: Skrypt rozpoczyna się od sprawdzenia, czy moduł ImportExcel PowerShell jest dostępny. Ten moduł jest wymagany do tworzenia i manipulowania plikami Excela bez konieczności instalowania programu Excel na komputerze. Jeśli moduł nie zostanie znaleziony, spróbuje go zainstalować. Moduł ten służy do eksportu zebranych danych do pliku Excel.
 - Przygotowanie wyjściowego pliku Excel: Ścieżka do pliku Excel (SolidWorks_Properties.xlsx) jest tworzona przy użyciu ścieżki folderu podanej jako parametr. Plik ten będzie używany do przechowywania właściwości wyodrębnionych z plików SolidWorks.
 - Inicjalizacja aplikacji SolidWorks: Skrypt tworzy instancję aplikacji SolidWorks przy użyciu COM Automation (Component Object Model). To wystąpienie jest używane do otwierania plików SolidWorks i wyodrębniania ich właściwości. Instancja SolidWorks jest skonfigurowana jako niewidoczna ($SolidWorks.Visible = $false), co pozwala skryptowi działać w tle bez otwierania interfejsu użytkownika SolidWorks.
 - Przeglądanie plików SolidWorks: Skrypt przeszukuje określony folder w poszukiwaniu wszystkich plików z rozszerzeniami. sldprt (części), .slddrw (rysunki) i .sldasm (złożenia), w tym wszystkie podfoldery (opcja -Recurse).
 - Wyodrębnij i zapisz właściwości: Dla każdego znalezionego pliku skrypt określa jego typ (część, rysunek lub złożenie) i używa SolidWorks do otwarcia go w trybie cichym. Następnie wyodrębnia właściwości niestandardowe z otwartego pliku za pomocą elementu CustomPropertyManager. Nazwy właściwości i wartości są przechowywane w obiekcie $data.
 - Eksport danych do Excela: Po przetworzeniu wszystkich plików, zebrane dane są eksportowane do pliku Excel przygotowanego w kroku 2, za pomocą modułu ImportExcel. Każdy wpis będzie zawierał ścieżkę do pliku i jego właściwości niestandardowe.
 - Oczyszczanie: Na końcu przebiegu, aplikacja SolidWorks jest zamykana ($SolidWorks.ExitApp()), a skrypt wyświetla komunikat wskazujący liczbę przetworzonych plików.
 
Czy masz pojęcie, skąd może wynikać problem?
