Пожалуйста, помогите мне с скриптом Power Shell, который переставляет пути - PullRequest
0 голосов
/ 19 марта 2010

У меня установлены Sybase и MSFT SQL Server. Есть время, когда Sybase вмешивается в MS SQL, потому что у них есть несколько перекрывающихся команд.

Итак, мне нужны два скрипта:

A) При запуске сценарий A создает резервную копию текущего пути, захватывает все пути, которые содержат sybase или SYBASE или SyBASE (вы получаете точку), и перемещает их все в самый конец пути, сохраняя при этом порядок .

B) При запуске сценарий B восстанавливает путь из резервной копии.

И сценарий a, и сценарий b должны немедленно влиять на путь. Итак, если a.bat вызывает patha.ps1, pathb.ps1 выглядит так:

@REM Old path here
call patha.ps1
@REM At this point the effective path should be different.
call pathb.ps1
@REM Effective old path again

Пожалуйста, дайте мне знать, если это не имеет смысла. Я не уверен, лучше ли использовать команду вызова.

Я никогда не использовал P.S. до. Я могу попытаться сформулировать то же самое в Python (я знаю, что пользователи S.O., как правило, спрашивают: «Что вы пробовали до сих пор»). Что ж, на данный момент я ОЧЕНЬ медленно пишу на языке Power Shell.

Пожалуйста, помогите.

1 Ответ

1 голос
/ 20 марта 2010

Прежде всего: call здесь будет бесполезен, так как вы, очевидно, пишете командный файл, а сценарии PowerShell не связаны для их запуска по умолчанию. call для пакетных файлов или подпрограмм.

Во-вторых, любой скрипт PowerShell, который вы вызываете из командного файла , не может изменить переменные среды среды вызывающей стороны. Это фундаментальное свойство поведения процессов, и поскольку вы вызываете другой процесс, это никогда не сработает.

Я не совсем уверен, почему вы вообще используете здесь командный файл, если у вас есть PowerShell. С тем же успехом вы можете полностью решить эту проблему в PowerShell.

Однако, что я понял из вашей проблемы, так это то, что лучший способ решить эту проблему, вероятно, заключается в следующем: Создайте два пакетных файла, каждый из которых задает PATH соответствующим образом. Вероятно, вы можете не указывать пути MSSQL и Sybase из вашего обычного PATH и добавлять их только в командные файлы. Затем создайте ярлыки для

cmd /k set_mssql_path.cmd

и

cmd /k set_sybase_path.cmd

, каждый из которых теперь является ярлыком оболочки для работы с инструментами соответствующей базы данных. Вот как работает командная строка Visual Studio, и это, вероятно, самое чистое решение, которое у вас есть. Вы можете использовать команды color и prompt в этих пакетах, чтобы выделить две разные оболочки, чтобы вы всегда знали, какая у вас среда. Например, следующие две строки раскрасят консоль белым на синий и установят подсказку, указывающую MSSQL:

color 1f
prompt MSSQL$S$P$G

На самом деле это может быть очень удобно.

Как правило, попытка перестановки переменной среды PATH не совсем легка. Хотя вы можете тривиально разделить на ;, это не удастся для путей, которые сами содержат точку с запятой (и которые должны быть заключены в кавычки). Даже в PowerShell на это уйдет некоторое время, поэтому я думаю, что создание ярлыков, специфичных для этих инструментов, вероятно, самый хороший способ справиться с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...