powershell получить содержимое - Autodesk Navisworks

Привет, я пытаюсь получить содержимое файла Autodesk Navisworks (NWD).

вот простая версия того, что я пытаюсь сделать -

$fileCont = Get-Content -Path $filePath
New-Item C:\Temp\tom2.nwd
Set-Content C:\Temp\tom2.nwd $fileCont

Чтобы доказать, что я могу успешно собрать содержимое файла navisworks..

хотя это простой рабочий процесс, и то, чего я пытаюсь достичь, важнее, спасибо, если я смогу понять этот бит, я знаю все остальное.

вот ошибка при попытке открыть C:\Temp\tom2.nwd

Сообщение об ошибке Navisworks при открытии файла


person TD123123123    schedule 01.12.2020    source источник
comment
Позвольте дать стандартный совет новичкам: если вы примете ответ, вы поможете будущим читателям, показав их, что решило вашу проблему. Чтобы принять ответ, нажмите на большой символ ✓ под большим числом слева от ответа (вы получите 2 очка репутации). Если у вас есть не менее 15 очков репутации, вы также можете проголосовать за другие полезные ответы (при желании также за принятый). Если ваша проблема еще не решена, отправьте отзыв или, если вы нашли решение самостоятельно, ответьте сами себе.   -  person mklement0    schedule 03.12.2020


Ответы (2)


По умолчанию как Get-Content, так и Set-Content работают только с текстом.

Для обработки необработанных байтовых данных, которые необходимы для обработки содержимого двоичного формата файла, такого как .nwd, необходимо использовать:

  • в Windows PowerShell: -Encoding Byte
  • в PowerShell [Core] v6+: -AsByteStream

Примечание. Если все байты помещаются в память сразу, вы можете значительно ускорить вызов Get-Content, добавив -Raw.

person mklement0    schedule 01.12.2020

вы правы, этот метод работал, но был очень медленным и непригодным для использования, но теперь я могу подтвердить это, следуя этот пост

я использовал следующий метод для сбора и размещения данных в файле.

  write-host "Creting object in bucket.."

$B_Key = ''
write-host "Bucket Key ="$B_Key

write-host "File Content being uploaded to bucket object"

$currentDir = Get-Location
$sourceFile = [System.IO.Path]::Combine($currentDir, 'rac_basic_sample_project_pstest.rvt')
$fileName = [System.IO.Path]::GetFileName($SourceFile)
Set-ItemProperty -Path $sourceFile -Name IsReadOnly -Value $false

$Clen = Get-Item $sourceFile
$Clen = $Clen.Length
write-host $Clen

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
            $headers.Add("Authorization", "Bearer $token")
            $headers.Add("Content-Type", "application/octet-stream")
            $headers.Add("Content-Length", $CLen)

$CreateObj = 'https://developer.api.autodesk.com/oss/v2/buckets/'+$B_Key+'/objects/'+$fileName 
$CreateObjAPIresult = Invoke-RestMethod -Uri $CreateObj -Method Put   -Headers $headers -InFile $sourceFile

write-host "New Object Created in bucket"
person TD123123123    schedule 03.12.2020