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

标签 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但我在让变量按我的意愿工作时遇到了问题。

感谢您的帮助,谢谢!

最佳答案

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

关于powershell - 使用 powershell 从多台计算机中提取注册表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9012207/

相关文章:

C++ REG_SZ 加值失败

visual-studio - 可以找到MSBuild 15.0的注册表

powershell - 如何检查挂起的重启?

powershell - 在脚本中访问特定用户的 USERPROFILE 目录的正确方法?

sql-server - 如何在PowerShell中解析模棱两可的类型名称?

powershell - 如何在 Powershell V3 中启用 powershell 远程处理?

c# - 通过注册表卸载软件

xml - Save 在元素为空时向 XML 添加返回换行符

powershell - 在远程 SSH 服务器上执行的 Windows 应用程序的输出如何到达本地 SSH 客户端

eclipse - 在注册表中找不到应用程序 "org.eclipse.e4.ui.workbench.swt.E4Application"