When the powershell profile contains code that throws an error photostructure should be able to start as profiles should not be loaded.
Also when powershell execution policy is set to “restricted” photostrucutre should ignore execution policy and start regardless.
Current Behavior
Photostrucutre throws an error upon startup.
Steps to Reproduce profile error
Add powershell profile with an error ie “1/0” by running “notepad $profile” and adding the text “1/0”. This will generate a divisable by zero exception.
Start photostructure, throws error
Steps to Reproduce execution policy error
Run Set-Executionpolicy restricted from an elevated powershell
Start photostructure, throws error
Environment
Windows Server 2019, but equally applicable to Windows 7 and up
Photostructure 0.91 Windows
Suggested solution
Photostrucutre should start all powershell processes with the following arguments
-noprofile -executionpolicy bypass
ie powershell.exe -noprofile -executionpolicy bypass
The -noprofile argument instructs the powershell process to ignore user created profiles. These profiles should not be needed by photostructure.
The -executionpolicy bypass arguments instructs powershell to run the powershell process with executionpolicy bypass.
Please note: It might sound strange to be able to ignore execution policy by providing a executable argument but executionpolicy is a badly named function by Microsoft. It is not intended to stop someone from running scripts that “wants” to run a script. Rather it is a function that prevents end users from running scripts by mistake, ie when they do not intend to run a script, executionpolicy can stop a user that accedentally double-clicked a ps1 file for instance. If the user intends to run a script execution policy can be bypassed in a number of ways that does not require admin-privilegies. Therefor the option exists to start a powershell process that bypasses the executionpolicy.
Powershell commandline arguments is documented here
Execution policy functionality is documented here
Snippet from MS documentation
“The execution policy isn’t a security system that restricts user actions. For example, users can easily bypass a policy by typing the script contents at the command line when they cannot run a script. Instead, the execution policy helps users to set basic rules and prevents them from violating them unintentionally.”
Welcome to PhotoStructure, and thanks for the suggestion!
I’ve just added this setting to v1.0.0 which will address this issue:
# +------------------+
# | powerShellArgs |
# +------------------+
#
# The following are the default arguments added to spin up PowerShell on
# Windows devices.
# See
# <https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_powershell_exe?view=powershell-5.1>
# for all arguments that PowerShell.exe accepts.
# See
# <https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-5.1>
# for a description of Bypass.
# See
# <https://forum.photostructure.com/t/eliminate-powershell-profile-and-execution-policy-related-errors/184>
# for more details about why this needs to be configurable.
# (Versions prior to v1.0.0 only specified "-NoLogo").
#
# PS_POWER_SHELL_ARGS="[\"-NoLogo\",\"-NoProfile\",\"-ExecutionPolicy\",\"Bypass\"]"
Of course you can ask! The past couple days I’ve been fighting CI, trying to get my m1 Mac and new docker builds to pass. I also need to finish adding support for hide and delete: most of the backend is done for that already.
I unfortunately tend to be ridiculously optimistic with ETAs, but I really want to have v1.0 out by end of January. The actual release will be preceded by at least a week or two of alpha and beta pre-releases, so if you’re willing to try those, you’ll get HEIF support a bit sooner.
Thanks to @hanpq for reporting this issue. Apologies for the delayed follow-up.
As of v2026.1, PhotoStructure no longer relies on PowerShell for any critical task – it’s a nice-to-have at this point:
Volume and filesystem metadata is now handled by @photostructure/fs-metadata, a native library that works directly on Windows, macOS, and Linux without shelling out.
Process management is handled by node’s built-in child_process module, which works across platforms without shelling out to PowerShell.
The last remaining uses:
“Open in Explorer” features on Windows, which shell out to PowerShell to open a file (media or settings.toml) in the appropriate folder
“Native” file copies (if enabled in settings), which shell out to PowerShell to copy files on Windows (in case node.js file copy operations are broken for some reason)