alojahey
Goto Top

Powershellskript via Aufgabenplanung funktioniert nicht

HalliHallo,
ich habe ein simples ShellSkript :
dir "c:\Backup_Hyper-V" -Directory | ?{$_.CreationTime -lt (get-date).AddDays(-6)} | del -recurse -force  
Aufgabenplanung: Beim Anmelden des Benutzers.

Powershell geöffnet. Skript aufgerufen. Tuts. Aufgabenplanung tuts nicht. Jetzt ausführen angeklickt tuts nicht.
Unabhängig von der Benutzeranmeldung gewählt, nicht.
Anderen Benutzer mit Adminrechten. Nichts
Höchste Privilegien gewählt nichts.
Ausführen für von Vista / Server auf Windows 10 geändert nichts.
Programm geändert von c:\scriptname.ps in powershell.exe "c:\scriptname.ps" nichts.
Wie bekomme ich eine simple Aufgabe hin?

mfG
Aloahey

Content-ID: 6851983813

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

Ausgedruckt am: 21.11.2024 um 19:11 Uhr

Crusher79
Crusher79 20.04.2023 um 16:18:25 Uhr
Goto Top
Und? Task?

powershell.exe ist das Programm. Alles andere sind Parameter dahinter! Also im neuen Feld!

Was wenn Programm:
powershell.exe

Argument
"c:\temp\mein_tolles_script.ps1"   

ist. Man kann auch hier die Restriktionen lockern! ExecutionPolicy auf Bypass setzen u.ä.

Was steht denn genau im Task drin?
erikro
erikro 20.04.2023 um 16:46:36 Uhr
Goto Top
Moin,

Zitat von @Alojahey:

HalliHallo,
ich habe ein simples ShellSkript :
dir "c:\Backup_Hyper-V" -Directory | ?{$_.CreationTime -lt (get-date).AddDays(-6)} | del -recurse -force  

Erstmal: In Skripten haben Aliases nichts zu suchen. Aliases sind für die Konsole gedacht. In Skripten schreibt man die Befehle aus. Warum? Aliases können gelöscht werden und stehen dann evtl. in einer anderen Umgebung nicht zur Verfügung. Außerdem sind die Skripte leichter lesbar.

Aufgabenplanung: Beim Anmelden des Benutzers.

Eines bestimmten Benutzers? Welche Rechte hat er?
geändert nichts.

Programm geändert von c:\scriptname.ps in powershell.exe "c:\scriptname.ps" nichts.

Normalerweise haben die Skripte die Endung ps1 und nicht ps. Und wie der Kollege schon bemerkte: Powershell.exe ist das Programm. Das Skript ist ein Argument, das mit -command übergeben werden muss. Bei beiden muss der volle absolute Pfad angegeben werden. Dann musst Du wahrscheinlich noch die Execution Policy manipulieren.

hth

Erik
Crusher79
Crusher79 20.04.2023 um 16:58:18 Uhr
Goto Top
Hallo,

korrekt hatte ich übersehen.

Hier nochmal was man so nettes hinterlegen kann für eine PS1.

task_pllan
Alojahey
Alojahey 21.04.2023 um 08:41:56 Uhr
Goto Top
Guten Morgen,
vielen Dank für die Antworten. Hm, dann ist die Bezeichnunr sehr verwirrend (Programm/Script ausführen).

Aber auch die Variante mit powershell.exe als Programm und c:\scriptname.ps1 als Parameter ist erfolglos.
Genau wie powershell.exe als Programm und command "c:\scriptname.ps1" als Parameter ist erfolglos.

Wie geschrieben hat der User Adminberechtigungen.

mfG
Alojahey
erikro
erikro 21.04.2023 um 09:02:35 Uhr
Goto Top
Moin,

Zitat von @Alojahey:

Guten Morgen,
vielen Dank für die Antworten. Hm, dann ist die Bezeichnunr sehr verwirrend (Programm/Script ausführen).

Nö, der Standardinterpreter für "Skripts" ist die command shell. Deshalb kann man .bat und .cmd da eintragen und .ps1 nicht. face-wink

Liebe Grüße

Erik
Dani
Dani 21.04.2023 um 12:33:37 Uhr
Goto Top
Alojahey
Alojahey 21.04.2023 um 16:38:44 Uhr
Goto Top
@Dani: Leider Satz mit X...
3063370895
3063370895 21.04.2023 aktualisiert um 16:52:15 Uhr
Goto Top
Zitat von @Alojahey:

@Dani: Leider Satz mit X...

Alle meine (geplanten) Skripte werden so ausgeführt:
mmc_crd4zzvrn6
Programm/Skript:
powershell
Argumente:
-EP Bypass -File "C:\scripts\script.ps1"  

