Functions/GenXdev.AI.LMStudio/Get-LMStudioPaths.ps1
<##############################################################################
Part of PowerShell module : GenXdev.AI.LMStudio Original cmdlet filename : Get-LMStudioPaths.ps1 Original author : René Vaessen / GenXdev Version : 1.300.2025 ################################################################################ Copyright (c) René Vaessen / GenXdev Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ################################################################################> ############################################################################### <# .SYNOPSIS Retrieves file paths for LM Studio executables. .DESCRIPTION Searches common installation locations for LM Studio executables and returns their paths. The function maintains a cache of found paths to optimize performance on subsequent calls. .OUTPUTS System.Collections.Hashtable Returns a hashtable with two keys: - LMStudioExe: Path to main LM Studio executable - LMSExe: Path to LMS command-line executable .EXAMPLE $paths = Get-LMStudioPaths Write-Output "LM Studio path: $($paths.LMStudioExe)" #> function Get-LMStudioPaths { [CmdletBinding()] [OutputType([System.Collections.Hashtable])] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '')] param() begin { # define search paths for executables $searchPathsLMStudio = @( "${env:LOCALAPPDATA}\LM-Studio\lm studio.exe", "${env:LOCALAPPDATA}\Programs\LM-Studio\lm studio.exe", "${env:LOCALAPPDATA}\Programs\LM Studio\lm studio.exe" ) $searchPathsLMSexe = @( '~\.cache\lm-studio\bin\lms.exe', "${env:LOCALAPPDATA}\LM-Studio\lms.exe", "${env:LOCALAPPDATA}\Programs\LM-Studio\lms.exe", "${env:LOCALAPPDATA}\Programs\LM Studio\lms.exe", "${env:LOCALAPPDATA}\Programs\LM Studio\resources\app\.webpack\lms.exe" ) } process { # check if paths need to be discovered if (-not $script:LMStudioExe -or -not $script:LMSexe) { Microsoft.PowerShell.Utility\Write-Verbose 'Searching for LM Studio executables...' # find main LM Studio executable $script:LMStudioExe = Microsoft.PowerShell.Management\Get-ChildItem ` -LiteralPath $searchPathsLMStudio ` -File ` -Recurse ` -ErrorAction SilentlyContinue | Microsoft.PowerShell.Utility\Select-Object -First 1 | Microsoft.PowerShell.Core\ForEach-Object FullName # find LMS command-line executable $script:LMSExe = Microsoft.PowerShell.Management\Get-ChildItem ` -LiteralPath $searchPathsLMSexe ` -File ` -Recurse ` -ErrorAction SilentlyContinue | Microsoft.PowerShell.Utility\Select-Object -First 1 | Microsoft.PowerShell.Core\ForEach-Object FullName Microsoft.PowerShell.Utility\Write-Verbose "Found LM Studio: $script:LMStudioExe" Microsoft.PowerShell.Utility\Write-Verbose "Found LMS: $script:LMSExe" } } end { # return paths in a hashtable return @{ LMStudioExe = $script:LMStudioExe LMSExe = $script:LMSExe } } } |