Как мне манипулировать данными из переменной в powershell - PullRequest
1 голос
/ 02 июня 2011

У меня есть сценарий Power-Shell, с помощью которого я пытаюсь выполнить резервное копирование постоянно меняющегося числа баз данных SQL. К счастью, все эти базы данных перечислены в разделе реестра. Я использую это для каждого цикла. Проблема, с которой я столкнулся, заключается в том, что после получения нужного мне значения реестра, когда я пытаюсь передать его в свою функцию для резервного копирования баз данных, в переменной, похоже, есть информация, от которой я могу избавиться. Если я выведу содержимое переменной на экран, просто вызвав переменную ($ variable), это будет просто замечательно. Но если я записываю переменную на экран, появляется также дополнительное «содержимое», которое появляется при вызове функции.

Вот часть скрипта, которая генерирует содержимое переменной.

foreach ($childitem in get-childitem "HKLM:\SOFTWARE\Wow6432Node\Lanovation\Prism Deploy\Server Channels")
{$DBName = get-itemproperty Registry::$childitem | select "Channel Database Name"
write-host $DBname}

Вот что отображает хост записи:

@{Channel Database Name=Prism_Deploy_Sample_268CBD61_AC9E_4853_83DE_E161C72458DE}

но мне нужна только эта часть:

Prism_Deploy_Sample_268CBD61_AC9E_4853_83DE_E161C72458DE

Я пытался посмотреть в Интернете, как это сделать, и в том, что я нашел, упоминаются вещи, похожие на $ variable.split, а затем указаны мои разделители. Но когда я пытаюсь это сделать, я получаю сообщение об ошибке «Ошибка вызова метода, поскольку [System.Management.Automation.PSCustomObject] не содержит метод с именем« split »."

Я в растерянности относительно того, куда мне идти.

Ответы [ 3 ]

1 голос
/ 03 июня 2011

select-object вернет объект с именованными свойствами, которые вы «выбираете».Чтобы получить только значение этого свойства, просто обратитесь к нему по имени:

write-host $DBname."Channel Database Name"
0 голосов
/ 03 июня 2011

Вы должны быть в состоянии написать

foreach ($childitem in get-childitem "HKLM:\SOFTWARE\Wow6432Node\Lanovation\Prism Deploy\Server Channels")
{$DBName = get-itemproperty Registry::$childitem | select "Channel Database Name"
write-host $DBname.Name}

, чтобы получить то, что вы ищете

0 голосов
/ 02 июня 2011

Похоже, что он возвращает объект строки хэш-таблицы.

Попробуйте

write-host $DBName.value

или, если это не удалось, выполните

$DBName | Get-member

В случае сомнений get-member дает вам хорошее представление о том, с чем вы имеете дело.

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