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

2024-03-26

我和一位同事正在尝试创建一个 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 但在让变量按我的意愿工作时遇到问题。

我感谢任何帮助,谢谢!


您需要使用 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 中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 powershell 从多台计算机中提取注册表值 的相关文章

随机推荐