
Ich habe ein einfaches Powershell-Skript, das erkennt, ob ein Programm ausgeführt wird, und wenn nicht, startet es das Programm. Es funktioniert einwandfrei, wenn ich mit der rechten Maustaste klicke und das Skript „Mit PowerShell ausführen“ auswähle, aber wenn ich das Standardprogramm für .ps1 in Powershell ändere und darauf doppelklicke, funktioniert es nicht. Außerdem funktioniert es nicht im Taskplaner. Als Referenz ist hier mein Skript:
$filebound = get-process FileBound.Enterprise.ChainEditor -ErrorAction SilentlyContinue
if($filebound -eq $null)
{
start-process -filepath "C:\Program Files (x86)\FileBound\Importer Professional\FileBound.Enterprise.ChainEditor.exe"
}
Ich kann nicht die richtige Möglichkeit finden, die Aktion im Taskplaner zu argumentieren, damit sie funktioniert. Wenn die Aufgabe ausgeführt wird, wird der Power Shell-Bildschirm angezeigt und verschwindet wieder, aber die Anwendung wird nicht ausgeführt (dasselbe Verhalten wie beim Doppelklicken).
hier sind meine Aufgabeninformationen:
Run only when user is logged in and run with highest priveleges checked. Configured for Windows 10 (it's a windows 10 vm).
Triggers at startup and repeats every 30 minutes indefinitely. Enabled is checked
Actions starts a program (powershell)
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
with argument (stolen from someone else) -command "& C:\Filebound\Test.ps1" -NonInteractive
Only Condition checked is Wake computer to run task.
Settings are Allow Task to run on demand and Run task as soon as possible are checked.
Jede Hilfe wird geschätzt.
Antwort1
Habe es herausgefunden. Es hing mit dem Argument im Taskplaner zusammen. Nachdem ich es auf: eingestellt hatte, -ExecutionPolicy Bypass C:\Filebound\Test.ps1
funktionierte alles.
Randbemerkung: Ich musste die Aufgabe so anpassen, dass als Auslöser „Wenn der Computer im Leerlauf ist“ statt „Beim Start“ dient, um sie zuverlässiger zu machen.
Antwort2
Sie können PowerShell verwenden, um die Ausführungsrichtlinie auf „uneingeschränkt“ zu setzen. Dann müssen Sie nicht -ExecutionPolicy Bypass
jedes Mal, wenn Sie ein PS1-Skript ausführen müssen, einen Parameter angeben.
Sie können PowerShell öffnen, aber diese Methode erfordert Administratorrechte. Verwenden Sie dies, um PowerShell mit erhöhten Rechten zu öffnen:
Win+ R→Typ PowerShell
→ Ctrl+ Shift+Enter
Fügen Sie diese dann in das PowerShell-Fenster ein:
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell" -ErrorAction SilentlyContinue | Out-Null
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell" -Name EnableScripts -Type DWord -Value 1
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell" -Name ExecutionPolicy -Type String -Value Unrestricted
Und dann müssen Sie die Ausführungsrichtlinie nicht umgehen, um Skripts auszuführen.
Dies entspricht der Änderung dieser Gruppenrichtlinie:
Win+ R→Typ gpedit.msc
→Enter
Navigieren Sie zu:
"Local Computer Policy"→"Computer Configuration"→"Administrative Templates"→"Windows Components"→"Windows PowerShell"
Klicken Sie im linken Bereich auf „Windows PowerShell“.
Doppelklicken Sie auf der rechten Seite auf „Skriptausführung aktivieren“, klicken Sie auf „Aktiviert“ und wählen Sie in der Dropdownliste „Ausführungsrichtlinie“ „Alle Skripte zulassen“ aus, klicken Sie auf Applyund dann auf OK.