Hallo allemaal, ik heb hulp nodig om de API's te begrijpen, ik heb inderdaad een leuke kleine code gemaakt, maar deze wil niet starten. Hier is de foutmelding:
Hier is het script:
$function Get-SWFileProperties {
param(
[tekenreeks]$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."
}
Voorbeeld van gebruik
Get-SWFileProperties -directoryPath " F:\Machine_3D\BDD "
Dit is wat hij in detail doet:
- Controle van de ImportExcel-module: Het script begint met het controleren of de ImportExcel PowerShell-module beschikbaar is. Deze module is nodig om Excel-bestanden te maken en te manipuleren zonder dat Excel op de computer hoeft te zijn geïnstalleerd. Als de module niet wordt gevonden, probeert deze te installeren. Deze module wordt gebruikt om de verzamelde gegevens te exporteren naar een Excel-bestand.
- Voorbereiding van het Excel-uitvoerbestand: Een Excel-bestandspad (SolidWorks_Properties.xlsx) wordt geconstrueerd met behulp van het mappad dat als parameter is opgegeven. Dit bestand wordt gebruikt om de eigenschappen op te slaan die uit de SolidWorks-bestanden zijn geëxtraheerd.
- Initialisatie van SolidWorks-toepassing: Het script maakt een exemplaar van de SolidWorks-toepassing met behulp van COM Automation (Component Object Model). Dit exemplaar wordt gebruikt om SolidWorks-bestanden te openen en hun eigenschappen te extraheren. De SolidWorks-instantie is geconfigureerd om niet-zichtbaar te zijn ($SolidWorks.Visible = $false), waardoor het script op de achtergrond kan worden uitgevoerd zonder de SolidWorks-gebruikersinterface te openen.
- SolidWorks File Browsing: Het script zoekt in de opgegeven map naar alle bestanden met extensies. sldprt (onderdelen), .slddrw (tekeningen) en .sldasm (samenstellingen), inclusief alle submappen (optie -Recurse).
- Eigenschappen uitpakken en opslaan: Voor elk gevonden bestand bepaalt het script het type (onderdeel, tekening of assemblage) en gebruikt het SolidWorks om het stil te openen. Vervolgens worden de aangepaste eigenschappen uit het geopende bestand geëxtraheerd met behulp van de CustomPropertyManager. Eigenschapsnamen en -waarden worden opgeslagen in een $data object.
- De gegevens exporteren naar Excel: Na verwerking van alle bestanden worden de verzamelde gegevens geëxporteerd naar het Excel-bestand dat in stap 2 is voorbereid, met behulp van de module ImportExcel. Elk item bevat het pad van het bestand en de aangepaste eigenschappen.
- Opschonen: Aan het einde van de uitvoering wordt de SolidWorks-toepassing gesloten ($SolidWorks.ExitApp()) en geeft het script een bericht weer dat het aantal verwerkte bestanden aangeeft.
Heb je enig idee waar het probleem vandaan zou kunnen komen?