Probleme beim Schreiben eines WMI bzw. WMIC-Abfrageergebnisses in eine Textdatei
Hallo an alle!
Ich will eine -wirklich- kleine Softwarebestandsführung aufbauen.
Aus einer CMD-Datei rufe ich folgende Befehle auf:
@chcp 1252 >nul
@wmic /node:%Computername% product where "Name like '%%Adobe%%'" get name,version,vendor >c:\users\public\Adobe_Installationen.txt
Ergebnis:
Wunderbar! Passt so.
Damit ich die Abfrage für mehrere Clients ausführen und danach auswerten kann, hätte ich gerne den jeweiligen Computernamen mit in die Ausgabedatei hineingepackt.
Am liebsten würde ich die vorhandene Tabelle um diese Information ergänzen. Mit wmi/wmic habe ich im Bereich "product" nichts gefunden, nur im Bereich "OS" den Wert aus "CSName".
Frage 1: Weiß jemand eine Möglichkeit, wie ich diese Tabelle um den Computernamen ergänzen kann?
Ich habe dann versucht, vor oder nach den obigen Befehlen den Computernamen mit dem Befehl
@echo %Computername% >c:\users\public\Adobe_Installationen.txt
in die Ausgabedatei einzufügen. Das Ergebnis war jedes Mal unbefriedigend:
1.) Wenn ich vorher den Computernamen einfüge, dann werden die Tabelleninformationen GESPERRT und ohne Zeilenumbrüche ausgegeben (den Computernamen habe ich in der Textdatei geändert):
2.) Wenn ich den Computernamen anhänge, erhalte ich ASIATISCHE SCHRIFTZEICHEN:
Frage 2: Hat hier jemand eine Idee, wie ich diese Probleme lösen kann?
Vielen Dank im Voraus.
Gruß
Klaus Nagel
Ich will eine -wirklich- kleine Softwarebestandsführung aufbauen.
Aus einer CMD-Datei rufe ich folgende Befehle auf:
@chcp 1252 >nul
@wmic /node:%Computername% product where "Name like '%%Adobe%%'" get name,version,vendor >c:\users\public\Adobe_Installationen.txt
Ergebnis:
Wunderbar! Passt so.
Damit ich die Abfrage für mehrere Clients ausführen und danach auswerten kann, hätte ich gerne den jeweiligen Computernamen mit in die Ausgabedatei hineingepackt.
Am liebsten würde ich die vorhandene Tabelle um diese Information ergänzen. Mit wmi/wmic habe ich im Bereich "product" nichts gefunden, nur im Bereich "OS" den Wert aus "CSName".
Frage 1: Weiß jemand eine Möglichkeit, wie ich diese Tabelle um den Computernamen ergänzen kann?
Ich habe dann versucht, vor oder nach den obigen Befehlen den Computernamen mit dem Befehl
@echo %Computername% >c:\users\public\Adobe_Installationen.txt
in die Ausgabedatei einzufügen. Das Ergebnis war jedes Mal unbefriedigend:
1.) Wenn ich vorher den Computernamen einfüge, dann werden die Tabelleninformationen GESPERRT und ohne Zeilenumbrüche ausgegeben (den Computernamen habe ich in der Textdatei geändert):
2.) Wenn ich den Computernamen anhänge, erhalte ich ASIATISCHE SCHRIFTZEICHEN:
Frage 2: Hat hier jemand eine Idee, wie ich diese Probleme lösen kann?
Vielen Dank im Voraus.
Gruß
Klaus Nagel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 381956
Url: https://administrator.de/contentid/381956
Ausgedruckt am: 22.11.2024 um 02:11 Uhr
5 Kommentare
Neuester Kommentar
Moin,
nimm die Powershell:
Ergebnis:
<edit>Das sehe ich jetzt erst, dass der Name abgeschnitten wird. Dann vielleicht besser so:
Dann sieht das so aus:
hth
Erik
nimm die Powershell:
PS P:\ldap> Get-WmiObject win32_product | Where-Object {$_.name -like "*Adobe*"} | Select-Object Name, Vendor, Version,
PSComputerName | out-file P:\software.txt -append
Ergebnis:
Name Vendor Version PSComputerName
---- ------ ------- --------------
Adobe Refresh Manager Adobe Systems Incorporated 1.8.0 XXXXXX
Adobe Acrobat Reader DC - ... Adobe Systems Incorporated 18.011.20055 XXXXXX
<edit>Das sehe ich jetzt erst, dass der Name abgeschnitten wird. Dann vielleicht besser so:
PS P:\ldap> Get-WmiObject win32_product | Where-Object {$_.name -like "*Adobe*"} | Select-Object Name, Vendor, Version,
PSComputerName |Format-List | out-file P:\software.txt -append
Dann sieht das so aus:
Name : Adobe Refresh Manager
Vendor : Adobe Systems Incorporated
Version : 1.8.0
PSComputerName : XXXXXXX
Name : Adobe Acrobat Reader DC - Deutsch
Vendor : Adobe Systems Incorporated
Version : 18.011.20055
PSComputerName : XXXXXXX
hth
Erik
Moin,
das kommt weil WMIC Unicode ausgibt. Abhilfe mit "more", siehe hier: https://superuser.com/questions/812438/combine-batch-wmic-ansi-unicode-o ...
lg,
Slainte
das kommt weil WMIC Unicode ausgibt. Abhilfe mit "more", siehe hier: https://superuser.com/questions/812438/combine-batch-wmic-ansi-unicode-o ...
lg,
Slainte
Zitat von @erikro:
nimm die Powershell:
Enthält nicht alle installierten Programme und kann auf bestimmten Rechnern sehr viel Zeit in Anspruch nehmen da der Windows-Installer angetriggert wird. Also besser gleich auch das was nicht per Installer erfasst wurde aus der Registry auslesen:nimm die Powershell:
PS P:\ldap> Get-WmiObject win32_product | Where-Object {$_.name -like "*Adobe*"} | Select-Object Name, Vendor, Version,
> PSComputerName | out-file P:\software.txt -append
function Get-InstalledSoftware {
param(
[parameter(mandatory=$true)][ValidateNotNullOrEmpty()][string]$Computer
)
$all = @();$hklm = 2147483650; $hkcu = 2147483649
# Subkeydefinition for Uninstallinformation
$key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
$key64 = "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
try{
# connect to StdRegProv via Remote-WMI
$reg = gwmi -List "StdRegProv" -ComputerName $Computer -Namespace root\Default
# scriptblock function to get desired Information
$getnodedata = {
param($section,$k)
$reg.EnumKey($section,$k).sNames | %{
[pscustomobject] @{
Name=$reg.GetStringValue($section,"$k\$_","DisplayName").sValue
Version=$reg.GetStringValue($section,"$k\$_","DisplayVersion").sValue
InstallLocation=$reg.GetStringValue($section,"$k\$_","InstallLocation").sValue
InstallSource=$reg.GetStringValue($section,"$k\$_","InstallSource").sValue
UninstallString=$reg.GetStringValue($section,"$k\$_","UninstallString").sValue
InstallDate=$reg.GetStringValue($section,"$k\$_","InstallDate").sValue
}
}
}
# call scriptblock function
$all += .$getnodedata $hklm $key
$all += .$getnodedata $hkcu $key
# call scriptblock function for 64bit section if available
if ((gwmi Win32_OperatingSystem -ComputerName $computer).OSArchitecture -eq '64-Bit'){
$all += .$getnodedata $hklm $key64
$all += .$getnodedata $hkcu $key64
}
}catch{
throw $_.Exception.Message
}
# return sorted and unique object data
return ($all | ?{$_.Name -ne $null} | sort Name | select Name,Version,InstallLocation,InstallSource,UninstallString,InstallDate -Unique)
}
Get-InstalledSoftware -Computer $env:COMPUTERNAME | ?{$_.Name -like '*Adobe*'}