0

我已经阅读了很多帖子,并且拉了很多很棒的信息。但我仍然有一个问题,从注册表获取版本号。我发现这个代码得到一个IE版本,似乎工作得很好。Get-ItemProperty:无法将参数绑定到参数'Path',因为它是空的

$array [email protected]() 
$keyname = 'SOFTWARE\\Microsoft\\Internet Explorer' 
$computernames = Get-Content C:\scripts\test_names1.csv 
foreach ($server in $computernames) 
{ 
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $server) 
$key = $reg.OpenSubkey($keyname) 
$value = $key.GetValue('svcVersion') 
$obj = New-Object PSObject 

    $obj | Add-Member -MemberType NoteProperty -Name "ComputerName" -Value $server 

    $obj | Add-Member -MemberType NoteProperty -Name "IEVersion" -Value $value 

    $array += $obj 


} 

$array | select ComputerName,IEVersion | export-csv C:\scripts\test1-IE_Version.csv 

但是,当我修改它,试图得到它没有谷歌的Chrome版本与

**Get-ItemProperty : Cannot bind argument to parameter 'Path' because it is null.** 

这里是我的修改,以试图让Chrome版本。

$array [email protected]() 
$keyname = '\\SOFTWARE\\Wow6432Node\\Google\\Update\\clients\\{8A69D345-D564-463c-AFF1-A69D9E530F96}' 
$computernames = Get-Content C:\scripts\test_names.csv 
foreach ($server in $computernames) 
{ 
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $server) 
$regkey = $reg.OpenSubKey('SOFTWARE\\Wow6432Node\\Google\\Update\\clients\\{8A69D345-D564-463c-AFF1-A69D9E530F96}') 
$value = (Get-ItemProperty -Path $regkey -Name pv).pv 
$obj = New-Object PSObject 

    $obj | Add-Member -MemberType NoteProperty -Name "ComputerName" -Value $server 
    $obj | Add-Member -MemberType NoteProperty -Name "Installed" -Value $installed 
    $obj | Add-Member -MemberType NoteProperty -Name "ChromeVersion" -Value $value 
    $array += $obj 
} 

$array | select ComputerName,Installed,ChromeVersion | export-csv C:\scripts\1222016_Chrome_Version.csv 

由于原始编辑引发更多错误,我不得不更改$ keyname和$ value变量。我在PowerShell中是全新的,所以对我来说很简单。

在此先感谢。

-S

+0

会建议'林通过'Get-Content'获取CSV文件的端口-csv'。 –

+0

您尝试过哪些调试?通常当你由于空值而出现错误时,这是​​因为你期望存在的东西不存在。 –

+0

当我通过它时,它转储在“你无法调用一个空值表达式的方法。” 在C:\ scripts \ Get_Chrome_Version.ps1:8 char:1 + $ value = $ regkey.GetValue('pv ')“ – SeanDu

回答

0

我下面的作品,这是基本相同的IE代码:

$keyname = 'SOFTWARE\\Wow6432Node\\Google\\Update\\clients\\{8A69D345-D564-463c-AFF1-A69D9E530F96}' 
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $server) 
$regkey = $reg.OpenSubKey($keyname) 
$value = $regkey.GetValue('pv') 
+0

我不得不错过别的东西。我可以得到这个在本地运行,但只要我添加尝试获取远程信息,我得到的路径为空。 $ regkey ='HKLM:SOFTWARE \ Wow6432Node \ Google \ Update \ clients \ {8A69D345-D564-463c-AFF1-A69D9E530F96}' $ checkkey = Test-Path $ regkey $ regpath = $ regkey if($ checkkey -eq $ true){(Get-ItemProperty -path $ regpath -name pv).pv} ELSE {'Not Installed'} – SeanDu

0

如果我理解你的问题,你问有关如何判断程序安装什么在计算机上,以及计算机上的IE版本是什么,这是一种特殊情况。

首先,如果一个应用程序被“安装”,并出现在Programs and Features列表中,那么你可以使用Get-InstalledApp.ps1剧本我从这篇文章中写道:看到应用程序安装的内容:

Windows IT Pro: Auditing 32-Bit and 64-Bit Applications with PowerShell

但是,由于Internet Explorer的是一个操作系统组件,而不是“装”作为一个典型的程序,我写了一个不同的脚本,找到IE版本:

Get-IEVersion.ps1

+0

从技术上讲,我正在寻找检索安装的版本。我基本上双重检查我们的第三方更新安装程序。 – SeanDu

+0

了解。我的答案中的脚本将完成此操作。 –

相关问题