Cloning pyRevit and our extensions for deployment with Powershell doesn't work

I have created a powershell script following the instructions on Notion – The all-in-one workspace for your notes, tasks, wikis, and databases. to make a deployment for all members of our office.

  • .NET 4.8 gets successfully installed
  • pyRevit CLI gets successfully installed

The environment path was set:

but it seems somehow is does not accept the pyrevit argument.

I have opened Powershell with local admin rights
Set-ExecutionPolicy “RemoteSigned” -force
cd D:\DevProjekte\pyRSE\pyRSEplus.extension\updater
.\cloning_pyrevit.ps1

result screenshot:

/e: if I run this command in the powershell Terminal in visual studio code…

pyrevit extend ui $rseextname $rsepyrevitext --dest=$pyrevitexts --branch=$rsebranch --log=“D:\pyRevitCLI_InstallLog.txt” --debug

…I got the error:

Error: the given reference name 'refs/remotes/origin/' is not valid (pyRevitLabs.Common.PyRevitException)
   bei pyRevitLabs.Common.GitInstaller.Clone(String repoPath, String branchName, String destPath, GitInstallerCredentials creds, Boolean checkout)
   bei pyRevitLabs.PyRevit.PyRevitExtensions.InstallExtension(String extensionName, PyRevitExtensionTypes extensionType, String repoPath, String destPath, String branchName, GitInstallerCredentials credentials)
   bei pyRevitLabs.PyRevit.PyRevitExtensions.InstallExtension(PyRevitExtensionDefinition extDef, String destPath, String branchName)
   bei pyRevitCLI.PyRevitCLI.ProcessArguments()
   bei pyRevitCLI.PyRevit

If I use instead of the argument pyrevit the full path:
& “C:\Program Files\pyRevit CLI\bin\pyrevit.exe”

I get the error message:

Debug: Arg processing failed. | Usage:
        pyrevit (-h | --help)
        pyrevit (-V | --version)
        pyrevit --usage
.......
....etc

If I use in the powershell terminal:
& “C:\Program Files\pyRevit CLI\bin\pyrevit.exe” clone rsemaintest2 base --dest=D:\pyRevit\rsemaintest2\ --log=“D:\pyRevitCLI_InstallLog.txt” --debug

it gets cloned successfully.

Thank you!

/e: solved…
I have moved my own extension into a function and added to the add extension function.
And I have changed

$env:Path = “C:\Program Files\pyRevit CLI”

to

$env:Path = “;C:\Program Files\pyRevit CLI\bin”

and added many other minor fixes and comments, if you like to have a look:
https://github.com/Thomas84/pyRSE/blob/main/updater/cloning_pyrevit.ps1

Hi Thomas,
Wasn’t it just an issue due to the branch being named main instead of master?

Hi Jean-Marc,
maybe, I have added the --branch flag now everywhere with the correct branch name. The file is still work in progress. Would be nice if others can share their powershell config file as well, so I can see additional tricks :slight_smile:

Hi Thomas,
Yep, that probably fixed it.
I did not go through all the comments of your ps file. I am so rusted in German, and feel I need to avoid using google translate to let my brain do the work :slight_smile:

I haven’t gone the PS way. My team being relatively small (30ish) and geeky, I make them install pyRevit and run a command line to install extra extensions.

I will add english comments at a later point in time, sry my bad. Ye, I have read your workflow in another comment. But I want to automate as much as I can, and I think if I have powershell scripts for all typical tasks, it is pretty easy to manage :smiley: I’m just not that powershell geek, but I have already powershell cookbooks on my drive :smiley:

1 Like

The seed command doesn’t work :frowning: Somehow the pyRevit_config.ini gets cloned from and to the same path?! It says it is already in use by another process.

others have mentioned that as well:
# pyRevit on more machines - #3 by giused8
# https://github.com/eirannejad/pyRevit/issues/1243#issuecomment-1022495668
# Configs Seed Error - #3 by lexiko

The section from the error log:

