#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. Еще раз спасибо.