私の目標は、アンインストールGUIDと共にリモートコンピュータのリストのVNCバージョンを取得し、特定のコンピュータからVNCビューアをリモートでアンインストールできるようにすることです。私はGet-WmiObject -Class Win32_Productを使用しましたが、それは非常に遅いです。PowerShellの選択オブジェクトの結果から列名を削除する
私は次のスクリプトを持っていますが、その結果にselect-objectパラメータの名前が含まれています。
$computers = Get-Content -Path "C:\Computers.txt"
$Results = @()
ForEach ($Computer in $Computers) {
$Results += New-Object PSObject -Property @{
"ComputerName" = $Computer
"Name" = Invoke-Command -ComputerName $Computer -ScriptBlock { Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* } `
| Where-Object -FilterScript {$_.DisplayName -like "VNC V*"} | select-object DisplayName
"DisplayVersion" = Invoke-Command -ComputerName $Computer -ScriptBlock { Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* } `
| Where-Object -FilterScript {$_.DisplayName -like "VNC V*"} | select-object DisplayVersion
"ModifyPath" = Invoke-Command -ComputerName $Computer -ScriptBlock { Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* } `
| Where-Object -FilterScript {$_.DisplayName -like "VNC V*"} | select-object ModifyPath
"Vendor" = Invoke-Command -ComputerName $Computer -ScriptBlock { Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* } `
| Where-Object -FilterScript {$_.DisplayName -like "VNC V*"} | select-object Publisher
}
}
$Results | Select-Object ComputerName,Name,DisplayVersion,ModifyPath,Vendor | Sort-Object ComputerName | Export-Csv C:\VNC.csv -notype ;
私の結果は次のようになります。
コンピューター :コンピューター
名前 :@ {DisplayNameに= VNCビューア5.2.3}
DisplayVersion :@ {DisplayVersion = 5.2.3}
ModifyPath :{ModifyPath = MSIEXEC @。 EXE/I {18B1E36F-0DA3-4FDA-BC57-DD815B0DF3B2}}
ベンダー :@ {出版社= RealVNCの株式会社}
私はそれは次のようになりたいです:
コンピューター :コンピューター
名前 :VNCビューア5.2.3
DisplayVersion :5.2.3
ModifyPath :MSIEXEC。exeファイル/ I {18B1E36F-0DA3-4FDA-BC57-DD815B0DF3B2}
ベンダー :RealVNCの株式会社
が、このことは可能ですか私はこれについてつもりですスクリプトは完全に間違っている?私は、複数のパラメータに対してこのInvoke-Commandを実行する方法を理解しておらず、他の方法で結果を個々の列に出力しています。
このスクリプトは動作しますが、コンピュータの100ののために永久に取る:
if (Test-Path C:\VNCInstalled.csv) {Remove-Item C:\VNCInstalled.csv}
if (Test-Path C:\Computers.txt) {Remove-Item C:\Computers.txt}
$DirSearcher = New-Object System.DirectoryServices.DirectorySearcher([adsi]'')
$DirSearcher.Filter = '(&(objectClass=Computer)(!(cn=*esx*)) (!(cn=*slng*)) (!(cn=*dcen*)))'
$DirSearcher.FindAll().GetEnumerator() | sort-object { $_.Properties.name } `
| ForEach-Object { $_.Properties.name }`
| Out-File -FilePath C:\Computers.txt
Get-Content -Path c:\Computers.txt `
| ForEach-Object {Get-WmiObject -Class Win32_Product -ComputerName $_} `
| Where-Object -FilterScript {$_.Name -like "VNC V*"} `
| select-object @{Name="ComputerName";Expression={$_.PSComputerName}},
Name,
@{Name="InstallLocation";Expression={$_.PackageCache}},
Vendor,
Version,
@{Name="GUID";Expression={$_.IdentifyingNumber}} `
| Sort-Object ComputerName `
| Export-CSV -path c:\VNCInstalled.csv -notype
'select-object -ExpandProperty DisplayVersion'を試してください – wOxxOm
すごく簡単で、ありがとう、ありがとう! – pinchepooch