jeffrey
Goto Top

Lokales Powershell Script in eine MS SQL Datenbank einlesen

Habe eine schwierige Frage eine lokales Powershell Script was auch automatisch ausgeführt wurde, soll per Script in eine MSQl Datenbank geschrieben werden wie funktioniert das?

Da der Client ja nicht in einer AD ist stelle mir das iregndwie schwierig vor .

Content-ID: 353835

Url: https://administrator.de/forum/lokales-powershell-script-in-eine-ms-sql-datenbank-einlesen-353835.html

Ausgedruckt am: 22.12.2024 um 18:12 Uhr

BassFishFox
BassFishFox 06.11.2017 um 17:48:47 Uhr
Goto Top
Hallo,

Ich kann mir vorstellen, dass in Deinem Satz...

Habe eine schwierige Frage eine lokales Powershell Script was auch automatisch ausgeführt wurde, soll per Script in eine MSQl Datenbank geschrieben werden wie funktioniert das?

... einige . und Woerter fehlen?

BFF
jeffrey
jeffrey 06.11.2017 um 18:02:52 Uhr
Goto Top
ja kann sein meine Tastatur spinnt ein wenig muss Sie austauschen
BassFishFox
BassFishFox 06.11.2017 um 18:07:06 Uhr
Goto Top
Dann tu es bitte jetzt. face-wink


BFF
jeffrey
jeffrey 06.11.2017 aktualisiert um 19:22:11 Uhr
Goto Top
Habe eine schwierige Frage eine lokales Powershell Script was auch automatisch am lokalen Client ausgeführt wird.
Die Datei soll in eine MSQl Datenbank geschrieben und auch Abgespeichert werden.
Ich weiß nicht wie das funktionieren sollte, persönlich habe ich gar keine Ahnung von MS SQL.
Ich habe mich diesbezüglich belesen, aber kann dafür kein Script erstellen.
Der Client ist in keiner Domäne oder im Ad nur im Netzwerk.
Kann mir da bitte jemand von euch helfen.


Vielen Dank in voraus
BassFishFox
BassFishFox 06.11.2017 um 19:44:37 Uhr
Goto Top
Oh Boy!

eine lokales Powershell Script was auch automatisch am lokalen Client ausgeführt wird

Das lokale Script tut was ausser ausgefuehrt zu werden? Kannst Du das Script mal hier posten? Natuerlich als Codeblock.

Die Datei soll in eine MSQl Datenbank geschrieben und auch Abgespeichert werden.

Ist mit Datei zufaellig ein Ergebnis gemeint, welches durch das obige Script generiert ist?
Was ist dass fuer eine Datei? Welches Format?

Ich weiß nicht wie das funktionieren sollte, persönlich habe ich gar keine Ahnung von MS SQL.

Warum tust Du Dir das Ganze dann an? Auftrag von Cheffe, Ausbilder usw.?

BFF
H41mSh1C0R
H41mSh1C0R 06.11.2017 um 20:16:50 Uhr
Goto Top
Der Freitag naaaaaaaht ^^.
HL1234
HL1234 07.11.2017 um 00:57:56 Uhr
Goto Top
ich möchte nicht die komplette Lösung geben denn dazu müsste ich genauer nachlesen - nur ein paar grundsätzliche Überlegungen; vielleicht sind die auch schon klar.
1. ein Skript soll in MySQL geschrieben werden. Das geht nicht.
- geht doch wenn man bedenkt a) MySQL ist ein Datenbank Managementsystem ein DBMS; wie Microsoft SQL Server.
2. Diese beinhalten Datenbanken (DB)
3. Die DB haben Tabellen (eine, 3 oder mehrere hundert face-smile )
4. Die Tabellen haben Felder; z.Bsp:
index-nr, Datum (wann erstellt), Textfeld (z.Bsp mit einem Powerpoint-skript Text)
5. wenn das alles dann da ist benutzt man SQL als "Abfragesprache" und die Tabellen zu lesen aber auch um diese zu füllen. Und man benutzt SQL auch um DB zu erzeugen, zu löschen und Tabellen (einige sagen auch Relationen) zu erstellen , zu löschen..