Zeig uns doch mal genau wie dein Task aussieht. Kannst ihn auch exportieren und die XML hier posten

Achja,
Programm geändert von c:\scriptname.ps in powershell.exe "c:\scriptname.ps" nichts.  
es MUSS eine ps1-Datei sein. Mit .ps klappts nicht.

Hier mal ein exportierter Task, der garantiert funktioniert:
https://we.tl/t-3ba10jxm5e

Musst nur den Skriptpfadanpassen.
Dani
Dani 21.04.2023 um 17:41:22 Uhr
Goto Top
Moin,
@Dani: Leider Satz mit X...
wir nutzen genau dieses Schema für knapp 20.000 Scheduled Tasks auf Servern von 2012R2 bis 2022 ohne nennenswerte Probleme.

Poste am Besten die XML Datei einer nicht funktionierenden Scheduled Task von dir. Irgendwo muss ein (Logik)fehler ja sein.


Gruß,
Dani
Alojahey
Alojahey 24.04.2023 um 08:10:52 Uhr
Goto Top
Vielen Dank für die Mühe:

Löschen:

<?xml version="1.0" encoding="UTF-16"?>  
<Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">  
  <RegistrationInfo>
    <Date>2023-04-20T15:54:40.5471629</Date>
    <Author>Lionfish\Max Mustermann</Author>
    <URI>\HyperV löschen</URI>
  </RegistrationInfo>
  <Triggers>
    <LogonTrigger>
      <Enabled>true</Enabled>
      <UserId>Lionfish\Max Mustermann</UserId>
    </LogonTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">  
      <UserId>S-1-5-21-2120117415-2267405954-3040922726-1003</UserId>
      <LogonType>InteractiveToken</LogonType>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>true</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">  
    <Exec>
      <Command>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe</Command>
      <Arguments>-command "C:\Users\Max Mustermann\del-hyper-v.ps1"</Arguments>  
    </Exec>
  </Actions>
</Task>

Export
<?xml version="1.0" encoding="UTF-16"?>  
<Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">  
  <RegistrationInfo>
    <Date>2023-01-24T09:55:12.8856407</Date>
    <Author>Lionfish\Max Mustermann</Author>
    <URI>\Hyper-V export</URI>
  </RegistrationInfo>
  <Triggers>
    <LogonTrigger>
      <Enabled>true</Enabled>
      <UserId>Lionfish\Max Mustermann</UserId>
    </LogonTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">  
      <UserId>S-1-5-21-2120117415-2267405954-3040922726-1002</UserId>
      <LogonType>Password</LogonType>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">  
    <Exec>
      <Command>"C:\Users\Max Mustermann\Backup_HyperV.ps1"</Command>  
    </Exec>
  </Actions>
</Task>
3063370895
3063370895 24.04.2023 aktualisiert um 08:26:14 Uhr
Goto Top
Hi,

beim Export-Task sind command und arguments falsch gesetzt.
Setze command auf
powershell 
und arguments auf
-EP Bypass -File "C:\Users\Max Mustermann\Backup_HyperV.ps1"  

und beim Löschen-Task
-EP Bypass -File "C:\Users\Max Mustermann\del-hyper-v.ps1"  

Versuche es mit dem User
NT-Autorität\System
Setze die Tasks auf
Unabhänging von Benutzeranmeldung ausführen

<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
Ist es ein Laptop?
-Thomas
Alojahey
Alojahey 24.04.2023 aktualisiert um 08:29:50 Uhr
Goto Top
Ps, habe das Testfile importiert:
Er fragt nach dem Admin,um die Aufgabe importieren zu können. Gebe die Admin Daten ein.
Die Aufgabe kann von der Aufgabenplanung nicht erstellt werden. Da Benutzerkonto ist unbekannt, das Kennwort ist falsch oder das Benutzerkonto besitzt keine Berechtigung zum Erstellen dieser Aufgabe.
Den Benutzer hat er erkannt, die Vervollständigung zu PCname\Nutz erfolgte sofort. Das Passwort habe ich aus dem Keepass kopiert.

Haben noch probiert und "Konfigureren für" von Server 2008 auf WIndows 10 geändert. Fehler bleibt. Die Aufgabe wird auch erst als Systemuser angelegt.. Zugriff verweigert.
Also als Admin angemeldet und nochmal die Aufgabe importiert. Das importieren ging zwar, aber beim Aufgabe ausführen passiert nichts. Sie läuft und läuft und läuft, die Ordner mit den VMs (~10) bleiben. Es wird nichts gelöscht.
Kann ich das besser mit del und cmd machen?
Alojahey
Alojahey 24.04.2023 um 08:44:43 Uhr
Goto Top
@thomas
Kein Laptop. Fehler bleibt. Er rennt und rennt. Habe rund 15 Minuten gewartet und dann abgebrochen (ssd, Win11, I7 16 GB RAM)
3063370895
3063370895 24.04.2023 aktualisiert um 08:49:35 Uhr
Goto Top
Zitat von @Alojahey:

