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?