2022-08-09 13:49:22.9990|DEBUG|pyRevitCLI.PyRevitCLI|Checking for all: seed
2022-08-09 13:49:22.9990|DEBUG|pyRevitLabs.PyRevit.PyRevitConfigs|Seeding config file "C:\ProgramData\pyRevit\pyRevit_config.ini" to "C:\ProgramData\pyRevit\pyRevit_config.ini"
2022-08-09 13:49:23.0159|ERROR|pyRevitCLI.PyRevitCLI|Failed seeding config file. | Der Prozess kann nicht auf die Datei "C:\ProgramData\pyRevit\pyRevit_config.ini" zugreifen, da sie von einem anderen Prozess verwendet wird. (pyRevitLabs.Common.PyRevitException)
   bei pyRevitLabs.PyRevit.PyRevitConfigs.SeedConfig(Boolean lockSeedConfig)
   bei pyRevitCLI.PyRevitCLI.ProcessArguments()

And some configuration settings seem not working:

    Write-Output "pyRevit Konfiguration 1"
    & "C:\Program Files\pyRevit CLI\bin\pyrevit.exe" configs allowremotedll disable --log=$logfile

    Write-Output "pyRevit Konfiguration 13"
    & "C:\Program Files\pyRevit CLI\bin\pyrevit.exe" configs usagelogging disable --log=$logfile

    Write-Output "pyRevit Konfiguration 22"
    & "C:\Program Files\pyRevit CLI\bin\pyrevit.exe" configs usercanupdate Yes --log=$logfile

    Write-Output "pyRevit Konfiguration 23"
    & "C:\Program Files\pyRevit CLI\bin\pyrevit.exe" configs usercanextend Yes --log=$logfile

    Write-Output "pyRevit Konfiguration 24"
    & "C:\Program Files\pyRevit CLI\bin\pyrevit.exe" configs usercanconfig Yes --log=$logfile

I have added the write-output numbers, to see which configs commands doesn’t work.
If I run the Powershell script, on the mentioned commands it seems pyrevit doesn’t know the commands or the flags:

Example screenshot:

/edit:
Yes and No has to be lower case letters, then configs 22, 23, and 24 works… :rofl:
and I assume useagelogging was replaced with the telemetry server stuff
and I assume allowremotedll does only exists in the help and not in the code base.

1 Like

@eirannejad nice set of flags :point_up_2: :slight_smile:

I think the seed error starts here:

edit2:

… and the ConfigFilePath and AdminConfigFilePath will be the same…

…if IsRunAsElevated() gets true (if you run the ps script as admin):

The constants are defined here:

But I think it makes no sense that it copy from and to the same place!? I think there should be a temporary place, where the pyRevitConfig.ini gets prepared and finally it should copied to the programdata or appdata path.

Does it make a difference if I run the powershell as local or global admin?

/edit1:
I will try to use now the command “config” to configure pyRevit on my machine from an existing template configuration file:
pyrevit config <template_config_path> [–log=<log_file>]
$ pyrevit config “C:\myPyRevitTemplateConfig.ini”

Source:

Or maybe with another Powershell script snippet, I think it is the same result.

/edit3:
After inspecting the code, the documentation of pyrevit config is missing the --from= flag
The command only works if you use

pyrevit config --from=“X:<template_config_path>\pyReivt_config.ini”

and then it will be copied to the users %APPDATA%\pyRevit\pyRevit_config.ini.
Not sure yet if this solves my task or if I need to run a powershell script to copy the config template to each user.

2 Likes

Sorry to necro this thread, but I’m still running into this issue (if this has been resolved elsewhere, please point me there).

Running pyrevit configs seed in an admin shell fails with file in use by another process.
Running it in a non-admin shell fails because it lacks permissions to write to C:\ProgramData.

In addition, all the pyrevit configs ... commands I run prior to pyrevit configs seed succeed, so it appears that those config changes are being written to some file, but the C:\ProgramData\pyrevit_configs.ini file is empty, so I’m not sure where.

Thanks for any guidance you can provide.

Open an issue on GitHub and run all command with the debug flag to help out.

1 Like