一位同事和我正在尝试创建一个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但是我有让变量按照我的意愿工作的问题。
感谢您的帮助,谢谢!
答案 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上运行并在其中运行。