#mysql aufrufen ev. mit -p password und -u username Damit kann man sich an der DB anmelden
mysql> use MeinePowerpointDB //DB auswählen
mysql> mit Insert in die entsprechende Tabelle eine Zeile neu erzeugen oder mit Update eine entsprechende Tabellenzeile verändern. Die genau Syntax bitte in der Doku nachschauen; ich will nicht was zusammenschreiben, was dann ev. Fehler hat (siehe oben 1. Satz)

Man kann aber auch statt interaktiv zu handeln alle SQL Befehle in eine SQL-Datei schreiben diese mit
#mysql -u db_user -p db_userpassword DB-NAME < datei.sql
von der Kommandozeile ausführen.

Statt dem Ausführen über die Kommandozeile kannst du auch ein Shell-Skript oder Batchskript erstellen das Dein Powerpoint Befehl übernimmt einliest oder das Ergebnis des PS einliest und mit einer Varaible an die richtige Stelle der SQL Anweisung platzierst, die Du dann in dem Batch-Skript ausführt.

Umgekehrt könnte man auch mit SQL und einem Batchskript für einen bestimmten Datensatz ein Textfeld (mit einem Powerpointskript) auslesen und den Text (das Powerpoint-Skript) dann ausführen lassen.

Die Abschließende Idee wäre dann noch eine weiteres Batchskipt mit einem Menu zur Auswahl diverser Powerpoint Befehle; um z.Bsp Wartungsaufgaben als Admin einfacher ablaufen zu lassen, statt alles immer wieder neu einzugeben...
BassFishFox
BassFishFox 07.11.2017 aktualisiert um 01:45:14 Uhr
Goto Top
Hallo,

Umgekehrt könnte man auch mit SQL und einem Batchskript für einen bestimmten Datensatz ein Textfeld (mit einem Powerpointskript) auslesen und den Text (das Powerpoint-Skript) dann ausführen lassen.

Die Abschließende Idee wäre dann noch eine weiteres Batchskipt mit einem Menu zur Auswahl diverser Powerpoint Befehle; um z.Bsp Wartungsaufgaben als Admin einfacher ablaufen zu lassen, statt alles immer wieder neu einzugeben...

Es war keine so gute Idee so kurz nach Mitternacht nochwas zu tippen. face-wink

BFF
ukulele-7
ukulele-7 07.11.2017 um 09:26:00 Uhr
Goto Top
Es geht außerdem um MSSQL, nicht MySQL

Theoretisch kann man auch mit einem Batch SQL Befehle am einem MSSQL Server ausführen, das erfordert allerdings eine Authentifizierung am SQL Server, der muss dafür auch nicht in einer Domäne sein. Die Zugangsdaten stehen allerdings im Klartext in dem Script.

Grundsätzlich entscheidend ist aber erstmal die Frage was wirklich in die DB soll, das Script? Das Ergebnis?
jeffrey
jeffrey 07.11.2017 um 09:36:18 Uhr
Goto Top
In die Datenbank soll nur das Ergebnis bei dem MSSql wird dur Windows Authentifizierung angemeldet.

Um die Frage zu beantworten für was ich das benötige, mein Chef hat mich drum gebeten da ich der einzigste Technikaffine bin in unserer Firma, habe mir in den letzten Jahren soweit es geht selber bei gebracht.
Nur stocke ich jetzt bei der Aufgabe
134464
134464 07.11.2017 aktualisiert um 11:30:59 Uhr
Goto Top
Ich sehe hier das Problem nicht. Powershell Skripte zum Schreiben von Daten in eine MSSQL Datenbank gibt es wie Sand am Meer. Einfach das ganze Skript mit den benötigten Windows-Credentials starten oder sie im Tresor ablegen, den MSSQL auf TCP/IP Verbindung stellen und fertig.
Ansonsten SQL Auth aktivieren geht natürlich wie immer auch.
HL1234
HL1234 07.11.2017 um 21:30:36 Uhr
Goto Top
stimmt face-smile
ich habe aus dem Tippfehler MSQL "MySQL" gemacht. Hatte mich später auch gewundert warum wenn er von AD und Powerskript schreibt die keinen Microsoft SQL Server nehmen.
jeffrey
jeffrey 08.11.2017 um 14:53:28 Uhr
Goto Top
Ich habe jetzt folgenden Befehl