@thomas
Kein Laptop. Fehler bleibt. Er rennt und rennt. Habe rund 15 Minuten gewartet und dann abgebrochen (ssd, Win11, I7 16 GB RAM)

Der Task läuft immer weiter?

Mach mal ganz oben in deine Skripts:
Start-Transcript "c:\$(Get-Date -Format yyyy-MM-dd_HH-mm).txt"  
Dann führe die Aufgaben nochmal aus und schau mal in den erstellten txt-Dateien in C:\ was da drinsteht. Poste es hier wenn möglich.
Alojahey
Alojahey 24.04.2023 um 18:20:12 Uhr
Goto Top
Hi,
leider werden keine txt-Dateien erstellt. Als Admin ausgeführt.
Rennt und Rennt. Lief jetzt 9h...
Dani
Dani 24.04.2023 um 21:40:56 Uhr
Goto Top
Moin,
geh auf Los zurück und nimm ein simples PowerShell Skript:
Start-Transcript "c:\$(Get-Date -Format yyyy-MM-dd_HH-mm).txt"  
Sleep -seconds 10
Stop-Transcript

exit
Dieses Skript bindest du genau so ein, wie in meinem Link beschrieben.

1) Das Skript manuell im Kontext eines Benutzers, der Mitglied der Gruppe Administrators ist, ausführen.
2) Das Skript manuell im Kontext eines normal Benutzers bzw. der Benutzer den du für die Scheduled Task vorgesehen hast, ausführen.
3) Das Skript in die Scheduld Task einbinden und nochmals testen.


Gruß,
Dani
Alojahey
Alojahey 28.04.2023 um 09:26:26 Uhr
Goto Top
@Dani: Das ging mal!!
Also nochmal das andere Skript. Vielleicht mit Zeitplaner? Wenn PC aus, dann ist es halt so.
Alojahey
Alojahey 28.04.2023 um 10:29:38 Uhr
Goto Top
Guten Morgen,
ich bin nun etwas weiter.
Die Aufgabenplanungen geändert, so dass sie als Admin ausgeführt werden.
Dann habe ich das Skript ohne Aufgabenplanung in der PS ausgeführt. Dann wird wenigstens die txt angelegt:
**********************
nStart der Windows PowerShell-Aufzeichnung
Startzeit: 20230428102218
Benutzername: Lionfish\Oliver Eikel
RunAs-Benutzer: Lionfish\Oliver Eikel
Konfigurationsname: 
Computer: LIONFISH (Microsoft Windows NT 10.0.22621.0)
Hostanwendung: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Prozess-ID: 1596
PSVersion: 5.1.22621.963
PSEdition: Desktop
PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0, 5.1.22621.963
BuildVersion: 10.0.22621.963
CLRVersion: 4.0.30319.42000
WSManStackVersion: 3.0
PSRemotingProtocolVersion: 2.3
SerializationVersion: 1.1.0.1
**********************
Die Aufzeichnung wurde gestartet. Die Ausgabedatei ist "d:\2023-04-28_10-22.txt".  

Gelöscht wird gar nichts. Auch der Export funktioniert plötzlch nicht mehr (0x1). Mit höchsten Privilegien ausführen. Bleicht nicht drin.
Was aber geht: Remove-Item -path D:\Backup_Hyper-V -recurse Nur dann ist der ganze Ordner weg! Nicht der Inhalt.
Also das Ganze geändert:
Remove-Item -path D:\Backup_Hyper-V\ -recurse oder
Remove-Item -path D:\Backup_Hyper-V\*.* -recurse

Ohne Erfolg.
Alojahey
Lösung Alojahey 04.05.2023 um 15:52:44 Uhr
Goto Top
Hallo zusammen,
ich habe es nun gelöst:
ps1-Script für den Export.
Drekter Aufruf. Nicht über die Eigenschaften.

Und simple Bat-Datei fürs bereinigen:
set "workdir=D:\Backup_HyperV"  
for /f "skip=4 tokens=* delims=" %%a in ('dir /B /O-D "%workdir%\*.*"') do rd /s /q "%workdir%\%%a"   

Wen es interessiert. So geht es. Danke für die Mühen!