Hi,
I'm unable to get this script to work, would someone be able to take a peek at it? Raf Snijders maybe? :D
This gist is, I'm trying to download the latest version of all map objects from my repo modified after 2019. I need to do some analysis on our doc set. Let me know if any more info is needed.
$ishSession = New-IshSession -WsBaseUrl "https://*******/ISHWS" -IshUserName "******" -IshPassword "******"
# Define MetadataFields for status and FDOCUMENTS
$statusFields = Set-IshMetadataFilterField -IshSession $ishSession -Name "FSTATUS" -Level "Lng" -ValueType "Element" -FilterOperator "Equal" -Value "VSTATUSRELEASED"
$cardtypeFields = Set-IshMetadataFilterField -IshSession $ishSession -Name "FMASTERTYPE" -Level "Logical" -ValueType "Value" -FilterOperator "Equal" -Value "Map"
$modifiedOn = Set-IshMetadataFilterField -Level Lng -Name MODIFIED-ON -FilterOperator GreaterThanOrEqual -Value "01/01/2019"
$docLang = Set-IshMetadataFilterField -Level Lng -Name DOC-LANGUAGE -FilterOperator Equal -Value en
# Merge metadatafields into an array
$metadataFields = $statusFields, $cardtypeFields, $modifiedOn, $docLang
# Get unique logical objects
$logicalIds = Find-IshDocumentObj -IshSession $ishSession -MetadataFilter $metadataFields | Select-Object -Property IshRef -Unique
# Define the directory where files will be downloaded
$directoryPath = "D:\InfoShare\Data\Publish\ExportedMaps"
# Create the directory if it does not exist
if (!(Test-Path -Path $directoryPath)) {
New-Item -ItemType Directory -Path $directoryPath
}
# Define the metadata to request
$requestedMetadata = Set-IshRequestedMetadataField -IshSession $ishSession -Name "VERSION" -Level Version -ValueType Value
# Total object counter
$totalObjects = 0
# For each logical object, get the latest version
foreach($logicalId in $logicalIds) {
$totalObjects++
try {
$documentVersions = Get-IshDocumentObj -IshSession $ishSession -LogicalId $logicalId.IshRef -RequestedMetadata $requestedMetadata
# Check if Get-IshDocumentObj returned any data
if ($documentVersions) {
# Validate if all retrieved documents have a VERSION field
$filteredVersions = $documentVersions | Where-Object { $_.IshFields.Field("VERSION") -ne $null }
if($filteredVersions){
$latestVersion = $filteredVersions |
Sort-Object -Property { $_.IshFields.GetFieldValue('VERSION', 'Version', 'value') } | Select-Object -Last 1
# Check if VERSION field is not null
if ($latestVersion.IshFields.Field("VERSION")) {
# Uncomment the following line when you're ready to download files
#Get-IshDocumentObjData -IshSession $ishSession -LogicalId $latestVersion.IshRef.IshRef -Version $latestVersion.IshFields.Field("VERSION").ElementValue -Language $latestVersion.IshRef.IshLng -OutputPath $directoryPath -Force
Write-Host "`nDownloaded file: $directoryPath\$($logicalId.IshRef)_$($latestVersion.IshFields.GetFieldValue('VERSION', 'Version', 'value')).xml"
} else {
throw "Error: VERSION field is missing or null in IshDocumentObj with LogicalId $logicalId.IshRef"
}
} else {
throw "Error: No documents with a VERSION field were found for LogicalId $logicalId.IshRef"
}
} else {
throw "Error: No documents found with LogicalId $logicalId.IshRef"
}
}
catch {
Write-Host "`nError processing file: $logicalId.IshRef"
Write-Host "`nError details: $($_.Exception.Message)"
}
}
# Write the total number of files downloaded
Write-Host "`nProcessed $totalObjects files in total."
thanks,
Charlie

Translate