write ObjectToSQL -Server MSSQL -Database Logdaten if not exist Create Tables Logdaten

er erzeugt bei der Powershell kein Fehler , aber er trägt auch nichts ein.
134464
134464 08.11.2017 um 14:59:16 Uhr
Goto Top
Dat is ja auch kein Powershell was du da postest ...
jeffrey
jeffrey 18.11.2017 aktualisiert um 08:20:10 Uhr
Goto Top
Habe jetzt mal dran gearbeitet, aber leider funktioniert das immernoch nicht, da steckt wohl noch ein kleiner Fehler drin.

Hoffe jemand kann mir da helfen

param(
[string]$type
)
[pscustomobject] @{
'Type' = $type
'Username' = $env:UserName
'Date' = (get-date -format "dd.MM.yy")
'Time' = (Get-Date -format "H:MM:ss")
'Computer'= ($Computer = gc env:computername)
}

Get-Process | Export-Csv '172.16.1.20' -NoType -delimiter ';' -Encoding UTF8 -Append
write ObjectToSQL -Server MSSQL -Database Logdaten

INSERT INTO table_name (Anmeldung, Type, Datum, Uhrzeit,computer)
VALUES (Type,Username,date, Time. Computer);

Anmeldung [value = ($type)]
Username [value = ($env:UserName)]
Date [value = (Get-Date -Format "dd.MM.yy")]
Anmeldezeit [value = ($start_time)]
Abmeldezeit [value = ($end_time)]
Computer [value = ($Computer)]
script
134464
134464 18.11.2017 aktualisiert um 08:44:13 Uhr
Goto Top
Wie gesagt, das ist "SQL" kein Powershell, das kannst du nicht einfach so in ein PS-Script schreiben, dazu nimmt man ein ODBC Object und schreibt das in die "Command" Eigenschaft.
Beispiele dazu findest du zu 1000enden im Netz.
Bei Bedarf leiste ich gerne Hilgestellung gegen Cash.
jeffrey
jeffrey 26.11.2017 aktualisiert um 19:25:24 Uhr
Goto Top
Hallo soweit habe ich es hinbekommen, nur leider hakt es an der letzten Instanz. Sobald ich das Insert eingebe bekomme ich eine Fehlermeldung

$Type = $type
$Name = $env:Username
$Date = (get-date -format "dd.MM.yyyy")
$Time = (Get-Date).ToShortTimeString()
$Computer = ($Computer = gc env:computername)
Write-Output (get-date -format "dd.MM.yyyy")


$SQLServer = "172.16.0.20"
$SQLDBName = "Logdaten"
$uid ="admlogin"
$pwd = "Passw0rd"
$SqlQuery = "SELECT * from logins;"

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = False; User ID = $uid; Password = $pwd;"
Write-Output $SqlConnection
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet

insert into -Server 172.16.0.20 -Database Logdaten table_name (Type, Name, Date, Time, Computer);

VALUES (Type, Name, Date, Time, Computer);

Type [value = ($type)]
Name [value = ($env:UserName)]
Date [value = (Get-Date -Format "dd.MM.yy")]
Time [value = (Get-Date).ToShortTimeString()]
Computer [value = ($Computer)]


if ($sqlConnection.State -eq [Data.ConnectionState]::Open) {

$sqlConnection.Close()

}


Er merkert immer nach dem Type das komma an, habe viele Varianten versucht aber nichts hat geholfen
sql5
sql3
sql2
134464
134464 26.11.2017 aktualisiert um 19:54:02 Uhr
Goto Top
Sorry du hast immer noch nicht verstanden face-sad. Du kannst keinen SQL-String einfach in die Powershell schreiben!!!!'!!!!!!!!!!!!!!! Deswegen meckert er ja auch deine Syntaxfehler an ....
Du musst den SQL-Befehl in der Command-Proerty an den Server übermitteln!!!
Das machst du ja oben korrekt mit der $sqlquery, das selbe musst du nun für den Insert-Befehl machen.
Aber anschließend natürlich auch mit ExecuteNonQuery() ausführen!

Man man man hast du Zeit für so was billiges face-smile.

Les doch zur Abwechslung mal die Dokumentation anstatt nur dumm rum zu probieren ... Dann stemmt das auch ein Anfänger in einer halben Stunde.