ScriptAgent und ein Fehler :-(
Guten Morgen,
ich komme schon seit tagen nicht weiter, vielleicht hat hier jemand eine Idee.
Das Script läuft beim aktivieren einer Mailbox mit.
hier mal das Script:
und hier die Fehlerausgabe:
Nagut es ist laut der Ausgabe nicht wirklich ein Fehler sondern eine Warnung.
Nur wird es auch nicht ausgeführt als die Erweiterungen ein oder ausgeschaltet.
Vielen Dank für eure Ideen.
lG LyriC
ich komme schon seit tagen nicht weiter, vielleicht hat hier jemand eine Idee.
Das Script läuft beim aktivieren einer Mailbox mit.
hier mal das Script:
<?xml version="1.0" encoding="utf-8" ?>
<Configuration version="1.0">
<Feature Name="MailboxProvisioning" Cmdlets="enable-mailbox">
<ApiCall Name="OnComplete">
if ($succeeded)
{
do {
start-sleep 20
$mbxExists = Get-MailBoxPermission -Identity $USER -User "NT AUTHORITY\SELF" -ErrorAction SilentlyContinue | FW IsValid
} while (!$mbxExists)
$USER = $provisioningHandler.UserSpecifiedParameters["Name"]
$OU = (Get-User -Identity $USER).OrganizationalUnit
$ATT = (Get-mailbox -Identity $USER).customattribute1
if (
($OU -eq "it-contact.local/Frankfurt (FFM)/IT-Contact/Users") -and ($ATT -eq "extern")
) {
Enable-Mailbox -Identity $USER -Archive -ArchivDatabase ArchivMDB
Set-CASMailbox -Identity $USER -PopEnabled $false -ImapEnabled $false
Set-Mailbox -Identity $USER _
-SingleItemRecoveryEnabled $true _
-UseDatabaseQuotaDefaults $false _
-IssueWarningQuota 450MB _
-ProhibitSendQuota 500MB _
-ProhibitSendReceiveQuota 550MB _
-ArchiveQuota 1GB _
-ArchiveWarningQuota 800MB _
-RetainDeletedItemsFor "30.00:00:00" _
-AddressBookPolicy "IT-Contact extern GmbH"
}
elseif (
($OU -eq "it-contact.local/Frankfurt (FFM)/IT-Contact/Users") -and ($ATT -ne "extern")
) {
Enable-Mailbox -Identity $USER -Archive -ArchivDatabase ArchivMDB
Set-CASMailbox -Identity $USER -PopEnabled $false -ImapEnabled $false
Set-Mailbox -Identity $USER _
-SingleItemRecoveryEnabled $true _
-UseDatabaseQuotaDefaults $false _
-IssueWarningQuota 900MB _
-ProhibitSendQuota 1GB _
-ProhibitSendReceiveQuota 1,1GB _
-ArchiveQuota 2GB _
-ArchiveWarningQuota 1,8GB _
-RetainDeletedItemsFor "30.00:00:00" _
-AddressBookPolicy "IT-Contact GmbH"
}
elseif (
($OU -eq "it-contact.local/Frankfurt (FFM)/MOC Testumgebung/Users") -and ($ATT -eq "extern")
) {
Set-CASMailbox -Identity $USER -PopEnabled $false -ImapEnabled $false
Set-Mailbox -Identity $USER _
-SingleItemRecoveryEnabled $true _
-UseDatabaseQuotaDefaults $false _
-IssueWarningQuota 180MB _
-ProhibitSendQuota 200MB _
-ProhibitSendReceiveQuota 220MB _
-RetainDeletedItemsFor "30.00:00:00" _
-AddressBookPolicy "MOC Testumgebung extern"
}
elseif (
($OU -eq "it-contact.local/Frankfurt (FFM)/MOC Testumgebung/Users") -and ($ATT -ne "extern")
) {
Set-CASMailbox -Identity $USER -PopEnabled $false -ImapEnabled $false
Set-Mailbox -Identity $USER _
-SingleItemRecoveryEnabled $true _
-UseDatabaseQuotaDefaults $false _
-IssueWarningQuota 180MB _
-ProhibitSendQuota 200MB _
-ProhibitSendReceiveQuota 220MB _
-RetainDeletedItemsFor "30.00:00:00" _
-AddressBookPolicy "MOC Test intern"
}
}
</ApiCall>
</Feature>
</Configuration>
und hier die Fehlerausgabe:
Summary: 1 item(s). 1 succeeded, 0 failed.
Elapsed time: 00:00:06
XXXXXX XXXXXX
Completed
Warning:
The cmdlet extension agent with the index 5 has thrown an exception in OnComplete(). The exception is: Microsoft.Exchange.Provisioning.ProvisioningException: ScriptingAgent: Exception thrown while invoking scriptlet for OnComplete API: Missing expression after unary operator '-'.. ---> System.Management.Automation.ParseException: Missing expression after unary operator '-'.
at System.Management.Automation.Runspaces.AsyncResult.EndInvoke()
at System.Management.Automation.PowerShell.EndInvoke(IAsyncResult asyncResult)
at Microsoft.Exchange.Configuration.MonadDataProvider.MonadPipelineProxy.ClosePipeline(MonadAsyncResult asyncResult)
--- End of inner exception stack trace ---
at Microsoft.Exchange.ProvisioningAgent.ScriptingAgentHandler.OnComplete(Boolean succeeded, Exception e)
at Microsoft.Exchange.Provisioning.ProvisioningLayer.OnComplete(Task task, Boolean succeeded, Exception exception)
Exchange Management Shell command completed:
Enable-Mailbox -Identity 'it-contact.local/Frankfurt (FFM)/IT-Contact/Users/XXXXX XXXXX' -Alias 'XXXXX'
Elapsed Time: 00:00:06
Nagut es ist laut der Ausgabe nicht wirklich ein Fehler sondern eine Warnung.
Nur wird es auch nicht ausgeführt als die Erweiterungen ein oder ausgeschaltet.
Vielen Dank für eure Ideen.
lG LyriC
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 246470
Url: https://administrator.de/contentid/246470
Ausgedruckt am: 24.11.2024 um 02:11 Uhr
12 Kommentare
Neuester Kommentar
Hallo LyriC,
den Codeumbruch via "_" gibt es vielleicht in VB, aber nicht in Powershell. In Powershell kannst du hierfür den Backtick (`) nutzen.
Auch für die GB-Werte wie z.B. 1,1GB solltest du den Punkt als Dezimaltrenner verwenden, sonst ist das für Powershell ein Array aus einer 1 und 1GB.
Dann würde ich Zeile 9 anders schreiben (Format-Wide ist normalerweise nicht dazu geeignet die Boolean-Eigenschaft zuverlässig weiterzugeben):
Außerdem würde ich empfehlen längere Scripte in ein Powershell-Script auszulagern und die benötigten Parameter an dieses zu übergeben.
Noch zur Info für bestimmte Sonderzeichen in der XML-Datei:
Grüße Uwe
den Codeumbruch via "_" gibt es vielleicht in VB, aber nicht in Powershell. In Powershell kannst du hierfür den Backtick (`) nutzen.
Auch für die GB-Werte wie z.B. 1,1GB solltest du den Punkt als Dezimaltrenner verwenden, sonst ist das für Powershell ein Array aus einer 1 und 1GB.
Dann würde ich Zeile 9 anders schreiben (Format-Wide ist normalerweise nicht dazu geeignet die Boolean-Eigenschaft zuverlässig weiterzugeben):
$mbxExists = (Get-MailBoxPermission -Identity $USER -User "NT AUTHORITY\SELF" -ErrorAction SilentlyContinue).IsValid
Noch zur Info für bestimmte Sonderzeichen in der XML-Datei:
- Verwenden Sie anstelle des Größer-als-Zeichens (>) die Folge >
- Verwenden Sie anstelle des Kleiner-als-Zeichens (<) die Folge $lt;
- Verwenden Sie anstelle eines kaufmännischen Und-Zeichens (&) die Folge &
Ich vermute wenn das ein deutsches System ist musst du anstatt "NT AUTHORITY\SELF" die deutsche Variante nehmen "NT-AUTORITÄT\SELBST" checke das Ergebnis erst mal separat außerhalb des Scriptes !! Wenn in dem Befehl nämlich etwas nicht stimmt oder es keine Objekt zurückgibt läuft das unendlich in einer Schleife !
p.s. Die Schleife ist sowieso Schwachsinn, denn wenn das Event OnComplete abgeschlossen ist, existiert die Mailbox schon, man muss also nicht nochmal eine Prüfung einbauen.
p.s. Die Schleife ist sowieso Schwachsinn, denn wenn das Event OnComplete abgeschlossen ist, existiert die Mailbox schon, man muss also nicht nochmal eine Prüfung einbauen.
probiers mal hiermit: (kann's gerade nicht testen, waren aber noch ein paar Fehler drin).
Ich würde dir empfehlen das Script in der Entwurfsphase nicht mit dem Scripting-Agent zu testen sondern es für Tests erst mal so zu schreiben das du es als normales Script testen kannst. Wenn es dann läuft kannst du es in den Scripting-Agent implementieren.
Grüße Uwe
Ich würde dir empfehlen das Script in der Entwurfsphase nicht mit dem Scripting-Agent zu testen sondern es für Tests erst mal so zu schreiben das du es als normales Script testen kannst. Wenn es dann läuft kannst du es in den Scripting-Agent implementieren.
<?xml version="1.0" encoding="utf-8" ?>
<Configuration version="1.0">
<Feature Name="MailboxProvisioning" Cmdlets="enable-mailbox">
<ApiCall Name="OnComplete">
if ($succeeded)
{
$USER = $provisioningHandler.UserSpecifiedParameters["Name"]
$cnt = 0
do {
$cnt++
# maximale Wartezeit 60 Sekunden, dann Abbruch
if ($cnt -gt 60){exit}
sleep -seconds 1
$mbxExists = Get-MailBoxPermission -Identity $USER -User "NT AUTHORITY\SELF" -ErrorAction SilentlyContinue
} while (!$mbxExists)
$OU = (Get-MailBox -Identity $USER).OrganizationalUnit
$ATT = (Get-mailbox -Identity $USER).customattribute1
if (($OU -eq "it-contact.local/Frankfurt (FFM)/IT-Contact/Users") -and ($ATT -eq "extern")) {
Enable-Mailbox $USER -Archive -ArchivDatabase ArchivMDB
Set-CASMailbox -Identity $USER -PopEnabled $false -ImapEnabled $false
Set-Mailbox -Identity $USER `
-SingleItemRecoveryEnabled $true `
-UseDatabaseQuotaDefaults $false `
-IssueWarningQuota 450MB `
-ProhibitSendQuota 500MB `
-ProhibitSendReceiveQuota 550MB `
-ArchiveQuota 1GB `
-ArchiveWarningQuota 800MB `
-RetainDeletedItemsFor "30.00:00:00" `
-AddressBookPolicy "IT-Contact extern GmbH"
}elseif (($OU -eq "it-contact.local/Frankfurt (FFM)/IT-Contact/Users") -and ($ATT -ne "extern")){
Enable-Mailbox $USER -Archive -ArchivDatabase ArchivMDB
Set-CASMailbox -Identity $USER -PopEnabled $false -ImapEnabled $false
Set-Mailbox -Identity $USER `
-SingleItemRecoveryEnabled $true `
-UseDatabaseQuotaDefaults $false `
-IssueWarningQuota 900MB `
-ProhibitSendQuota 1GB `
-ProhibitSendReceiveQuota 1.1GB `
-ArchiveQuota 2GB `
-ArchiveWarningQuota 1.8GB `
-RetainDeletedItemsFor "30.00:00:00" `
-AddressBookPolicy "IT-Contact GmbH"
}elseif (($OU -eq "it-contact.local/Frankfurt (FFM)/MOC Testumgebung/Users") -and ($ATT -eq "extern")){
Set-CASMailbox -Identity $USER -PopEnabled $false -ImapEnabled $false
Set-Mailbox -Identity $USER `
-SingleItemRecoveryEnabled $true `
-UseDatabaseQuotaDefaults $false `
-IssueWarningQuota 180MB `
-ProhibitSendQuota 200MB `
-ProhibitSendReceiveQuota 220MB `
-RetainDeletedItemsFor "21.00:00:00" `
-AddressBookPolicy "MOC Testumgebung extern"
}elseif (($OU -eq "it-contact.local/Frankfurt (FFM)/MOC Testumgebung/Users") -and ($ATT -ne "extern")){
Set-CASMailbox -Identity $USER -PopEnabled $false -ImapEnabled $false
Set-Mailbox -Identity $USER `
-SingleItemRecoveryEnabled $true `
-UseDatabaseQuotaDefaults $false `
-IssueWarningQuota 180MB `
-ProhibitSendQuota 200MB `
-ProhibitSendReceiveQuota 220MB `
-RetainDeletedItemsFor "21.00:00:00" `
-AddressBookPolicy "MOC Test intern"
}
}
</ApiCall>
</Feature>
</Configuration>
Ich habe gesehen das du da 2 - 3 Zusatztatsachen eingebaut hat $cnt = 0 und das darunter werde mal morgen nachschlagen was das bedeutet.
das ist nur eine Exit-Bedingung damit das Script nicht unendlich in einer Schleife hängen bleibt. Nach spätestens 60 Durchläufen bricht hier das Script ab falls $mbxExists immer noch $false sein sollte.