Hallo zusammen, ich brauche Hilfe, um die APIs zu verstehen, in der Tat habe ich einen netten kleinen Code erstellt, aber er will nicht starten. Hier ist die Fehlermeldung:
Hier ist das Skript:
$function Get-SWFileProperties {
param(
[Zeichenfolge]$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."
}
Anwendungsbeispiel
Get-SWFileProperties -directoryPath " F:\Machine_3D\BDD "
Hier ist, was er im Detail tut:
- Überprüfung des ImportExcel-Moduls: Das Skript beginnt mit der Überprüfung, ob das PowerShell-Modul ImportExcel verfügbar ist. Dieses Modul ist erforderlich, um Excel-Dateien zu erstellen und zu bearbeiten, ohne dass Excel auf dem Gerät installiert sein muss. Wenn das Modul nicht gefunden wird, wird versucht, es zu installieren. Dieses Modul wird verwendet, um die gesammelten Daten in eine Excel-Datei zu exportieren.
- Vorbereiten der Excel-Ausgabedatei: Ein Excel-Dateipfad (SolidWorks_Properties.xlsx) wird mit dem als Parameter angegebenen Ordnerpfad erstellt. Diese Datei wird verwendet, um die Eigenschaften zu speichern, die aus den SolidWorks Dateien extrahiert wurden.
- Initialisierung der SolidWorks Anwendung: Das Skript erstellt eine Instanz der SolidWorks Anwendung mithilfe der COM-Automatisierung (Component Object Model). Diese Instanz wird verwendet, um SolidWorks Dateien zu öffnen und ihre Eigenschaften zu extrahieren. Die SolidWorks Instanz ist so konfiguriert, dass sie nicht sichtbar ist ($SolidWorks.Visible = $false), wodurch das Skript im Hintergrund ausgeführt werden kann, ohne die SolidWorks Benutzeroberfläche zu öffnen.
- Durchsuchen von SolidWorks Dateien: Das Skript durchsucht den angegebenen Ordner nach allen Dateien mit Erweiterungen. sldprt (Teile), .slddrw (Zeichnungen) und .sldasm (Baugruppen), einschließlich aller Unterordner (Option -Recurse).
- Extrahieren und Speichern von Eigenschaften: Für jede gefundene Datei bestimmt das Skript ihren Typ (Teil, Zeichnung oder Baugruppe) und verwendet SolidWorks, um sie im Hintergrund zu öffnen. Anschließend werden die benutzerdefinierten Eigenschaften mithilfe des CustomPropertyManager aus der geöffneten Datei extrahiert. Eigenschaftsnamen und -werte werden in einem $data Objekt gespeichert.
- Exportieren der Daten nach Excel: Nach der Verarbeitung aller Dateien werden die gesammelten Daten mit dem ImportExcel-Modul in die Excel-Datei exportiert, die in Schritt 2 vorbereitet wurde. Jeder Eintrag enthält den Pfad der Datei und ihre benutzerdefinierten Eigenschaften.
- Bereinigung: Am Ende des Laufs wird die SolidWorks Anwendung geschlossen ($SolidWorks.ExitApp()), und das Skript zeigt eine Meldung an, die die Anzahl der verarbeiteten Dateien angibt.
Haben Sie eine Idee, woher das Problem kommen könnte?