我和一位同事正在尝试创建一个 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(使用前将#替换为@)