Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Powershell: DB(MSI)-Tabelle auslesen

Frage Microsoft Windows Tools

Mitglied: H41mSh1C0R

H41mSh1C0R (Level 3) - Jetzt verbinden

15.11.2013 um 11:34 Uhr, 2730 Aufrufe, 3 Kommentare

Servus,

Ziel:

Tabelle aus DB(im speziellen handelt es sich hier um eine MSI) auslesen und Inhalt in eine ArrayList schreiben um diese danach an das DataGrid ( aus meiner letzten Frage) zu übergeben.

Die Idee war gewesen via der folgenden Zeile erst den Count zu ermitteln.

01.
$database.GetType().InvokeMember("OpenView", [System.Reflection.BindingFlags]::InvokeMethod, $null, $database, "SELECT Count(*) FROM Test")
Danach mit diesem Counter die Tabelle "Test" erneut zu durchlaufen und die Werte in eine ArrayListe zu schreiben.
Leider wirft er mir bei dem ermitteln des Count bereits einen Fehler, das das Argument NULL sei und nicht übergeben werden kann.

01.
$msiPath = 'c:\temp\setup.msi' 
02.
 
03.
# Create Installer instance 
04.
$installer = New-Object -comObject WindowsInstaller.Installer 
05.
 
06.
# Call Installer.OpenDatabase(name, openMode) 
07.
$database = $installer.GetType().InvokeMember("OpenDatabase", [System.Reflection.BindingFlags]::InvokeMethod, $null, $installer, ($msiPath, 0)) 
08.
 
09.
# Call Database.OpenView(sql) 
10.
$view = $database.GetType().InvokeMember("OpenView", [System.Reflection.BindingFlags]::InvokeMethod, $null, $database, "SELECT COUNT(*) FROM Property") 
11.
 
12.
# Call View.Execute() 
13.
$view.GetType().InvokeMember("Execute", [System.Reflection.BindingFlags]::InvokeMethod, $null, $view, $null) 
14.
 
15.
# Call View.Fetch() 
16.
$record = $view.GetType().InvokeMember("Fetch", [System.Reflection.BindingFlags]::InvokeMethod, $null, $view, $null) 
17.
 
18.
# Get Record.StringData(field) 
19.
$count = $record.GetType().InvokeMember("StringData", [System.Reflection.BindingFlags]::GetProperty, $null, $record, 1) 
20.
 
21.
Write-Host $count
Spezifiziere ich das SQL Statement kann ich mir einzelne Werte ausgeben, allerdings ist das unpraktikabel da ich den Inhalt einer ganzen Tabelle benötige.

Hat von den Spezialisten einer einen Hint?

Gruß
Mitglied: H41mSh1C0R
15.11.2013, aktualisiert um 13:24 Uhr
01.
$msiPath = 'c:\temp\setup.msi' 
02.
$MyArray = @("'ProductName'", "'ProductVersion'") 
03.
 
04.
# Create Installer instance 
05.
$installer = New-Object -comObject WindowsInstaller.Installer 
06.
 
07.
# Call Installer.OpenDatabase(name, openMode) 
08.
$database = $installer.GetType().InvokeMember("OpenDatabase", [System.Reflection.BindingFlags]::InvokeMethod, $null, $installer, ($msiPath, 0)) 
09.
 
