Warum führt das Aufrufen eines PS1-Skripts aus einer Batchdatei dazu, dass externe Skripts nicht ausgeführt werden?

Warum führt das Aufrufen eines PS1-Skripts aus einer Batchdatei dazu, dass externe Skripts nicht ausgeführt werden?

Ich arbeite mit einigen Skripten, bei denen ich einige PowerShell-Skripte (.ps1) aus Batchdateien aufrufe. Ich schaffe es nicht, dies in dieser speziellen Situation zum Laufen zu bringen:

Ich habe folgende Batchdatei:

@echo off
TITLE Modifying Quick Access Pinned Items
color f0
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& 'r:\Tools\QuickAccessPin.ps1'";

QuickAccessPin.ps1:

.\Set-QuickAccess.ps1 -Action Unpin -Path "$env:userprofile\Desktop"
.\Set-QuickAccess.ps1 -Action Unpin -Path "$env:userprofile\Downloads"
.\Set-QuickAccess.ps1 -Action Unpin -Path "$env:userprofile\Documents"
.\Set-QuickAccess.ps1 -Action Pin -Path "$env:userprofile"
.\Set-QuickAccess.ps1 -Action Pin -Path "$env:userprofile\Desktop"
.\Set-QuickAccess.ps1 -Action Pin -Path "$env:userprofile\Documents"
.\Set-QuickAccess.ps1 -Action Pin -Path "$env:userprofile\Downloads"

Fehler beim Ausführen der Batchdatei:(Um dies zu erfassen, habe ich am Ende der Batchdatei „Pause“ eingefügt. Ich erhalte 8 davon, wobei dies die letzte ist, wie durch .ps1:8 angezeigt.)

.\Set-QuickAccess.ps1 : The term '.\Set-QuickAccess.ps1' is not recognized as the name of a cmdlet, function, script
file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct
and try again.
At R:\Tools\QuickAccessPin.ps1:7 char:1
+ .\Set-QuickAccess.ps1 -Action Pin -Path "$env:userprofile\Downloads
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (.\Set-QuickAccess.ps1:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Ich dachte, es könnte ein Problem mit meinem PS1-Skript sein, also öffnete ich die Datei in der PowerShell ISE und drückte F5, um das Skript auszuführen. Wenn ich das mache, passiert Folgendes und ich muss sieben Mal auf „Einmal ausführen“ klicken – einmal für jeden der in QuickAccessPin.ps1 aufgerufenen Befehle

Bildbeschreibung hier eingeben

Die PS1 funktioniert also, wenn auch nicht wie sie soll, wenn ich sie direkt ausführe, aber sie funktioniert überhaupt nicht, wenn ich sie aus der Batchdatei aufrufe. Ich sollte auch darauf hinweisen, dass meine Ausführungsrichtlinie derzeit zu Testzwecken lautet:Uneingeschränkt(normalerweiseRemoteSigniert). Um etwaige Probleme auszuschließen, habe ich außerdem versucht, Folgendes auszuführen, damit PowerShell in der GUI nicht zum Ausführen der Dateien auffordert:

@echo off
TITLE Unblocking PowerShell Tools
color f0
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& 'r:\Tools\UnblockThisFolder.ps1'";
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser -Force}"

UnblockThisFolder.ps1 ist einfach

Get-ChildItem r:\Tools | Unblock-File

...aber das scheint nichts zu bewirken, da PowerShell ISE mich trotzdem auffordert, es auszuführen, und sagt, ich könne die Dateien „entsperren“, wenn sie sicher sind (was ich jetzt vielleicht schon 13 Mal getan habe). Wenn ich meine Richtlinie auf RemoteSigned einstelle und dann das obige Skript ausführe und dann erneut Get-ExecutionPolicy ausführe, wird Unrestricted angezeigt, sodass die vierte Zeile funktioniert und die dritte scheinbar nichts bewirkt.

Die Tatsache, dass ich jedes Mal dazu aufgefordert werde, ist also nur ein kleines Ärgernis, da dies alles automatisiert wird und ich überhaupt keine GUIs verwenden werde. Aber im Moment kann ich das PS1-Skript nicht aus der Batchdatei aufrufen, was ich tun muss, und die einzige Möglichkeit, mein Skript zum Laufen zu bringen, besteht darin, es manuell innerhalb der ISE auszuführen.

Weiß jemand, wie ich dieses Problem beheben kann?

Antwort1

Der angezeigte Fehler weist darauf hin, dass Sie sich wahrscheinlich nicht in dem Verzeichnis befinden, in dem Sie sich vermutlich befinden. Durch die Ausführung der Skriptdatei mit dem vollständigen Pfad gelangen Sie nicht in dieses Verzeichnis. Wenn sich das Verzeichnis also Set-QuickAccess.ps1in befindet R:\Tools, besteht keine Garantie dafür, dass Sie sich auch dort befinden, R:\Toolswenn Sie die Batchdatei ausführen.

Sie müssen zunächst einen Set-Locationin den Pfad ausführen, in dem sich das Set-QuickAccess.ps1Skript befindet.

verwandte Informationen