garciam
Goto Top

PowerShell im Task Scheduler

Hallo

Ich habe ein PowerShell Script das ich im Task Scheduler ausführen möchte. Das Script ist nur ein Zweizeiler und funktioniert solange ich es direkt ausführe. Im Task Scheduler habe ich X-Varianten ausprobiert, aber es funktioniert nicht.

Liegt es am Script, müsste ich da was ändern?
$users= Get-DistributionGroupMember Meine_Gruppe ;
Set-App -OrganizationApp -Identity 9410acd2-64d2-4249-8b62-2fe8e41ef3fc -ProvidedTo SpecificUsers -UserList $users.Identity -DefaultStateForUser Enabled

Vielen Dank.

LG

Content-ID: 648536

Url: https://administrator.de/forum/powershell-im-task-scheduler-648536.html

Ausgedruckt am: 23.12.2024 um 05:12 Uhr

Doskias
Doskias 05.02.2021 um 11:44:12 Uhr
Goto Top
Moin,

auf den ersten Blick würde ich sagen, du musst erstmal mehr infos liefern.

Ich vermute es ist ein Skript was du in der Exchange Console ausführst. Dann musst du im Skript erst das Excahnge Modul laden.

Gruß
Doskias
garciam
garciam 05.02.2021 um 13:50:09 Uhr
Goto Top
Vielleicht war meine Beschreibung etwas knapp face-smile

Ja, dass Skript führe ich in der Exchange Console aus. Ich habe auch schon das Exchange Modul geladen.
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn;
Funktionierte aber auch damit nicht.

Der Task Scheduler befindet sich ebenfalls auf dem Exchange Server und ist im Moment folgendermassen konfiguriert.

Program/script: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

Add arguments (optionals): -Command ". 'c:\Program Files\Microsoft\Exchange Server\V15\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto; 'C:\Program Files (x86)\Scripts\AddInAccess.ps1'

LG
MrCount
MrCount 05.02.2021 aktualisiert um 15:17:30 Uhr
Goto Top
Servus,

warum packst du das nicht in eine Batch/PS1, die der Taskplaner dann startet?

Also Batch z.B.:
Powershell.exe -executionpolicy remotesigned -File "c:\Program Files\Microsoft\Exchange Server\V15\bin\RemoteExchange.ps1"  
Powershell.exe -executionpolicy remotesigned -Command "Connect-ExchangeServer -auto"  
Powershell.exe -executionpolicy remotesigned -File "C:\Program Files (x86)\Scripts\AddInAccess.ps1"  
(... oder so ähnlich)

evtl. hilft das: https://www.howtogeek.com/204088/how-to-use-a-batch-file-to-make-powersh ...
Doskias
Doskias 05.02.2021 aktualisiert um 15:50:14 Uhr
Goto Top
Dann poste doch bitte das ganze Skript und nicht nur 2 Zeilen. face-smile

Welchen Exchange hast du denn? Und wird das Snapin geladen. Da gibt es nälich unterschiede zum Bispiel auf dem Exchange 2007:
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin
im Vergleich zu 2010
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010

Dein Code klappt nur Beim Exchange 2019. Wenn du den Hast, dann ok : )

Für den Start im Taskmanager reicht als Programm überigens powerschell.exe. Den ganzen Pfad kannst du dir sparen.
Exceution Policy als Fehlerquelle ausgeschlossen?

Ich gehe davon aus, dass der Dienst gestartet wird und das Skript auch, aber das Skript einen Fehler ausgibt. Meine empfohlene Vorgehensweise zur Lösung:

1. Skript um Fehlerprotokoll erweitern und Fehler loggen in LOG-Datei
2. Jedes Skript erstmal einzeln starten lassen bzw. Wenn die Skripts in Reihe laufen sollen, das 2te Skript aus dem ersten Starten oder direkt zu einem zusammen fügen.
Daemmerung
Daemmerung 05.02.2021 um 19:37:50 Uhr
Goto Top
Zum Thema Logging:
Setz am Anfang ein Start-Transcript und am Ende ein Stop-Transcript. Schau dann, was in die Datei geschrieben wird.

Irgendwie lieferst du Infos, aber am Ende sind das keine hilfreichen Infos. Bisschen mehr Zeit sollte man sich schon nehmen - schließlich suchst du nach Hilfe.
garciam
garciam 08.02.2021 aktualisiert um 15:28:27 Uhr
Goto Top
Die cmdlets sollte ich ja nicht nur in der Exchange Console sondern auch in der PowerShell ausführen können. In der PowerShell erhalte ich dann aber eine Fehlermeldung. Ich gebe also folgendes ein:

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
$users= Get-DistributionGroupMember Meine_Gruppe
Set-App -OrganizationApp -Identity 9410acd2-64d2-4249-8b62-2fe8e41ef3fc -ProvidedTo SpecificUsers -UserList $users.Identity -DefaultStateForUser Enabled

Die Fehlermeldung lautet dann:
WARNING: An unexpected error has occurred and a Watson dump is being generated: The request failed. The remote server
returned an error: (503) Server Unavailable.
Set-App : The request failed. The remote server returned an error: (503) Server Unavailable.
At line:1 char:1

