First, let’s manage some expectations – Aconex is generally viewed as a closed platform. They seem to deliberately resist platform-level integration with other tools like BIM 360 and Revizto. However, you can achieve the promise in the title of this post – with a bit of work!

The basic steps are:

  1. Setup a sync between the Aconex Doc Register and Autodesk Docs (BIM 360 Document Management), using the Aconex PIF and Autodesk APIs
  2. Connect the BIM 360 project to the Revizto project and connect your BIM 360 ‘official Aconex’ PDFs to Revizto 2D Sheets.

Step 1 – Aconex Document Register sync with BIM 360 Document Management

Aconex provides a PIF (Project Integration Framework). This essentially acts as an API, and clients are able to build integrations between Aconex and other tools using their own budget.

aconexpif
The Aconex PIF is hard to find on the inter-webs…

As part of my strategic consultancy work as a Director at Virtual Built Technology, I have assisted clients in setting up the Aconex to BIM 360 sync. This will require considerable time, effort, $$ and planning. Although the scope is basically the same for every Aconex client that wants this, it seems individual Aconex clients will be charged significantly for this development to occur and operate on their ‘own’ PIF.

Once complete, you will begin to see PDFs arriving in Autodesk Docs from Aconex on a daily / nightly basis. Depending on how you have briefed the Aconex development consultants, you may end up with some interesting PDF file naming in the BIM 360 environment – so how can we deal with that?

Step 2a – BIM 360 Preparation Script for Merging Filenames to a single Folder

Let’s say you have your Aconex-to-BIM360 sync running, and you have PDFs arriving in 360 into “Discipline” folders like Architectural, Structural and so on. Not bad! But what if your PDFs are named like this:

  • SheetNumberX_Rev_1.pdf
  • SheetNumberX_Rev_2.pdf
  • SheetNumberY_Rev_1.pdf
  • etc

When thinking about downstream applications like Revizto, this is really sub-optimal. Why? Because a Revizto 2D sheet will want to connect directly to a SINGLE BIM 360 PDF document with Versions – not to a mangled set of ‘revision suffixed’ pdfs like the above. So we need to clean this up! And it needs to be repeatable and automated

For this, I have created a PowerShell script. Here is a description of the logic in the script:

  • it takes a list of BIM 360 Docs folder paths (the local folder path from Windows Explorer address bar), these are ‘monitored folders’
  • those folders need to be ‘synced’ prior to the script running (I’m still looking for a way to call the Autodesk Desktop Connector sync from a Powershell script, for now you have to right-click in Windows Explorer first)
  • it will process the folder list and:
  • create a subdirectory called “Current”
  • create a logfile in that subdirectory called deepSpaceSync.log
  • split the filenames at the _REV_ part
  • process each available Revision number individually in a loop (to ensure Aconex revisions are stored sequentially into BIM 360 versions)
  • check if the file was already copied – and skip it (using existence of that filename in the log folder)
  • or, copy the file to the “Current” subfolder
  • Sleep 5 minutes between each loop to allow Autodesk Desktop Connector sync to catch up.

So this script essentially merges the messy “REV” filenames into a nice clean SheetNumber.pdf filename structure AND actually creates BIM 360 file versions in the cloud (due to the sleep functionality).

We have released this script as a publicly available Deep Space Automation at this link.

egoutput
example output from the PowerShell script

Step 2b – Revizto 2D Sheet to BIM 360 PDF Connection

Now that we have a nicely named, version-rich PDF on BIM 360 Docs, its time to connect that up to Revizto.

Firstly – you should always publish 2D sheets from Revit BEFORE setting up the Docs connection if possible, as this is the only way to get the automated viewport overlays (Note – you can export with “Sheet coordinates only” option in Revizto Sheet Exporter from Revit).

Secondly – you then

  • open Revizto
  • ensure you have connected Docs to the right BIM 360 hub in Revizto
  • browse to the “Current” folder for a specific disciplines PDFs
  • click “Send to 2D”
  • select all and Done

    syncrev1
    Connecting Docs to Revizto 2D Sheets
  • then review that the correct sheets are going to be replaced and connected to the BIM360 PDF
syncrev2
Confirm that sheets are correctly connected using the Sheet Number

 

Final steps

Once your PDFs are flowing well between platforms, you may want to automate further. For example, the PowerShell script provided above could be set to run as a Windows Task. You would want it to run as soon as possible after the Aconex scheduled sync to BIM 360. As always, you should monitor your inputs and outputs for any problems or gremlins.

Done! You now have official documents from Aconex flowing regularly into Revizto via BIM 360. This means your site teams using Revizto on the iPad can now be accessing the official For Construction PDF Drawings (synced from Aconex Doc Register) while in the Field!

I love it when people take something I hacked together and make it even better! A while ago I posted a script to disable all Revit addins, and recently Thomas Vogt sent me some much improved versions.

  • Deactivate with Teilnehmer08_1_RevitAddonsDeaktivierenPowerShell.ps1
  • Activate with Teilnehmer08_2_RevitAddonsAktivierenPowerShell.ps1

 

You can download a ZIP file containing the Powershell scripts here:

Addin_Activate_Deactivate_2017-2020

 

Disclaimers (use at your own risk etc) and notes on how to use the scripts are as per previous post.

 

Here is the note from Thomas:

Hi Luke,
I have used your script from https://wrw.is/script-to-disable-all-revit-addins/ and I have adjusted it a bit. I have local users without admin rights (training center computers), so I go to the users computer, open the file with rightclick > Powershell and the Admin login is shown. I got also some problems with the allusersprofile and the appdata path variable, because as soon as I login as admin, the appdata path is not anymore the user path. Thus I have changed it to the path itself. The last 2 lines help to see the errors.

