Как добавить путь к объекту PowerShell в C #? - PullRequest
0 голосов
/ 28 октября 2018

При вызове GetPathToCmd ниже я также хочу, чтобы powerShell рассмотрел какой-то специальный каталог - c:\scripts (передается как параметр).Есть ли способ добавить этот каталог только к powerShell PATH (т.е. $env:Path), не изменяя переменную пути всего запущенного процесса?

class Program {
    static void Main(string[] args) {
        string pathToCmd = GetPathToCmd("file-to-look-for.py", @"c:\scripts");
        Console.WriteLine(pathToCmd ?? "Not found");
    }

    static string GetPathToCmd(string cmd, string alsoLookIn) {
        using (PowerShell powerShell = PowerShell.Create()) {
            // Anyway to add "alsoLookIn" to powerShell's path?

            powerShell.AddCommand("get-command")
                .AddArgument(new[] {$@".\{cmd}", cmd})
                .AddParameter("Type", new[] {"Application", "ExternalScript"})
                .AddParameter("ErrorAction", "Ignore")
                ;

            CommandInfo commandInfo = powerShell.Invoke<CommandInfo>().FirstOrDefault();
            return commandInfo?.Source;
        }
    }
}

1 Ответ

0 голосов
/ 29 октября 2018

Вы можете изменить $ env: Path.Однако в тот момент, когда вы делаете что-то похожее на приведенное ниже ...

# Modify current environment path for this session
$Env:Path = "$Env:Path;SomeNewFolderPath"

... тогда этот $ Env: изменение пути существует в течение всей сессии.Он исчезает, когда вы начинаете новую сессию.

Однако вы можете сделать это на лету, гарантируя, что вы не заглушите свой первоначальный путь таким образом

# Capture the current path
$CurrentPath = $Env:Path

C:\Program Files\Microsoft MPI\Bin\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;...


# Modify current environment path before entering the code segment
$Env:Path = "$Env:Path;SomeNewFolderPath"


$Env:Path
C:\Program Files\Microsoft MPI\Bin\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;...;SomeNewFolderPath



# Modify current environment path after leaving the code segment
$Env:Path = $CurrentPath

$Env:Path
C:\Program Files\Microsoft MPI\Bin\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...