如何在powershell中操作变量中的数据

时间:2011-06-02 19:27:37

标签: sql powershell

我有一个power-shell脚本,我正在尝试备份不断变化的SQL数据库。幸运的是,所有这些数据库都列在注册表项中。我在for-each循环中利用它。我遇到的问题是,在获取了我想要的注册表值之后,当我尝试将其传递到我的函数来备份数据库时,似乎是变量中的信息我可以摆脱。如果我通过调用变量($ 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 个答案:

答案 0 :(得分:1)

select-object将返回一个具有您“选择”的命名属性的对象。要获得该属性的值,只需按名称访问它:

write-host $DBname."Channel Database Name"

答案 1 :(得分:0)

听起来它正在返回一个哈希表行对象。

尝试

write-host $DBName.value

或者,如果没有,请执行

$DBName | Get-member

如果有疑问,get-member会让您对所处理的内容有所了解。

答案 2 :(得分:0)

你应该可以写

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}

获得你想要的东西