使用遠端 Windows PowerShell 來利用 FOPE SFTP 檔案管理使用者

 

上次修改主題的時間:2014-09-19

Microsoft Exchange Online Protection (EOP) 不支援透過安全檔案傳輸通訊協定 (SFTP) 上傳使用者。不過,使用 SFTP 來上傳使用者和管理虛擬網域的 Microsoft Forefront Online Protection for Exchange (FOPE) 承租人,可以使用 EOP 中的遠端 Windows PowerShell 來上傳使用者和將使用者加入至通訊群組。EOP 中使用通訊群組以不同方式來路由傳送一組使用者的郵件,或將 Exchange 傳輸規則套用至一組使用者。

在 FOPE 中,特殊格式化的 .txt 檔案可以透過 SFTP 上傳至 FOPE,藉以將使用者加入至 FOPE。使用虛擬網域時,您也可以使用此方法來加入使用者。

在 EOP 中,最佳作法是使用 Windows Azure Active Directory 同步處理,從內部部署 Active Directory 環境來同步化使用者和群組。不過,如果無法使用目錄同步處理,您可以使用遠端 Windows PowerShell 來管理使用者和群組。

下列範例指令碼以 FOPE 用於 SFTP 上傳的相同格式,剖析 .txt 檔案中的使用者和虛擬網域資訊。此範例指令碼會連接至 EOP、以隨機 10 位數密碼建立新的郵件使用者、建立通訊群組,然後從現有 FTP 上傳檔案中將使用者加入至通訊群組。

執行指令碼
  1. 將本主題尾端的 RunCmdletForSFTPUploads.ps1 指令碼複製到記事本,然後將檔案儲存至很容易找到的位置 (例如 c:\scripts)。

  2. 使用下列語法執行指令碼:

    & "<script file path>\RunCmdletForSFTPUploads.ps1" "<text file path>"

    在下列範例中,指令碼位於 C:\Scripts,而文字檔位於 D:\Data。

    & "C:\Scripts\RunCmdletForSFTPUploads.ps1" "D:\Data"
    
  3. 此指令碼會提示您輸入認證來登入 EOP 承租人。如果登入成功,指令碼會執行建立使用者和建立或更新通訊群組所需的指令程式。


param([string]$filepath = "FilePath")

# Set up a random number generator.
$rand = New-Object System.Random -ArgumentList (get-date).millisecond

# Get the contents of the SFTP input file.
$content = Get-Content $filepath

# Login to EOP.
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
Import-PSSession $Session

# Parse the content.
foreach ($line in $content) {
    switch -Wildcard ($line) {
        "#DOMAIN*" {$type = "Domain"}
        "#GROUP*" {
            $type = "Group"
            $groupname = $line.Substring(7,$line.IndexOf('GROUP-ONLY')-7)
            $groupname = $groupname.Trim(" ")

            #Try to add a new distribution group.
            New-DistributionGroup -Name $groupname
            
         }
        "#END_OF_FILE" {$type = "End"}
        "*@*" {
            # This is a proxy address.
            switch ($type) {
                "Domain" {
                    #Add a new mail user.
                    write-host ("Adding new mail user: $line")
                    
                    # Generate a new 10 character password.
                    $NewPassword = ""
                    1..10 | ForEach { $NewPassword = $NewPassword + [char]$rand.next(40,127) }

                    # Get the alias from the primary email.
                    $tokens = $line.Split("@")
                    $alias = $tokens[0]

                    # Run New-MailUser
                    New-MailUser -Name $line -Alias $alias  -MicrosoftOnlineServicesID $line -Password (ConvertTo-SecureString -String $NewPassword -AsPlainText -Force)
                       
                }
                "Group" {
                    # Add the new user to a group.
                    write-host ("Adding user to group: $line to $groupname")
                    Add-DistributionGroupMember -Identity $groupname -Member $line -Confirm:$false -BypassSecurityGroupManagerCheck

                }
            } 
         }
         default {
         
         } 
     }           
} 
     

 
顯示: