我和一位同事正在尝试创建一个 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/