我有一个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'的方法。”
我不知道从目前的位置去哪里。
答案 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}
获得你想要的东西