danielbodensee
Goto Top

Powershell, irritierendes verhalten bei Abfrage

Hallo zusammen,

so langsam macht Powershell richtig spass, mit wenig Zeilen viel erreichen face-smile

Ich bin seit kurzem damit beschäftigt über mein Powershell-Script ein SQL-Server anzusprechen. Soweit passt alles, erst habe ich mein Script geschrieben um die gesuchten Dateien zu listen, dann habe ich ein Script geschrieben um Daten abzulegen, nun wollte ich beides kombinieren und habe was interessantes festgestellt.

Das Script soll auf einem Batch-Server laufen, vom dem aus greife ich auf Shares des Server1 zu, der SQL-Server ist auf dem lokalen Batch-Server. Beides unabhängig voneinander klappt, damit ist die Funktion ja gegeben.

Ich kann entweder alle Files des Share von Server1 auslesen/anzeigen oder nach dem ersten Invoke-sqlcmd nur noch auf den SQL-Server zugreifen, der Share wird plötzlich vom Script nicht mehr gefunden, obwohl ich auf den Share über den File-Explorer direkt zugreifen kann.

Wird hier irgendwie durch den ersten Einsatz (nach frischen Login) durch Invoke-sqlcmd irgendwas an Security getriggert dass das Script den Share nicht mehr "sehen/lesen" kann?

Ich bin etwas irritiert face-smile


Viele Grüsse,
Daniel

Content-ID: 435230

Url: https://administrator.de/contentid/435230

Ausgedruckt am: 18.11.2024 um 01:11 Uhr

Andrew01
Andrew01 01.04.2019 um 21:00:54 Uhr
Goto Top
Hallo Daniel

Ich kann zwar nicht wirklich helfen. Entschuldigung dafür aber ich habe das Gefühl ich werde zu alt für das ganze Zeugs!
Was ist ein "Batch Server"?

Danke
Gruss Andreas
DanielBodensee
DanielBodensee 01.04.2019 um 21:31:10 Uhr
Goto Top
Hallo Andreas,

Sorry, der Begriff wurde bei uns so geprägt, ist natürlich ohne eine Basis...

Wir nennen den so da wir versuchen alle Scripts dort abzulegen und auch hier über ein Task zu starten um Automatisierung etc im Netzwerk bzw Infrastruktur von einem Ort aus zu machen.

Hat also keine Relevanz face-smile

Gruss
Daniel
erikro
erikro 02.04.2019 um 08:07:09 Uhr
Goto Top
Moin,

wie wäre es mit ein wenig Code? Vielleicht lässt es sich dann klären, was da passiert.

Liebe Grüße

Erik
Penny.Cilin
Penny.Cilin 02.04.2019 um 08:31:29 Uhr
Goto Top
Hallo,

zeige doch Deinen Code, dann kann man sehen, was und wie Du es machst. Und Du bekommst Rückmeldungen, welche unter Umständen auch Verbesserungen Deines Codes beinhalten. Es gibt hier ein paar PowerShell Experten.

Gruss Penny.
DanielBodensee
DanielBodensee 02.04.2019 aktualisiert um 19:40:27 Uhr
Goto Top
Hallo zusammen,

also vereinfacht verwende ich die folgende Anweisung:
Get-ChildItem -Path \\server\Snapshot -Include *.pdf,*.docx -Recurse | Select -Property DirectoryName, Name, LastWriteTime, Length | 
    % {
        $_.DirectoryName + "\" + $_.Name  
    }

Diese Anweisung klappt, kann ich mehrfach und mit anderen Shares ausführen.

Nun füge ich ein Datensatz (manuell zusammengestellt) in eine Tabelle ein:
$test = "INSERT INTO [FilesOnSystem].[dbo].[Files] ([FullPathName],[FileName],[LastWriteTime],[Lenght]) VALUES('Pfad und Dateiname','Dateiname','01.04.2019 13:23:52','123456')"  
    Invoke-Sqlcmd -Query $test -ServerInstance "sqlserver\instance"  

Danach kann ich die erste Abfrage auf keinen der Shares mehr ausführen, es wird folgender Fehler geworfen:
ObjectNotFound: (\\chzhbapp673\Snapshot:String) [Get-ChildItem], ItemNotFoundException

Die Lösung war das vorgeben des Provider "filesystem::" da das Script offenbar nicht mehr in der Lage war, den richtigen Provider auszuwählen.

Damit ergab sich folgende Abfrage:
Get-ChildItem -Path filesystem::\\server\Snapshot -Include *.pdf,*.docx -Recurse | Select -Property DirectoryName, Name, LastWriteTime, Length | 
    % {
        $_.DirectoryName + "\" + $_.Name  
    }

Ich kann aber nicht verstehen warum es nach dem Neuanmelden am Server geht, dann spreche ich den SQL-Server an, danach geht die Abfrage dann nicht mehr.

Interessantes verhalten, für mich nur nicht logisch face-smile

Viele Grüsse,
Daniel
erikro
erikro 03.04.2019 um 08:42:30 Uhr
Goto Top
Moin,

spannend. Ich vermute mal, dass das invoke-sqlcmd implizit ein set-location ausführt. Zumindest verstehe ich so die Hilfe von Mircosoft. Lass Dir doch mal mit get-location nach dem Ausführen des Befehls anzeigen, was der aktuelle Kontext ist.

Liebe Grüße

Erik
DanielBodensee
DanielBodensee 05.04.2019 um 21:07:58 Uhr
Goto Top
Hi Erik,

also vor Invoke war die location (Path) auf mein Admin-Profil "c:\users\adm-xxx" gesetzt, danach auf "SQLSERVER:\".

Das also ist Lösung warum das nach einem Invoke nicht mehr klappt face-smile


Gruss,
Daniel
erikro
Lösung erikro 23.04.2019 um 10:02:02 Uhr
Goto Top
Moin,

so, Urlaub ist rum. face-wink Schön, dass der Tipp geholfen hat. Markierst Du dann auch bitte die Frage als gelöst?

Liebe Grüße

Erik