Powershell получает значение из строки, зная, что оно всегда начинается со строки и заканчивается строкой

#powershell #split #trim #ends-with

#powershell #разделить #обрезать #заканчивается

Вопрос:

Я выполняю SQL-запрос, и мне нужно извлечь имя компьютера из поля. Результаты содержат несколько записей, разделенных точками с запятой. Меня интересует только значение для Server=PCNameSQL_Instance . Значения, с которыми я работаю, выглядят следующим образом…

 Provider=SQLOLEDB;Server=PCNameSQL_Instance;SomeOtherCrap=moreWords;ThisGoes=OnAndOn
Proer=SQLOLEDB;Server=PCNameSQL_Instance;SsdgsdfomeOtherCrap=moreWords;TzfdzdfghisGoes=OnAndOn
 

Server= всегда будет содержать имя моего компьютера (установка базы данных локального доступа), и все они будут одинаковыми, даже если есть несколько строк. Мне действительно нужно получить имя только один раз. И хотя я уже разделил значения на; мой мозг слишком перегрет, чтобы понять, как получить имя сервера из результатов. Я уверен, что это до боли очевидно, поскольку значение передается вам на блюде, но я не настолько умен, чтобы даже понять, как искать ответ.

Ответ №1:

Вы можете использовать StartsWith(«Server») для фильтрации требуемого объекта, а затем добавить другое разделение на «=» и «/», возможно, проще с регулярным выражением, но мне нравятся разделения, например:

  $string = "Provider=SQLOLEDB;Server=PCNameSQL_Instance;SomeOtherCrap=moreWords;ThisGoes=OnAndOn"
 $string.Split(";") | Where {$_.startswith("Server")}
 Server=PCNameSQL_Instance
 ($string.Split(";") | Where {$_.startswith("Server")}).split("=")[1].split("")[0]
 PCName
 

Комментарии:

1. Я добирался туда гораздо более уродливым способом… Конечно, у меня было что-то в этом роде $string.Split(";") $string | ForEach-Object { if ($_.startswith("Server=")){ $string=$_ }} , НО мне ВСЕ равно оставалось избавиться от дерьма до и после. Есть ли какой-нибудь способ получить только первый результат? то, как я это сделал, дает мне одну запись, но только потому, что она уже прошла через нее 5 раз и просто сохранила последнюю. Все экземпляры этого будут одинаковыми.

2. ($string.Split(";") | Where {$_.startswith("Server")}).split("=")[1].split("")[0] это путь. Мне нравятся однострочники, потому что мне иногда приходится передавать их в cmd. Еще раз спасибо.