Bonjour à tous, j’ai besoin d’aide pour comprendre les API, en effet j’ai créé un petit code sympa mais il ne veut pas se lancer. Voici le message d’erreur :
Voici le script :
$function Get-SWFileProperties {
param(
[string]$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."
}
Exemple d’utilisation
Get-SWFileProperties -directoryPath « F:\Machine_3D\BDD »
Voici ce qu’il fait en détaille :
- Vérification du module ImportExcel : Le script commence par vérifier si le module PowerShell ImportExcel est disponible. Ce module est nécessaire pour créer et manipuler des fichiers Excel sans avoir besoin d’Excel installé sur la machine. Si le module n’est pas trouvé, il tente de l’installer. Ce module est utilisé pour exporter les données collectées vers un fichier Excel.
- Préparation du fichier Excel de sortie : Un chemin de fichier Excel (SolidWorks_Properties.xlsx) est construit en utilisant le chemin du dossier fourni comme paramètre. Ce fichier servira à stocker les propriétés extraites des fichiers SolidWorks.
- Initialisation de l’application SolidWorks : Le script crée une instance de l’application SolidWorks en utilisant COM Automation (Component Object Model). Cette instance est utilisée pour ouvrir les fichiers SolidWorks et extraire leurs propriétés. L’instance de SolidWorks est configurée pour ne pas être visible ($SolidWorks.Visible = $false), ce qui permet au script de s’exécuter en arrière-plan sans ouvrir l’interface utilisateur de SolidWorks.
- Parcours des fichiers SolidWorks : Le script recherche dans le dossier spécifié tous les fichiers avec les extensions. sldprt (pièces), .slddrw (dessins) et .sldasm (assemblages), y compris dans tous les sous-dossiers (option -Recurse).
- Extraction et stockage des propriétés : Pour chaque fichier trouvé, le script détermine son type (pièce, dessin ou assemblage) et utilise SolidWorks pour l’ouvrir en mode silencieux. Il extrait ensuite les propriétés personnalisées du fichier ouvert à l’aide du CustomPropertyManager. Les noms et valeurs des propriétés sont stockés dans un objet $data.
- Exportation des données vers Excel : Après avoir traité tous les fichiers, les données collectées sont exportées dans le fichier Excel préparé à l’étape 2, en utilisant le module ImportExcel. Chaque entrée contiendra le chemin du fichier et ses propriétés personnalisées.
- Nettoyage : À la fin de l’exécution, l’application SolidWorks est fermée ($SolidWorks.ExitApp()), et le script affiche un message indiquant le nombre de fichiers traités.
Avez-vous une idée d’où le problème peux venir ?