Mam skrypt, który działa i jest zaprogramowany do wykonywania kopii zapasowej każdej skrzynki pocztowej przez miesiąc i zapisywania jej na lokalnym dysku udostępnionym. Po uruchomieniu skryptu eksportuje całą bazę danych zamiast określonego zakresu dat. Nie jestem programistą. Przeszukałem partię Google, ale nie udało się w 100%. Chcę następujące modyfikacje
Chcę, aby ten skrypt eksportował skrzynki pocztowe tylko z określonej bazy danych, a nie ze wszystkich baz danych. Próbowałem "-Database Databasename" w skrypcie, ale daje błąd.
Skrypt powinien eksportować wszystkie skrzynki pocztowe z wyżej wymienionej bazy danych za każdy miesiąc. Powiedz, jeśli uruchomisz ten skrypt 9 grudnia 2015 r., Powinien on zostać wyeksportowany od 9 listopada do 9 grudnia 2015. Daty muszą zostać zmienione automatycznie zgodnie z datą kompilacji.
Dolna część skryptu nie uruchomi się, gdy status żądania eksportu.
To jest skrypt
$Export = Get-Mailbox
$endDate = Get-Date "00:00:00"
$startDate = $endDate.AddDays(-30)
$month = "{0:D2}" -f [int]$startDate.Month
$year = "{0:D4}" -f [int]$startDate.Year
Write-Host -NoNewline "Exporting items between $startDate and $endDate..."
$Export|%{$_|New-MailboxExportRequest -ContentFilter {(Received -ge $startDate) -and (Received -lt $endDate)} -FilePath "\\FileServer\EmailBackups\ExportTest\Test\$($_.alias).pst"}
Write-Host "Done."
Write-Host -NoNewline "Waiting for export to complete..."
Po tym skrypcie pojawia się błąd. Ale skrzynki pocztowe są eksportowane w całości
While(!(Get-MailboxExportRequest -Mailbox $Exprot -Status Completed))
{
#Sleep for a few minutes
Write-Host -NoNewline "."
Start-Sleep -s 60
}
Write-Host "Done."
Write-Host -NoNewline "Removing Export Request..."
Get-MailboxExportRequest -Mailbox $Export -Status Completed | Remove-MailboxExportRequest
Write-Host "Done."
Pomóż ulepszyć ten skrypt. Dzięki
źródło
Odpowiedzi:
Eksportuj skrzynki pocztowe Exchange z określonej bazy danych Exchange iz określonego zakresu dat za pomocą PowerShell do plików PST z unikalnymi nazwami
Na pytanie nr 1. Wygląda na to, że musisz tylko wpisać
Get-Mailbox -Database $ExchangeDB
polecenia, a następnie potokuj to do reszty logiki, itp. To by było, gdy ustawiłeś zmienną$ExchangeDB
i ustaw ją na nazwę Exchange DB. Z jakiegoś powodu musisz ustawić tę komendę jako zmienną, a następnie ją potokować lub jest jakiś problem z jednoczesnym potokowaniem itd.Na pytanie nr 2. Wydaje się, że zmienna danych nie radzi sobie dobrze z
-ContentFilter
Parametr z łańcuchem daty z jakiegoś powodu, ale robi to, jeśli umieścisz datę minus dni w zmiennej i złączysz ją jako część polecenia, a następnie użyjesz tego polecenia, gdy zostanie wykonane.Na pytanie nr 3. Wygląda na to, że David odpowiedział na to pytanie i może to być literówka w tej części, w której masz problemy. W przeciwnym razie możesz przetestować tę składnię w pętli, aby zobaczyć, jakie wyniki uzyskasz, ponieważ nie sądzę, że potrzebujesz
-Mailbox $Export
części w poleceniu:PUNKTY PAMIĘCI SCRIPT
$FromDate = (Get-Date).AddDays(-30).ToString("MM/dd/yyyy")
ponieważ otrzymasz dane z tej daty do bieżącej daty.Get-Mailbox -Database $ExchangeDB
komenda musi być ustawiona jako zmienna, a następnie ta zmienna jest przesyłana do innych części [komendy dynamicznej]$DynCMD
zmienna lub występuje problem z jednoczesnym potokowaniem.Received -ge
iSent -ge
z-or
zamiast-and
z-ContentFilter
parametr - zapewnia to, że otrzymasz zarówno datę otrzymania, jak i wysłaną dla wiadomości e-mail w obu kierunkach.%temp%
Zmienna środowiskowa systemu operacyjnego Windows i jeśli istnieje przed uruchomieniem, usuwa ją, a następnie buduje.Uwaga do wydania
(Myślałem
Invoke-Command
zadziałałoby, ale zabrakło mi czasu, więc łatwiej i szybciej mogłem przekazać wszystko do skryptu PowerShell ze wszystkimi odpowiednimi zmiennymi ustawionymi zgodnie z kryteriami i po prostu wykonać go później. TheInvoke-Command
ma problemy ze zmiennymi połączonymi z innymi zmiennymi i tworzy dynamiczne komendy, więc to było proste i potwierdzone, aby działać zgodnie z oczekiwaniami, aby rozwiązać twoje problemy, inne niż # 3, które nadal nie są w 100% pewne tego problemu dokładnie tak, zakładając, że literówka, jak sugerował David, chyba że Na pytanie nr 3. podana przeze mnie składnia rozwiązuje.)PRZYKŁAD POWERSHELL PRZYKŁAD (PIPELINE LOOP)
(Eksportuj wszystkie skrzynki pocztowe programu Exchange z określonej bazy danych Exchange do udziału plików w plikach PST z nazwą pliku będącą nazwą aliasu konta skrzynki pocztowej)
UWAGA: Będziesz musiał zmienić dwie zmienne w tym skrypcie, aby wskazać, z czym jest skonfigurowane twoje środowisko
1.
nazwa Exchange DB [$ExchangeDB = "<Exchange_DB_Name>"
i2.
ścieżka UNC, do której mają być eksportowane pliki PST [$ExportDir = "\\<ServerName>\<ShareName>\<FolderPath>"
] więc te dwie zmienne muszą zostać zmienione. Gdy zostaną one zmienione, uruchom je z okna konsoli programu Exchange Server PowerShell, tak jak je przetestowałem i potwierdziłem, że działa zgodnie z oczekiwaniami.PRZYKŁAD POWERSHELL PRZYKŁAD (FOREACH LOOP)
Print Print Exchange Management Console i PowerShell Console
Testowe uruchomienie
Poniżej możesz wkleić do konsoli Exchange PowerShell Management, aby dynamicznie budować skrypt Windows PowerShell dla każdego uruchomienia (przy spełnieniu kryteriów spotkania). Po uruchomieniu w powłoce Exchange PowerShell Management Shell, na serwerze Exchange, ale nie w PS, przejdź do
Start
- & gt;Run
- & gt; i wpisz%Temp%
i naciśnij Wchodzić .Stamtąd sprawdź, czy
PS1
plik został nazwanyTempMBExport.ps1
i otwórz go za pomocą Notatnika i spójrz na logikę. Zobacz, co się stanie, jeśli skopiujesz zawartość tego skryptu do konsoli Exchange PowerShell Management i wciśniesz Wchodzić .Nie jestem pewien, czy istnieje problem z tym, że nie przechodzę do folderu zmiennych środowiskowych Windows Temp, jeśli plik nie istnieje lub konsola PS nie ma dostępu do wykonania z tego miejsca lub jeśli Twoja wersja Exchange nie lubi z tych poleceń zacznij od tego i zobaczmy, co się stanie, aby rozwiązać problem.
Poniższy skrypt wyklucza
& "$TempPSScript"
część więc NIE wykonuje dynamicznie zbudowanego i kompilowanego%temp%\TempMBExport.ps1
skrypt potwierdzający, że znajduje się w lokalizacji i czy ta logika będzie uruchamiana w konsoli Exchange PS Management to dobry następny krok do rozwiązania problemu.Trudno jest rozwiązać problem na piśmie bez dostępu lub zdalnie, więc jestem trochę ograniczony i muszę niestety spekulować. Nie jestem pewien, jakie dalsze opcje masz, ale są to szybkie myśli.
W KOŃCU
Kiedy uruchamiam PS tak, jak powiedziałem powyżej i otwieram go za pomocą notatnika, aby zobaczyć logikę, buduje go w tym formacie za pomocą tego sytaxu, więc może spróbuj uruchomić to w powłoce zarządzania PS Exchange i zobaczyć, jakie wyniki uzyskasz. Jeśli działa w ten sposób, problem ma związek z wykonaniem skryptu, ale nie ma żadnych błędów, ale może to również rzucić nieco światła na ten temat.
źródło
Po tym skrypt wyświetla błąd
Wygląda na to, że masz błąd ortograficzny.
Zastąpić
$Exprot
z$Export
:źródło