back-to-topSet-App -OrganizationApp -Identity 9410acd2-64d2-4249-8b62-2fe8e41ef3fc -Provide ...

back-to-top~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : NotSpecified: (: ) [Set-App], OwaExtensionOperationException
+ FullyQualifiedErrorId : Microsoft.Exchange.Data.ApplicationLogic.Extension.OwaExtensionOperationException,Micros
oft.Exchange.Management.Extension.SetApp

Das Set-App will er irgendwie nicht. Die Fehlermeldung bringt mich aber auch nicht weiter. Weiss da jemand mehr?

Im Event Viewer gibt es ebenfalls einen Eintrag:
Watson report about to be sent for process id: 27944, with parameters: E12IIS, c-RTL-AMD64, 15.01.1913.009, powershell, M.Exchange.WebServices, M.E.W.D.ServiceRequestBase.EmitRequest, M.E.D.A.Extension.OwaExtensionOperationException, db46-dumptidset, 15.01.1913.009.
ErrorReportingEnabled: False
Doskias
Doskias 09.02.2021 um 08:06:58 Uhr
Goto Top
Endlich gibt es nach einigen Tagen auch mal eine Fehlermeldung. Also offenbar liegt es nicht am TaskScheduler, sondern an deinem Skript selbst. Am besten die Skripte immer in einer nackten PS-Session testen (nicht in der Exchange-Console), dann kommst du schneller zum ziel und siehst woran es liegt. Hintergrund ist, dass die Exchange-console diverse Dinge lädt und da ja auch schon eine Verbindung zum DC herstellt. Und genau da ist denke ich dein Problem:

Ich kenne den Befehl zwar nicht, aber wenn ich die offizielle Beschreibung richtig lese, dann machst du einen User-Abgleich mit dem DC, gibst im Skript aber selbst keinen DC an. Der Parameter
-DomainController
könnte aber meinem Verständnis nach dein Problem lösen. Hab leider derzeit keinen Exchange-Server zum Testen griffbereit.

Gruß
Doskias
garciam
garciam 09.02.2021 aktualisiert um 10:21:22 Uhr
Goto Top
Hallo Doskias

Danke für deinen Typ aber leider bringt der Parameter nichts.

Set-App -DomainController dc.domain.local -OrganizationApp -Identity 9410acd2-64d2-424
9-8b62-2fe8e41ef3fc -ProvidedTo SpecificUsers -UserList $users.Identity -DefaultStateForUser Enabled

Die Fehlermeldung bleibt dieselbe.

Nur wenn ich einen falschen DC angebe, dann bringt er eine entsprechende Meldung:
Set-App : An Active Directory error 0x51 occurred when trying to check the suitability of server
'server1.domain.local'. Error: 'Active directory response: The LDAP server is unavailable.'
At line:1 char:1

back-to-topSet-App -DomainController server1.domain.local -OrganizationApp -Identity 9 ...

back-to-top~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : NotSpecified: ( : ) [Set-App], SuitabilityDirectoryException
+ FullyQualifiedErrorId : [Server=Server1,RequestId=16644351-fea4-4e39-bba3-b243a0e4587b,TimeStamp=09.02.20
21 07:56:37] [FailureCategory=Cmdlet-SuitabilityDirectoryException] 14483E7B,Microsoft.Exchange.Management.Extension.SetApp

Ich habe im Moment keine Idee wie man das cmdlet zum laufen bringen könnte ???
Doskias
Doskias 09.02.2021 aktualisiert um 10:16:33 Uhr
Goto Top
Moin.

Dein echter Servername steht noch in deinem Posting. mach das weg face-smile

Was ist, wenn du die Exchange Konsole startest. Das macht der Exchangeserver ja üblicherweise mit:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noexit -command ". 'C:\Program Files\Microsoft\Exchange Server\V15\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto -ClientApplication:ManagementShell "

Wenn du da jetzt noch dein Skript hinter hängst, müsste es im gleichen Kontext ausgeführt werden. Nur eine spontane Idee ohne zu wissen ob es funktioniert.

Nachtrag: Wieso willst du das eigentlich als geplanten Task ausführen? Wenn ich set-app richtig verstanden haben konfigurierst du damit die Verfügbarkeit einer installierten App. Und dein Skript aktiviert dies ja auch. Ist das nicht ohnehin eine einmalige Aktion? Wieso als geplanter Task? Das erschließt sich mir noch nicht.
garciam
garciam 09.02.2021 aktualisiert um 11:43:15 Uhr
Goto Top
Danke für den Hinweis, stand da ja riesig face-smile

Ich habe es über RemoteExchange.ps1 nochmals versuche aber ich erhalte immer wieder die Fehlermeldung. Ich gebe auf und führe das Script halt manuell aus.

Die definierten User in der Gruppe werden erst für das Add-In berechtigt, wenn das cmdlet ausgeführt wurde. Gibt es später neue Mitarbeiter welche für das Add-In berechtigt sein sollen, muss das cmdlet ausgeführt werden, deshalb wäre ein geplante Task praktisch.