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-Key: 435230

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

Printed on: April 25, 2024 at 02:04 o'clock

Member: Andrew01
Andrew01 Apr 01, 2019 at 19:00:54 (UTC)
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
Member: DanielBodensee
DanielBodensee Apr 01, 2019 at 19:31:10 (UTC)
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
Member: erikro
erikro Apr 02, 2019 at 06:07:09 (UTC)
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
Member: Penny.Cilin
Penny.Cilin Apr 02, 2019 at 06:31:29 (UTC)
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.
Member: DanielBodensee
DanielBodensee Apr 02, 2019 updated at 17:40:27 (UTC)
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
Member: erikro
erikro Apr 03, 2019 at 06:42:30 (UTC)
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
Member: DanielBodensee
DanielBodensee Apr 05, 2019 at 19:07:58 (UTC)
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
Member: erikro
Solution erikro Apr 23, 2019 at 08:02:02 (UTC)
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