10.
$Counter = 0 
11.
do { 
12.
     
13.
    $SelectPropertyName = "SELECT Property FROM Property WHERE Property = " + $MyArray[$Counter] 
14.
    $SelectPropertyValue = "SELECT Value FROM Property WHERE Property = " + $MyArray[$Counter] 
15.
     
16.
    $view = $database.GetType().InvokeMember("OpenView", [System.Reflection.BindingFlags]::InvokeMethod, $null, $database, "$SelectPropertyName") 
17.
    $view.GetType().InvokeMember("Execute", [System.Reflection.BindingFlags]::InvokeMethod, $null, $view, $null) 
18.
    $record = $view.GetType().InvokeMember("Fetch", [System.Reflection.BindingFlags]::InvokeMethod, $null, $view, $null) 
19.
    $resultProperty = $record.GetType().InvokeMember("StringData", [System.Reflection.BindingFlags]::GetProperty, $null, $record, 1) 
20.
 
21.
    $view = $database.GetType().InvokeMember("OpenView", [System.Reflection.BindingFlags]::InvokeMethod, $null, $database, "$SelectPropertyValue") 
22.
    $view.GetType().InvokeMember("Execute", [System.Reflection.BindingFlags]::InvokeMethod, $null, $view, $null) 
23.
    $record = $view.GetType().InvokeMember("Fetch", [System.Reflection.BindingFlags]::InvokeMethod, $null, $view, $null) 
24.
    $resultValue = $record.GetType().InvokeMember("StringData", [System.Reflection.BindingFlags]::GetProperty, $null, $record, 1) 
25.
 
26.
    Write-Host "Result: " $resultProperty " ------ " $resultValue 
27.
    $Counter++ 
28.
29.
while ($Counter -le $MyArray.Count-1)
So bekomme ich zwar nach der Methode "von hinten durch die Brust durchs Auge" die Daten raus wie ich oben das MyArray befülle, aber das ist ja noch nicht ganz das was ich suche. Mal weiter gucken wie ich den Count ermittelt bekomme.

Wenn einer einen Tipp hat immer posten, danke.

Gruß
Bitte warten ..
Mitglied: colinardo
15.11.2013, aktualisiert 20.01.2014
Hi,
check this out:
01.
$msiPath = "c:\temp\setup.msi" 
02.
$installer = New-Object -ComObject WindowsInstaller.Installer 
03.
$database = $installer.GetType().InvokeMember("OpenDatabase", [System.Reflection.BindingFlags]::InvokeMethod, $null, $installer, ($msiPath, 0))  
04.
$view = $database.getType().InvokeMember("OpenView",[System.Reflection.BindingFlags]::InvokeMethod,$null,$database,"SELECT * FROM Property") 
05.
$view.getType().InvokeMember("Execute",[System.Reflection.BindingFlags]::InvokeMethod,$null,$view,$null) 
06.
$r = $view.getType().InvokeMember("Fetch",[System.Reflection.BindingFlags]::InvokeMethod,$null,$view,$null) 
07.
$arr = @() 
08.
while($r -ne $null) { 
09.
        $arr += New-Object PSObject -Property @{Property=$r.getType().InvokeMember("StringData",[System.Reflection.BindingFlags]::GetProperty,$null,$r,1);Value=$r.getType().InvokeMember("StringData",[System.Reflection.BindingFlags]::GetProperty,$null,$r,2)} 
10.
        $r = $view.getType().InvokeMember("Fetch",[System.Reflection.BindingFlags]::InvokeMethod,$null,$view,$null) 
11.
12.
$view.getType().InvokeMember("Close",[System.Reflection.BindingFlags]::InvokeMethod,$null,$view,$null) 
13.
 
14.
$arr | sort -Property Property | select Property,Value
Oder alles zusammengefasst inkl. Anzeige deiner Form
01.
$msiPath =  "c:\temp\setup.msi" 
02.
$installer = New-Object -ComObject WindowsInstaller.Installer 
03.
$database = $installer.GetType().InvokeMember("OpenDatabase", [System.Reflection.BindingFlags]::InvokeMethod, $null, $installer, ($msiPath, 0))  
04.
$view = $database.getType().InvokeMember("OpenView",[System.Reflection.BindingFlags]::InvokeMethod,$null,$database,"SELECT * FROM Property") 
05.
$view.getType().InvokeMember("Execute",[System.Reflection.BindingFlags]::InvokeMethod,$null,$view,$null) 
06.
$r = $view.getType().InvokeMember("Fetch",[System.Reflection.BindingFlags]::InvokeMethod,$null,$view,$null) 
07.
$arr = @() 
08.
while($r -ne $null) { 
09.
        $arr += New-Object PSObject -Property @{Property=$r.getType().InvokeMember("StringData",[System.Reflection.BindingFlags]::GetProperty,$null,$r,1);Value=$r.getType().InvokeMember("StringData",[System.Reflection.BindingFlags]::GetProperty,$null,$r,2)} 
10.
        $r = $view.getType().InvokeMember("Fetch",[System.Reflection.BindingFlags]::InvokeMethod,$null,$view,$null) 
11.
12.
$view.getType().InvokeMember("Close",[System.Reflection.BindingFlags]::InvokeMethod,$null,$view,$null) 
13.
 
14.
$sortedArray = $arr |sort -Property Property | select Property,Value 
15.
$list = [System.collections.ArrayList]$sortedArray 
16.
 
17.
# ---Create Form --- 
18.
Add-Type -AssemblyName "System.Windows.Forms" 
19.
$form = New-Object System.Windows.Forms.Form 
20.
$form.Size = New-Object System.Drawing.Size(900,600) 
21.
$dataGridView = New-Object System.Windows.Forms.DataGridView -Property @{ 
22.
    Size=New-Object System.Drawing.Size(900,600) 
23.
    ColumnHeadersVisible = $true 
24.
    DataSource = $list 
25.
    AutoSizeColumnsMode = 16 
26.
    Dock = 5 
27.
28.
 
29.
$form.Controls.Add($dataGridView) 
30.
$form.ShowDialog()
Grüße Uwe
Bitte warten ..
Mitglied: H41mSh1C0R
15.11.2013 um 20:03 Uhr
Hallo Uwe,

schonmal danke für deine Mühe.
Ich baue am Montag weiter, wenn ich wieder in der Nähe von der Powershell bin.

Gruß
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Eigenschaften einer MSI-Datei abfragen (Powershell)
gelöst Frage von 114757Batch & Shell2 Kommentare

Hallo liebe Admins, meine Powershell-Kenntnisse sind eher noch rudimentär, und ich wollte mich an eine Aufgabe heranwagen die vielleicht ...

Batch & Shell
PowerShell: Fileserver ACLs auslesen
gelöst Frage von itsmetimBatch & Shell2 Kommentare

Hallo zusammen, ich habe mir ein kleines Script gebaut, um ACLs von Ordnern und deren Unterordnern auszulesen. Get-ChildItem \\Pfad\Freigabe ...

Batch & Shell
Powershell Skripten, Netzwerk auslesen
gelöst Frage von CaramianBatch & Shell3 Kommentare

Guten Tag Ich sollte ein Powershellskript erstellen, dass alle Netzwerkinformationen wie z.B. IP Adresse, Mac Adresse, Computername usw. und ...

Batch & Shell
Powershell INI Tags auslesen
gelöst Frage von H41mSh1C0RBatch & Shell2 Kommentare

Hi@All, Vorgabe INI. Aus dem File will ich die Namen der Bereiche auslesen und in einen String packen mit ...

Neue Wissensbeiträge
MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 15 StundenMikroTik RouterOS5 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 15 StundenSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Administrator.de Feedback

Entwicklertagebuch: Die Startseite wurde überarbeitet

Information von admtech vor 17 StundenAdministrator.de Feedback9 Kommentare

Hallo Administrator User, mit dem Release 5.7 haben wir unsere Startseite überarbeitet und die Beiträge und Fragen voneinander getrennt. ...

Vmware

VMware Desktopprodukte sind verwundbar

Information von Penny.Cilin vor 22 StundenVmware

Die VMware-Anwendungen zum Umgang mit virtuellen Maschinen Fusion, Horizon Client und Workstation sowie die Plattform NSX sind verwundbar. Davon ...

Heiß diskutierte Inhalte
Windows Netzwerk
Netzwerk Neustrukturierung
Frage von IT-DreamerWindows Netzwerk16 Kommentare

Hallo verehrte Community und Admins, bei uns im Haus steht eine Neustrukturierung an. Dafür benötige ich von euch ein ...

Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server16 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Festplatten, SSD, Raid
USB Stick recovery
Frage von petereFestplatten, SSD, Raid15 Kommentare

Hallo, ich habe einen defekten USB-Stick, der nicht mehr lesbar ist. Er wird in WIN als unbekanntes Volume mit ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...