使用PowerShell从多台计算机中提取注册表值

时间:2012-01-25 23:56:08

标签: powershell registry

一位同事和我正在尝试创建一个powershell脚本,该脚本使用CSV文件,该文件包含公司网络上所有计算机的名称,并使用这些名称连接到远程注册表并提取特定值。

这是我们到目前为止所做的:

$strMachineName = import-csv .\computer_name.csv
foreach ($line in $strMachineName)
{
                $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $line.computer)
                $regkey = $reg.OpenSubkey("SOFTWARE\\Olympus\\DSSPlayerPro\\Transcription Module\\UserInformation")
                $serialkey = $regkey.GetValue("SerialNumber")
                write-host $line","$serialkey
}

现在,这个脚本工作正常,但是输出问题使得很多计算机难以理解。

我们希望能够将stdout输出到另一个文件,csv或txt,我们也希望能够将stderr输出为null或单独的文件,以便我们稍后检查它。

我的研究让我相信write-host不适合使用,因为它在使用变量时无法输出到文件(??),所以我尝试使用echo但是我有让变量按照我的意愿工作的问题。

感谢您的帮助,谢谢!

2 个答案:

答案 0 :(得分:4)

您需要使用try / catch捕获异常。

$strMachineName = import-csv .\computer_name.csv
foreach ($line in $strMachineName)
{
    try {
        $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $line.computer)
        $regkey = $reg.OpenSubkey("SOFTWARE\\Olympus\\DSSPlayerPro\\Transcription Module\\UserInformation")
        $serialkey = $regkey.GetValue("SerialNumber")

        ('"{0}","{1}"' -f $line.computer, $serialkey) | out-file C:\stdout.csv -append -encoding ascii
    } catch {
        ('"{0}","{1}"' -f $line.computer, $_) | out-file C:\stderr.csv -append -encoding ascii
    }
}

这会创建两个文件(stdout.csv和stderr.csv)。成功的查询存储在stdout.csv中,失败的查询存储在stderr.csv中。

答案 1 :(得分:-1)

从“ $ line.computer”脚本dosnt中松开“ .computer”脚本,该脚本将在最新的Power Shell上运行并在其中运行。