newbi2009 1 Geschrieben 31. Mai 2023 Melden Teilen Geschrieben 31. Mai 2023 Hallo Forum, ich habe ein kleines Problem und hoffe, es gibt eine einfache Lösung hierzu: Ich habe ein Powershell-Skript geschrieben, welches ich auf einem Netzlaufwerk (nennen wir es Z:\Skripte\meinSkript.ps1) abgelegt habe. Dieses Skript schreibt Log-Dateien, die im gleichen Verzeichnis erzeugt werden sollen (Z:\Skripte\Logs) Ausserdem soll dieses Skript von allen meinen Kollegen benutzt werden können, die sich das Netzlaufwerk aber nicht alle mit "Z:\" gemappt haben. Um die Log-Datein also an dem gewünschten Ort abzulegen, muss ich den Netzwerkpfad der ps1-Datei auslesen. Jetzt gibt es ein paar Probleme: - Windows öffnet ps.1-Dateien standardmäßig mit einem Text-Editor (Doppelklick auf die Datei führt diese nicht aus) - Ich kann/darf aus der ps.1 keine exe kompilieren, die per Doppelklick ausgeführt werden könnte - mein Script MUSS in einer 32 Bit Variante von PowerShell ausgeführt werden (weil ich Lotus Notes abfrage) - Das heisst, "rechter Mausklick/öffnen mit Powershell" lässt das Skript abbrechen, weil Powershell standardmäßig in einer 64 bit Version startet Ich muss das Skript also in einer "Powershell ISE" öffnen (vor Allem meine nicht PowerShell-affinen Kollegen). Hier steht der Fokus natürlich auf C:\Windows\System32 Lese ich jetzt den Pfad mit "get-location" oder "PWD" aus, bekomme ich natürlich "C:\Windows\System32" geliefert. Dies kann ich dann natürlich nicht verwenden, um den Pfad für eine Log-Datei in dem Netzlaufwerk zu generieren. Ich kann den Kollegen auch nicht sagen, dass sie sich das Programmverzeichnis alle auf den eigenen Rechner kopieren sollen und die erzeugten Logs dann manuell auf dem Netzlaufwerk ablegen sollen. Wie bekomme ich also in der "Power Shell ISE" den Pfad in eine Variable, in der die ps1-Datei liegt? Vielen Dank für einen Tipp Gruß Holger Zitieren Link zu diesem Kommentar
Nobbyaushb 1.471 Geschrieben 31. Mai 2023 Melden Teilen Geschrieben 31. Mai 2023 vor 6 Minuten schrieb newbi2009: Dieses Skript schreibt Log-Dateien, die im gleichen Verzeichnis erzeugt werden sollen (Z:\Skripte\Logs) Ausserdem soll dieses Skript von allen meinen Kollegen benutzt werden können, die sich das Netzlaufwerk aber nicht alle mit "Z:\" gemappt haben. Moin Holger, wozu Laufwerk? Der UNC Pfad dürfe bei allen Anwendern gleich sein... Und es wäre ggf. hilfreich, wenn die Script-Experten (wie z.B. Olaf ...) das mal sehen könnten... Einfach als Code einfügen... Warum darfst du das nicht kompilieren? Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 31. Mai 2023 Melden Teilen Geschrieben 31. Mai 2023 (bearbeitet) vor 41 Minuten schrieb newbi2009: Jetzt gibt es ein paar Probleme: Das ist das falsche Wort. Wir nennen das Herausforderung. vor 41 Minuten schrieb newbi2009: - Windows öffnet ps.1-Dateien standardmäßig mit einem Text-Editor (Doppelklick auf die Datei führt diese nicht aus) Hangeln sich Deine Kollegen alle in diesen Ordner und führen das Dingens aus, oder wäre es nicht eine Idee, den Kollegen eine Verknüpfung in Startmenü oder auf dem Desktop zur Verfügung zu stellen? Da können sie dann auch einfach drauf klicken. vor 41 Minuten schrieb newbi2009: - mein Script MUSS in einer 32 Bit Variante von PowerShell ausgeführt werden (weil ich Lotus Notes abfrage) - Das heisst, "rechter Mausklick/öffnen mit Powershell" lässt das Skript abbrechen, weil Powershell standardmäßig in einer 64 bit Version startet Für diese Herausforderung wäre auch eine entsprechende Verknüpfung die Lösung. Darin kann man problemlos die 32-Bit-Version der PowerShell "hart verdrahten" und das Script per UNC-Pfad übergeben. vor 41 Minuten schrieb newbi2009: Ich muss das Skript also in einer "Powershell ISE" öffnen Warum? Die ISE ist nur für die Script-Entwicklung gedacht - ausgeführt werden Scripte üblicherweise mit PowerShell.exe. vor 41 Minuten schrieb newbi2009: Lese ich jetzt den Pfad mit "get-location" oder "PWD" aus, Dafür gibt es die zur Laufzeit automatisch befüllte Variable "$PSScriptRoot". vor 41 Minuten schrieb newbi2009: Dieses Skript schreibt Log-Dateien, die im gleichen Verzeichnis erzeugt werden sollen (Z:\Skripte\Logs) Je nach Umfang des Scripts und der erzeugten Log-Dateien, ist es keine gute Idee direkt auf einem Netzlaufwerk zu loggen. Dateisystem-Zugriffe bremsen sowieso schon enorm. Und wenn das dann noch Richtung Netzwerk geht vermindert das die Leistung nochmal deutlich. bearbeitet 31. Mai 2023 von BOfH_666 Zitieren Link zu diesem Kommentar
newbi2009 1 Geschrieben 31. Mai 2023 Autor Melden Teilen Geschrieben 31. Mai 2023 Hallo Nobby, danke für die Antwort. Naja, die Firmen-Policies lassen es einfach nicht zu, exe-Dateien selber zu kompilieren Der UNC-Pfad sollte tatsächlich bei allen Benutzern gleich sein. Dann müsste ich den "Installationspfad" aber manuell in das Skript schreiben ala: \\Server\Freigabe\Skripte Das würde mit Sicherheit auch funktionieren. Ich würde das Ganze aber gerne eleganter lösen. Z.B. für den Fall, dass das Verzeichnis "Skripte" einmal an einen anderen Ort verschoben werden sollte Mein Skript sieht in etwa so aus: function Uhr() { $Date = Get-Date $Time= $Date.toString()("yyyy-MM-dd_HH.mm.ss") $Datum= $Time.toString("yyyy-MM-dd") } $InstallPath = $PWD.ToString() Uhr $LogDateiName = "$InstallPath\Logs\$Satum\MeinSkriptname_" + $Time +".log" . . . write-output "Diese Zeile soll in die Log-Datei eingetragen werden" | Tee-Object -FilePath $LogDateiName -append Danke und Gruß Holger Hallo BOfH_666, auch Dir "danke" für Deine Antwort. Ich möchte es eigentlich vermeidenzu allen Kollegen zu latschen und einen Link auf die ps.1-Datei zu erstellen. Ausserdem bin ich mir nicht ganz sicher, ob der Link das Problem lösen würde. Es würde dann doch der Pfad des lokalen Rechners ausgelesen - also würden die Log-Dateien wieder nicht alle im gleichen Verzeichnis (Netzlaufwerk) landen..... Dass die Datei mit der PowerShell.exe ausgeführt werden sollte ist mir schon klar. Aber es wird (glaube ich) halt standardmäßig die 64bit Version ausgeführt, die gegen die Pumpe läuft, wenn man versucht damit eine LotusNotes-Anwendung auszulesen.... Und alles andere als rechter Mausklick / Ausführen mit kann ich meinen Kollegen nicht zumuten Zitieren Link zu diesem Kommentar
Beste Lösung Sunny61 806 Geschrieben 31. Mai 2023 Beste Lösung Melden Teilen Geschrieben 31. Mai 2023 Zum Thema Pfad des Scriptes auslesen findest Du hier ein Beispiel: https://www.itnator.net/psscriptroot-beinhaltet-pfad-des-powershell-scripts/ Bau dir das mal in dein Script an der richtigen Stelle ein und lass dir mit write-host $PSScriptRoot den Pfad ausgeben. Wenn es der richtige ist, dann geht es weiter. Verknüpfungen legt man nicht manuell an, sondern lässt sie per GPO bei den betroffenen Usern *aktualisieren*, dann passt der Aufruf. ;) Zitieren Link zu diesem Kommentar
newbi2009 1 Geschrieben 31. Mai 2023 Autor Melden Teilen Geschrieben 31. Mai 2023 vor 44 Minuten schrieb Sunny61: Zum Thema Pfad des Scriptes auslesen findest Du hier ein Beispiel: https://www.itnator.net/psscriptroot-beinhaltet-pfad-des-powershell-scripts/ Bau dir das mal in dein Script an der richtigen Stelle ein und lass dir mit write-host $PSScriptRoot den Pfad ausgeben. Wenn es der richtige ist, dann geht es weiter. Verknüpfungen legt man nicht manuell an, sondern lässt sie per GPO bei den betroffenen Usern *aktualisieren*, dann passt der Aufruf. ;) THIS did the trick Vielen Dank!! Zitieren Link zu diesem Kommentar
testperson 1.675 Geschrieben 31. Mai 2023 Melden Teilen Geschrieben 31. Mai 2023 Hi, wenn du den aktuellen Pfad auch in der ISE benötigst: if([string]::IsNullOrEmpty($PSScriptRoot)){ # Wir sind in der ISE $Scriptpath = $psISE.CurrentFile.FullPath -replace $psISE.CurrentFile.DisplayName $Scriptpath = $Scriptpath.TrimEnd("\") } else{ # Wir sind in der PowerShell $Scriptpath = $PSScriptRoot } Gruß Jan Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 31. Mai 2023 Melden Teilen Geschrieben 31. Mai 2023 vor 3 Stunden schrieb newbi2009: Ich möchte es eigentlich vermeidenzu allen Kollegen zu latschen und einen Link auf die ps.1-Datei zu erstellen. Dafür gibt es Software-Deployment-Lösungen oder GPOs. vor 3 Stunden schrieb newbi2009: Ausserdem bin ich mir nicht ganz sicher, ob der Link das Problem lösen würde. Ich schon. vor 3 Stunden schrieb newbi2009: Es würde dann doch der Pfad des lokalen Rechners ausgelesen - also würden die Log-Dateien wieder nicht alle im gleichen Verzeichnis (Netzlaufwerk) landen..... Nein, würde es nicht. vor 3 Stunden schrieb newbi2009: Dass die Datei mit der PowerShell.exe ausgeführt werden sollte ist mir schon klar. Aber es wird (glaube ich) halt standardmäßig die 64bit Version ausgeführt, die gegen die Pumpe läuft, wenn man versucht damit eine LotusNotes-Anwendung auszulesen.... Deswegen schrub ich auch, dass Du die 32-Bit-Version in der Verknüpfung "FEST VERDRAHTEN" kannst. Du kannst doch selbst bestimmen, was ausgeführt wird, indem Du den gewünschten Pfad der 32-Bit-Version der PowerShell.exe angibst. vor 3 Stunden schrieb newbi2009: Und alles andere als rechter Mausklick / Ausführen mit kann ich meinen Kollegen nicht zumuten Dazu sage ich jetzt nix weiter. Zitieren Link zu diesem Kommentar
cj_berlin 1.313 Geschrieben 31. Mai 2023 Melden Teilen Geschrieben 31. Mai 2023 vor 4 Stunden schrieb newbi2009: - Ich kann/darf aus der ps.1 keine exe kompilieren, die per Doppelklick ausgeführt werden könnte Da sage ich nur, iexpress,exe - der Klassiker seit Windows NT (gefühlt) Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 31. Mai 2023 Melden Teilen Geschrieben 31. Mai 2023 (bearbeitet) Ich hätte ja dann einfach ne CMD gemacht gleichen Namens mit - sinngemäß - diesem Inhalt: %systemroot%\WindowsPowershell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "%~dpn0.ps1" Die startet mit Doppelklick problemlos, weil die Verknüpfung von .CMD zu cmd.exe in nahezu keiner Umgebung aufgehoben wird. Ob man in 32 oder 64 Bit läuft, läßt sich dann über $env:Processor_Architecture herausfinden, und notfalls spawnt man sich selbst dann noch mal aus Syswow64. Hab ich alles schon hinter mir Warum muß man immer alles compilen und rückwärts durch den Kamelhintern durch das Nadelöhr fädeln? SCNR 😂 bearbeitet 31. Mai 2023 von daabm Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.