2011-06-02 30 views
1

我有一个Power-shell脚本,我试图备份不断变化的SQL数据库数量。幸运的是,所有这些数据库都列在注册表项中。我正在为每个循环利用这个。我遇到的问题是,在获取我想要的注册表值后,当我尝试将它传递到我的函数以备份数据库时,似乎可以删除我可以删除的变量中的信息。如果我通过调用变量($ variable)将变量的内容输出到屏幕上,则显示得很好。但是,如果我编写 - 将变量托管在屏幕上,调用该函数时显示的额外“内容”也会显示出来。如何操作PowerShell中的变量数据

以下是生成变量内容的脚本部分。

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'的方法,因此方法调用失败。”

我对目前从哪里去的地方感到不知所措。

回答

1

select-object将返回一个具有您选择的指定属性的对象。得到的只是该财产的价值,只是按名称访问它:

write-host $DBname."Channel Database Name" 
+0

非常感谢,这正是我需要向前推进的。再次,谢谢一堆。 – 2011-06-03 15:57:16

0

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

尝试

write-host $DBName.value

,或做不到这一点,做一个

$DBName | Get-member

有疑问时,get-member给你,你正在处理什么用的一个不错的主意。

+0

好了,当试图$ DBName | Get-member我有 TypeName:System.Management.Automation.PSCustomObject Name MemberType定义 ---- ---------- ---------- Equals Method System.Boolean Equals(Object obj) GetHashCode方法System.Int32GetHashCode() GetType方法System.TypeGetType() ToString方法System.StringToString() 通道数据库名称NoteProperty System.StringChannel数据库名称= Prism_Deploy_sam ... 我不是powershell向导,所以这里的任何帮助将不胜感激 – 2011-06-02 19:53:07

+0

@Nathan - 请把它放在原始文章的代码块中,这样我就可以阅读:) – JNK 2011-06-02 19:56:27

+0

输出的截图可以在这里找到:http:/ /downloads.newboundary.com/Nathan_Transfer/image.png – 2011-06-02 20:15:12

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} 

,让你在找什么