Thanks for your script, it helped me a lot! My scripts are attached if you want to use it on your blog =)

Thanks to Thomas Vogt for sharing his work on this!

Sometimes you will want to monitor a folder for changes, and possibly export a file list to Excel for consumption in some other format, or perhaps as part of a notification workflow.

I adapted a Powershell script to export a file list using a selected file extension as a filter, and also export some file properties like Directory and LastWriteTime (Date Modified).

Here is the Powershell script:

$arr = @()
gci L:DIRECTORY -include *.nwc -recurse | ? {$_.PSIsContainer -eq $False} | % {
$obj = New-Object PSObject
$obj | Add-Member NoteProperty Directory $_.DirectoryName
$obj | Add-Member NoteProperty Name $_.Name
$obj | Add-Member NoteProperty LastWriteTime $_.LastWriteTime
$arr = $obj
}
$arr | Export-CSV -notypeinformation "C:TARGETFOLDERLOwnCloudWIP.csv"
Copy-Item "C:TARGETFOLDERLOwnCloudWIP.csv" "C:UsersLuke JohnsonGoogle DriveGOOGLEDRIVERFOLDERLOwnCloudWIP.csv" -force
<code>

Put the above in a text document and save with the .ps1 extension

Quick summary of how it works:

  1.  As it is a powershell script, you will need powershell installed and it will need to be enabled with appropriate permission etc to access the network.
  2. Set up the script as per text above
  3. Set up Windows task scheduler to call the script periodically. Each time:
    1. Script runs and creates a CSV of filenames and dates etc in the monitored folder
    2. This automatically syncs (using the Copy-Item step) to Google Drive where it is shared with a gd url
    3. The gd url of the csv file is imported into another Google Spreadsheet, where ARRAY formulas are performed on it to create additional filter parameters based on file name

This ‘filterable’ Google sheet was shared with an ‘lv’ key so that it could be easily filtered by recipients. I think the new Google Sheets allow per user filtering, so that step may be unnecessary now.

You may need to set some additional arguments in the Windows task:

arguments.png

The scheduled task looks like this:

task.png

Warning: some have had unexpected results, use with care.
Update: one reader discovered that  C:Program FilesAutodeskRevit 2015AddIns is yet another path that Revit uses. The script below has not been modified to act on that path, but if you have problems after running the tool, perhaps moving the items out of this folder to a backup folder will help. This user had the following errors in the Journal:
“managed exception occurred” and “An item with the same key has already been added” and ExceptionCode=0xe0434352

… If you are experiencing a problem with Revit starting up, it could be due to a problem with one or more of your addins. As you probably know, Revit looks in a couple of key directories for *.addin files, and then it loads your addins based on what it finds. Also, in current versions of Revit it also looks in an ApplicationPlugins folder at the .bundle folders.

I created a Powershell script that looks in each of these three folders (for Revit 2015) and then renames the addin files and bundle folders, meaning that you can then open Revit 2015 in “addin-free mode”. The script requires that you are loading addins from the default AppData and ProgramData folders.

Important note: there are two scripts that are intended to work as a toggle, and for troubleshooting purposes only. After you run the Enable script, do not run it again. Make sure you run the Disable script next.

Here is the intended workflow:

  1. Download and unzip the ps1 files
  2. Ensure all Autodesk products are closed
  3. Run the 1_DisableRevitAddons.ps1 script to disable all Revit 2015 addins
  4. Start Revit
  5. If it starts, you know that some addin is causing your problem
  6. Close Revit
  7. Run the 2_EnableRevitAddons.ps1 script to restore the addin and bundle folder names

You can download both Powershell scripts here

Here is a quick Screencast showing it in action:

And some sample code for the disable script:

 cd $env:ALLUSERSPROFILEAutodeskRevitAddins2015  
Dir | Rename-Item –NewName { $_.name –replace “.addin“,”.addin.disabled” }
cd $env:ALLUSERSPROFILEAutodeskApplicationPlugins
Dir | Rename-Item –NewName { $_.name –replace “.bundle“,”.bundle.disabled” }
cd $env:APPDATAAutodeskRevitAddins2015
Dir | Rename-Item –NewName { $_.name –replace “.addin“,”.addin.disabled” }

After running the Disable script, you will end up with something like this:

Important: This is an extreme troubleshooting measure, and should be used with great care. Use at your own risk!

Here are some of the warnings / errors from the Powershell output. Some of these are due to the fact that I had Navisworks open and it could not rename those *.bundle folders. Various Autodesk products share the ApplicationPlugins folder, so it may have some unintended consequences on other products. Having said that, it seemed to work ok on my system.

Install and Run Windows Powershell

Give yourself unrestricted script access:

Set-ExecutionPolicy Unrestricted

Make a list of IPs to query and put it in a text file (1 IP per line).

Modify script below and put it in a text file with extension .ps1 (like script.ps1)

$ErrorActionPreference = 'SilentlyContinue'
$computers = Get-Content g:scriptipaddress.txt
foreach($computer in $computers) {
$ping = Test-Connection -ComputerName $computer -Count 1 -Quiet
$computerName = [system.net.dns]::Resolve("$computer")
#$hostname = $computerName.HostName
$shortHostname = $computerName.HostName.Split(".")[0]
if ($ping -eq 'True')
{
$UserName = (Get-WmiObject -ComputerName $computer win32_ComputerSystem).UserName
Write-Host "$shortHostname $UserName" -ForegroundColor Green
#Write-Host "$hostname is pingable" -ForegroundColor Green
}
else
{
Write-Host "$computer is not pingable" -ForegroundColor Red
}
}

Put the .txt and the.ps1 in the same folder.

Browse to the folder in Powershell.

Type .script.ps1

Wait for the query to find all the logged in users on your IP range…

from
Power ping and get computer, username