我有几百台运行不同版本的MS Office的计算机。我需要找到哪些机器正在运行什么版本。我有一个powershell脚本,我能够获取并将安装了MS Office的计算机的名称导出到csv文件,但是我无法在计算机上安装Office的版本以便导出到csv。我正在使用的代码如下:
$Computers = Get-Content "\\networkpath\ComputerList.txt"
$csvFilePath = "\\networkpath\SoftwareList.csv"
if (!(Test-Path -path $csvFilePath)) { ""|select name,version | Export-Csv -Path $csvFilePath -NoTypeInformation}
$outputArray = New-Object -TypeName System.Collections.ArrayList
ForEach ($Computer in $Computers)
{
Get-WmiObject -computerName $computer -Class CIM_Product -Filter 'Name like "%Microsoft Office Professional Plus%"' | select name
$Version = select name
$row = ""|select name,version
$row.Name = $Computer.ToString()
$row.Version = $Version.ToString()
$outputArray.Add($row)
}
$outputArray | Export-Csv -Path $csvFilePath -NoTypeInformation #-Append
答案 0 :(得分:1)
您没有存储版本信息以便在Get-WmiObject ...行中重复使用。
获得所需结果的方法是将get-wmiobject调用的结果存储到变量中,然后使用点表示法来获取所需的特定属性。
$wmiObject = get-wmiobject win32_product ....
$wmiObject.Name
$wmiObject.Version
通常情况下,如果您计划稍后在脚本上重新使用该对象,则使用select,in-line格式化对象是不好的做法。作为一般指导,我会将原始对象数据存储在变量中,然后在该行之后格式化该变量。
# declare your array
$outputarray = @()
# loop through your collection, build the custom psobject, and add it to your output array
foreach ($computer in $computers) {
$wmiObject = get-wmiobject -computername $computer | where name -like 'Microsoft Office Proffesional Plus*'
$obj = new-object -typename psobject
$obj | add-member -membertype noteproperty -name 'Name' -value $wmiObject.name
$obj | add-member -membertype noteproperty -name 'Version' -value $wmiObject.version
$outputarray += $obj
}
答案 1 :(得分:0)
Dim leftPaddingHex As Long = Val("&H" & "99000533")
If leftPaddingHex < 0 Then
leftPaddingHex = leftPaddingHex + UInt32.MaxValue + 1
End If
答案 2 :(得分:0)
感谢您提供的信息。我只是让它变得比它需要的更难,最终能够通过更改脚本来获取所需的数据,取出所有单元格信息并直接导出到文本文件。
$$Computers = Get-Content "\\networkpath\ComputerList.csv"
$FilePath = "\\networkpath\SoftwareList.txt"
if (!(test-path $FilePath)){New-Item -Path $FilePath}
ForEach ($computer in $Computers)
{
$Result1 = Get-WmiObject -ComputerName $computer -Class CIM_Product -Filter 'Name like "%Microsoft Office Professional Plus%"' | select Name,Version
$Result2 = Get-wmiobject Win32_computersystem -computer $computer | select name
$Result += $Result2, $Result1 | Out-File -FilePath $Filepath -Append
}