0

嗨,我正在尝试获取 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 错误消息

4

2 回答 2

1

默认情况下,两者Get-ContentSet-Content都只对text进行操作。

要处理原始字节数据- 这是处理二进制文件格式的内容所需要的.nwd- 您需要使用:

  • Windows PowerShell中:-Encoding Byte
  • PowerShell [核心] v6+中:-AsByteStream

注意:如果所有字节一次都放入内存,您可以Get-Content通过添加-Raw.

于 2020-12-01T22:48:42.903 回答
1

你是对的,这种方法确实有效,但速度极慢且无法使用,但我现在可以通过关注这篇文章来确认这一点

我使用以下方法收集和发布文件中的数据。

  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"
于 2020-12-03T22:04:52.137 回答