本文為機器翻譯文章。如需檢視英文版,請選取 [原文] 核取方塊。您也可以將滑鼠指標移到文字上,即可在快顯視窗顯示英文原文。
譯文
原文

使用 Windows PowerShell 的部門特有的資料存取

SharePoint 2013
 

適用版本:SharePoint Server 2013

上次修改主題的時間:2015-03-09

摘要:會自動授與使用 Windows PowerShell、 SharePoint 清單及工作排程器根據其 Active Directory 部門的使用者資料庫存取權。

本案例說明如何使用以排定的工作形式執行的Windows PowerShell指令碼來自動處理使用者要求存取資料來源,並指派這些使用者存取其 Active Directory department 為基礎的適當層級。

重要事項 重要事項:
此案例僅適用於 SharePoint Server 2013。

本文內容:

本文顯示的自動化資料庫存取權要求使用Windows PowerShell範例使用 AdventureWorks 範例資料集。藉由使用Windows PowerShell,您可以將封裝成指令碼以確保它們一致地套用商務程序。使用Windows PowerShell也會儲存對管理時間,可讓沒有直接涉及之網域系統管理員必須執行的特定 Active Directory 函數。

在此案例中,我們會使用Windows PowerShell從 Active Directory 擷取要求使用者的部門。使用此資訊,請Windows PowerShell指令碼將指派使用者適當的存取權。在本文所述的 AdventureWorks 範例,銷售部門中的使用者將授與完整讀取權限給任何 AdventureWorks 資料來源而言,而不在銷售部門中的使用者將會獲得限制排除特定的財務資訊的 OLAP cube 存取。

本文提供如何使用Windows PowerShell自動化管理處理程序在組織中的其中一個範例。若要修改的指令碼及程序,以符合您的特定需求。

您可以安裝 AdventureWorks 並遵循本文中的步驟來建立可行的原型,也可以使用您自己的資料來源而非 AdventureWorks。

本文說明如何:

  1. 建立可讓使用者要求存取資料來源的 SharePoint 清單。

  2. Analysis Services為不同使用者群組提供不同的資料存取層級中建立的角色。

  3. 建立排定的工作中執行、 掃描 SharePoint] 清單中,並將使用者加入至適當 Active Directory 群組,根據其 Active Directory 部門來授與適當資料存取權的Windows PowerShell指令碼。

開始之前,請注意下列事項:

  • 您將需要您可以在其中建立 SharePoint 清單的 SharePoint 網站。本文中的程序假設使用網站與 BI 中心範本,但是小組網站也可運作。如果您要使用的 BI 中心範本設定站台,請參閱在 SharePoint Server 2013 中設定商務智慧中心

  • 本文中的範例使用 AdventureWorks 範本資料集。您可以使用 AdventureWorks 或您自己的資料來源。若要安裝 AdventureWorks,請參閱<設定商務智慧解決方案的 AdventureWorks>。

  • 本文中的範例會使用不同的使用者提供不同的層級的存取 OLAP cube。我們使用 AdventureWorks 範例中,但如果您偏好您可以使用自己的 cube。

  • 您必須建立 Active Directory 帳戶和群組本文中的程序的一部分。其中一個帳戶必須要新增至 Domain Admins 群組。我們建議使用的測試環境必須在網域控制站的直接存取。或者,您可以使用您的網域管理員来取得所需的帳戶設定。

注意事項 附註:
如果您已遵循這一系列相關文件中的步驟,文中要求您建立的一些使用者和群組可能已存在於環境中。若是如此,您可以使用現有的使用者和群組。不需要重新建立現有的使用者和群組。

在本節,我們將會:

  1. 設定所需的 Active Directory 帳戶和群組。

  2. 在 SQL Server 和 Analysis Services 中設定 Active Directory 群組的資料存取權。

  3. 建立 SharePoint 清單來收集資料存取權要求。

完成這些步驟就能提供基礎結構所需的Windows PowerShell自動化及工作排程在下一節中所述。

這段影片顯示步驟中設定帳戶和群組及建立 SharePoint 清單,如本文所述。(時間: 13:01。)

影片:初始設定

視訊 (播放按鈕) 圖示

針對您想要授與存取權的每個資料來源,各建立一個 Active Directory 群組。以 AdventureWorks 而言,我們將為下列資料來源建立 Active Directory 群組:

  • AdventureWorks 資料庫 – 我們將建立名為 AdventureWorksDBUsers 的群組

  • AdventureWorks 資料倉儲 – 我們將建立名為 AdventureWorksDWUsers 的群組

  • AdventureWorks OLAP cube– 我們將建立的受限制的 cube 存取 adventureworksolapusers 的群組和完整 cube 存取權的呼叫 AdventureWorksOLAPSales 群組。

請使用下列程序建立 Active Directory 群組。針對上述每個 AdventureWorks 群組,或您自己的每個資料來源,遵循相關程序。

建立 Active Directory 群組
  1. 以網域管理員身分登入網域控制站。

  2. 依序按一下 [開始]、[系統管理工具] 及 [Active Directory 使用者和電腦]。

  3. 展開網域節點。

  4. 在 [使用者] 上按一下滑鼠右鍵,然後依序按一下 [新增] 及 [群組]。

  5. 在 [新增物件 - 群組] 對話方塊中,在 [群組名稱] 文字方塊輸入群組的名稱,然後按一下 [確定]。

針對此案例中,我們也需要網域管理員帳戶。此帳戶會用以執行排程的工作,會將使用者新增至上述我們建立的 Active Directory 群組。您可以使用現有的網域管理員帳戶,但建議您建立一個新此用途。我們將為網域 proxy 帳戶參照此帳戶。

使用下列程序建立 Active Directory 帳戶。

建立 Active Directory 帳戶
  1. 在 [Active Directory 使用者及電腦] 中,以滑鼠右鍵按一下 [使用者],按一下 [新增],然後按一下 [使用者]。

  2. 在 [全名] 文字方塊中輸入使用者帳戶 (例如, ADProxyAccount) 的名稱。

  3. 在 [使用者登入名稱] 文字方塊中,輸入登入名稱。

  4. 按 [下一步]。

  5. 輸入帳戶的密碼並加以確認。

  6. 選擇適用於貴組織的密碼選項,然後按 [下一步]。

  7. 按一下 [完成]。

一旦建立帳戶之後,您必須將它新增至 Active Directory 中 Domain Admins 群組。若要將帳戶新增至 Domain Admins 群組中使用下列程序。

將帳戶新增至 Domain Admins 群組
  1. 在 [Active Directory 使用者及電腦] 中,在 [使用者] 下方按兩下 [Domain Admins] 群組。

  2. 在 [成員] 索引標籤中,按一下 [新增]。

  3. 輸入您剛建立的帳戶的名稱,然後按一下 [確定]。

  4. 按一下 [確定]。

此案例的一部分,我們將檢查使用者 Active Directory 帳戶設定來決定何種所屬的部門。您必須具備的銷售部門的一或多個使用者及擁有不同部門的一或多個使用者 (例如 Engineering)。

使用下列程序可設定要使用此案例的一部分的 Active Directory 使用者帳戶的部門。

若要設定 Active Directory 使用者的部門
  1. 在 Active Directory 使用者及電腦] 下的使用者,按兩下您要更新的使用者。

  2. 按一下 [組織] 索引標籤。

  3. 在 [部門] 文字方塊中輸入您想要使用此使用者的部門名稱。

  4. 按一下 [確定]。

完成 Active Directory 設定步驟之後,下一步是將適當的資料庫存取權授與新的 Active Directory 群組。

針對您想要授與使用者存取權的每個資料來源,其對應的 Active Directory 群組皆需要在 SQL Server 中有一個登入,或在 Analysis Services 中有一個角色。以 AdventureWorks 而言,這類資料庫需要有下列登入:

  • AdventureWorks 資料庫 – AdventureWorksDBUsers Active Directory 群組的登入

  • AdventureWorks 資料倉儲 – AdventureWorksDWUsers Active Directory 群組的登入

使用下列程序建立SQL Server登入。請依照下列程序的每個 AdventureWorks 資料庫或每一個您自己的資料庫。

建立 SQL Server 登入
  1. 以 SQL Server 管理員身分,登入執行 SQL Server 的電腦。

  2. 依序按一下 [開始]、[所有程式]、[Microsoft SQL Server 2012] 及 [SQL Server Management Studio]。

  3. 在 [連接至伺服器] 對話方塊上,從 [伺服器類型] 下拉式清單選擇 [資料庫引擎],然後按一下 [連接]。

  4. 展開 [安全性] 節點。

  5. 在 [登入] 上按一下滑鼠右鍵,然後按一下 [新增登入]。

  6. 按一下 [搜尋]。

  7. 在 [選取使用者或群組] 對話方塊中,按一下 [物件類型]。

  8. 在 [物件類型] 對話方塊中,選取 [群組] 核取方塊,然後按一下 [確定]。

  9. 在 [選取使用者或群組] 對話方塊上,輸入您要建立登入之 Active Directory 群組的名稱 (例如,Contoso\AdvenureWorksDBUsers),然後按一下 [確定]。

  10. 在 [選取頁面] 窗格中,按一下 [使用者對應]。

  11. 選取適當資料庫 (例如,AdventureWorks2012) 的核取方塊,然後在 [資料庫角色成員資格] 下方,選取 [db_datareader] 核取方塊。

  12. 按一下 [確定]。

您也必須建立任何Analysis Services cube 存取Analysis Services角色。AdventureWorks、 cube 需要 AdventureWorksOLAPUsers 及 AdventureWorksOLAPSales Active Directory 群組的下列角色:

  • 一般存取– 此角色將會用來授與存取權的 AdventureWorksOLAPUsers 的群組。這是不屬於 「 業務 」 部門的使用者。

  • 銷售存取– 此角色將會用來授與存取權的 AdventureWorksOLAPSales 群組。這會是銷售部門成員的使用者。

使用下列程序建立每個 Active Directory 群組Analysis Services角色。建立或Analysis Services cube 的 AdventureWorks OLAP cube 的角色。

建立 Analysis Services 角色
  1. 以 SQL Server 管理員身分,登入執行 SQL Server 的電腦。

  2. 依序按一下 [開始]、[所有程式]、[Microsoft SQL Server 2012] 及 [SQL Server Management Studio]。

  3. 在 [連接到伺服器] 對話方塊上,從 [伺服器類型] 下拉式清單中選擇 [Analysis Services],然後按一下 [連接]。

  4. 展開 [資料庫]。

  5. 展開 [AdventureWorksDW2012Multidimensional-EE] 資料庫。

  6. 以滑鼠右鍵按一下 [角色],然後按一下 [新增角色]。

  7. 在 [一般] 頁面上輸入的名稱 (例如,一般存取或銷售存取) 的角色名稱] 文字方塊。

  8. 選取 [成員資格] 頁面,然後:

    1. 按一下 [新增]。

    2. 在 [選取使用者或群組] 對話方塊中,按一下 [物件類型]。

    3. 在 [物件類型] 對話方塊中,選取 [群組] 核取方塊,然後按一下 [確定]。

    4. 在 [選取使用者或群組] 對話方塊上,輸入您要建立登入的 Active Directory 群組的名稱 (例如,Contoso\AdvenureWorksOLAPUsers),然後按一下 [確定]。

  9. 選取 [Cube] 頁面,然後針對兩個 Cube,都從 [存取] 下拉式清單中選取 [讀取]。

  10. 按一下 [確定]。

一旦建立角色之後,我們需要修改一般存取角色來限制的資料提供給此角色的成員。在這個範例中,我們將會移除包含財務資訊、 防止使用者不是從 「 業務 」 部門就看不到此資料的一些欄位使用 MDX 查詢。

使用下列程序可修改 「 一般存取 」 角色。

若要限制使用 MDX cube 存取權
  1. 在Analysis Services、 資料庫下的Adventureworksdw2012multidimensional-ee] 資料庫,按一下 「 一般存取 」 角色。

  2. 在左窗格中選取儲存格的資料] 頁面。

  3. 選取 [啟用的讀取權限] 核取方塊。

  4. 允許讀取的 cube 內容] 方塊中輸入下列 MDX 陳述式:

    NOT Measures.CurrentMember IS Measures.[Total Product Cost] and NOT Measures.CurrentMember IS Measures.[Standard Product Cost] and NOT Measures.CurrentMember IS Measures.[Gross Profit] and NOT Measures.CurrentMember IS Measures.[Gross Profit Margin] and NOT Measures.CurrentMember IS Measures.[Expense to Revenue Ratio]
    
    注意事項 附註:
    額外的財務資訊 AdventureWorks OLAP cube,但此 MDX 陳述式會移除為有效的我們的範例所需的足夠資訊。
  5. 按一下 [確定]。

SQL Server和Analysis Services都已設定所需的登入和角色下, 一步是建立要使用資料存取權要求專用的 SharePoint 清單。

在 SharePoint 清單中,我們需要可以用來定義資料庫存取權要求的欄位。這包括要求存取、 他們想要存取、 資料來源及這些區域來指定要求業務上的理由之使用者的別名。我們也需要Windows PowerShell指令碼可用來追蹤要求的狀態欄位以及儲存記錄資訊的位置] 欄位。

使用下列程序來建立 SharePoint 清單。您可以新增其他欄位,則您需要,但未提供給省略任何欄位請務必Windows PowerShell指令碼也無法運作。

若要建立的 SharePoint 清單
  1. 移至您要建立清單的網站。

  2. 在左側導覽中,按一下 [網站內容]。

  3. 按一下 [新增應用程式]。

  4. 按一下 [自訂清單]。

  5. 在 [新增自訂清單] 對話方塊中,在 [名稱] 文字方塊中輸入部門資料存取和 [建立

    注意事項 附註:
    您可以選擇不同的名稱,但需要更新本文稍後所提供 Windows PowerShell 指令碼中的清單名稱。
  6. 在 [網站內容] 頁面上,按一下 [部門資料存取清單。

  7. 在清單頁面上,在功能區的 [清單] 索引標籤按一下 [清單設定]。

  8. 在清單設定頁面的 [欄] 下方,使用 [建立欄] 連結來建立下表所述的欄。

     

    欄位名稱 描述 選項

    Status

    要求的狀態。

    選擇 [選擇 (] 功能表中選擇) ] 選項,並輸入 [輸入分列一行每種選擇] 方塊中可用的選項新增]、 [成功] 和 [失敗。指定預設值的 [新增]

    資料來源

    可用的資料來源清單。

    選擇 [選擇 (供選擇的功能表)] 選項,然後在 [一行鍵入一個選擇] 方塊中,輸入 AdventureWorks DBAdventureWorks DWAdventureWorks OLAP,作為可用的選擇 (如果使用您自己的資料來源,請在此處輸入那些資料來源,而非這些 AdventureWorks 選項)。

    使用者別名

    要求資料存取權的使用者的別名。

    使用 [單行文字] 選項,並在 [此欄需要包含資訊] 下方選取 [是],以確保這是必要欄位。

    業務上理由

    這是選擇性欄位,可讓您記錄使用者要求資料存取權的原因。

    請讓此欄位使用 [多行文字] 選項。

    記錄

    Windows PowerShell 指令碼所產生的記錄,用以說明指令碼已採取的動作。

    請讓此欄位使用 [多行文字] 選項。

為了讓 Windows PowerShell 指令碼可以運作,網域 Proxy 帳戶需要有此清單的讀取/寫入存取權。最簡單的作法是將清單所在網站的「編輯」存取權授與此帳戶。

授與網站的存取權
  1. 在清單所在的網站上,按一下 [共用]。

  2. 輸入網域 Proxy 帳戶的使用者帳戶 (例如,contoso\ADProxyAccount)。

  3. 按一下 [顯示選項]。

  4. 從 [選取群組或權限等級] 下拉式清單中,選擇[編輯]

  5. 按一下 [共用]

您已建立之 SharePoint 清單及授與編輯網域 proxy 帳戶的權限下, 一步是自動化程序授與存取權之資料來源來中斷與Windows PowerShell指令碼的清單。下一節說明建立指令碼及自動化做為排程工作的程序。

在本節,我們將會:

  1. 建立Windows PowerShell指令碼所讀取之 SharePoint 清單並套用根據使用者的部門的 Active Directory 中的適當權限。

  2. 在 Windows Server 中建立排定的工作,以依照指定的間隔時間執行指令碼。

使用就地和排定的工作執行指令碼,使用者可以將其資料庫要求新增至 SharePoint 清單與他們將會自動新增至清單短時間內處理。

注意事項 附註:
指令碼會在 Active Directory 中執行功能。為了載入 Active Directory Windows PowerShell 模組,在要執行指令碼的伺服器上,必須已設定「遠端伺服器管理工具」。「遠端伺服器管理工具」是項可透過「伺服器管理員」來新增的功能。

本影片會顯示中設定會讀取 SharePoint Windows PowerShell指令碼的相關步驟清單,並將套用要求的權限根據使用者的部門和設定排定的工作來執行Windows PowerShell指令碼。(時間: 11:42。)

影片:自動化和指令碼

視訊 (播放按鈕) 圖示

為了將授權存取所要求資料來源的過程自動化,我們使用 Windows PowerShell 指令碼。以下的範例指令碼會執行下列基本功能:

  1. 載入讓使用者要求資料存取權之 SharePoint 清單。

  2. 循環尋找的狀態為 [新增的每個清單項目。

  3. 每個項目的狀態的 [新增],指令碼:

    1. 檢查使用者的 Active Directory 部門。

    2. 如果使用者別名] 欄位中指定的使用者,銷售部門的使用者是會新增至指定欄位的資料來源中的資料來源相關聯之 Active Directory 群組。

    3. 如果使用者所指定的使用者別名] 欄位不是 「 業務 」 部門和這些要求的 cube 存取然後使用者新增至 AdventureWorksOLAPUsers Active Directory] 群組中,給予他們限制 cube 存取。

    4. 如果使用者別名] 欄位中指定的使用者不是銷售部門且其具有所要求的存取權的 AdventureWorks 資料庫或資料倉儲然後要求被拒和字串新增至提示存取遭拒因為它們不在銷售部門中的記錄檔。

  4. 根據結果清單中項目的狀態會新增從變更為成功失敗

  5. 清單項目的「記錄」欄位中會寫入簡短的事件記錄。

  6. 電子郵件傳送給給予要求的最終狀態的使用者別名欄位中指定的使用者。

在此案例中,我們拒絕使用者權限至關聯式資料庫其中一項若不在銷售部門因為機密的財務資訊存在於這些資料庫並沒有利用篩選出的簡易方法。在 OLAP cube,不過,我們有排除的機密資訊,因此我們可以允許非銷售 cube 的存取權的使用者有限易角色設定。

請使用下列程序建立 Windows PowerShell 指令碼。請在 SharePoint Server 2013 應用程式伺服器上建立指令碼。

建立 Windows PowerShell 指令碼
  1. 在 SharePoint Server 應用程式伺服器上,按一下 [開始],按一下 [執行],輸入 PowerShell_ISE.exe,然後按一下 [確定]。

  2. 將下列指令碼複製並貼到 Windows PowerShell 編輯器中:

    # Add SharePoint and Active Directory cmdlets
    if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq $null) {
         Add-PSSnapin "Microsoft.SharePoint.PowerShell"
     } 
     if ((Get-Module ActiveDirectory -ErrorAction SilentlyContinue) -eq $null) {
         Import-module ActiveDirectory
     }
    
    # Create a SMTP client object for sending final status email
    $MailServer = new-object System.Net.Mail.SMTPClient("Contoso-Exch")
    
    # Get-SPWeb for the site where the list is located
    $ListWeb = Get-SPWeb http://contoso-appsrv1/sites/BICenter
    
    # Get the list by name
    $ListName = $ListWeb.Lists["Department Data Access"]
    
    # Get the list items
    $ListItems = $ListName.items
    
    # Loop through each list item
    $ListItems | foreach {
    
    $ListItem = $_
    
    # Look for list items with a status of "New"
    if($ListItem["Status"] -eq "New") {
    
        # Clear out the variables for each loop
        $LogText = ""
        $ResultsText = ""
        $ActionStatus = ""
        $ActionTime = ""
        $DataSourceADGroup = ""
    
        # Add-ADGroupMember requires alias with no domain, so remove the domain\ if it exists
        $SharePointUser = $ListItem["User alias"]
        $SharePointUser = $SharePointUser.ToLower()
        $SharePointUser = $SharePointUser.Replace("contoso\","")
        
        # Set user's email for status email
        $SharePointUserEmail = $SharePointUser + "@contoso.local"
        
        # Get the user's department from Active Directory
        $department = Get-ADUser -Identity $SharePointUser -Properties Department
        $department = $department.department
        
        # Add user request and data source information to the log variable
        $LogText += "User " + $ListItem["User alias"] + " (" + $department + ") requesting access to " + $ListItem["Data Source"] + "`n`r"
    
        
        # If the user's department is Sales, then they're allowed full read access to the data source they chose
        if($department -eq "Sales")
        {
            # Determine data source being requested and assign the associated AD group to the $DataSourceADGroup variable
            if($ListItem["Data Source"] -eq "AdventureWorks DB") {$DataSourceADGroup = "AdventureWorksDBUsers"}
            if($ListItem["Data Source"] -eq "AdventureWorks DW") {$DataSourceADGroup = "AdventureWorksDWUsers"}
            if($ListItem["Data Source"] -eq "AdventureWorks OLAP") {$DataSourceADGroup = "AdventureWorksOLAPSales"}
        
            # Try to add the requested user to the AD group
            try{
                Add-ADGroupMember -Identity $DataSourceADGroup -Members $SharePointUser
    
                # Note success in the log variable
                $LogText += "Adding " + $ListItem["User alias"] + " to " + $DataSourceADGroup + "`n`r"
            
                # Note success in the $ActionStatus variable for later update to the SharePoint list
                $ActionStatus = "Succeeded"
    
                # Note success for the Request results field
                $ResultsText = "Access to " + $ListItem["Data Source"] + " has been granted."
                }
            catch{
                # If Add-ADGroupMember fails, so note in the log variable
                $LogText += "Error: could not add " + $ListItem["User alias"] + " to " + $DataSourceADGroup + ": " + $_ + "`n`r"
            
                # Note failure in the $ActionStatus variable for later update to the SharePoint list
                $ActionStatus = "Failed"
                
                # Note in the Results text that there was an error
                $ResultsText = "There was an error in processing your request for access to " + $ListItem["Data Source"] + ". Please contact your administrator"
                }
        }
        else
        # If the user's department is not Sales, then they're only allowed limited read access to the cube
        {
    
            # If the user is requesting cube access, then attempt to grant that access
            if($ListItem["Data Source"] -eq "AdventureWorks OLAP")
                {
                $DataSourceADGroup = "AdventureWorksOLAPUsers"
                try{
                    Add-ADGroupMember -Identity $DataSourceADGroup -Members $SharePointUser
    
                    # Note success in the log variable
                    $LogText += "Adding " + $ListItem["User alias"] + " to " + $DataSourceADGroup + "`n`r"
            
                    # Note success in the $ActionStatus variable for later update to the SharePoint list
                    $ActionStatus = "Succeeded"
    
                    # Note success in the Results text
                    $ResultsText = "Your request for access to " + $ListItem["Data Source"] + " was completed successfully."
                    }
                catch{
                    # If Add-ADGroupMember fails, so note in the log variable
                    $LogText += "Error: could not add " + $ListItem["User alias"] + " to " + $DataSourceADGroup + ": " + $_ + "`n`r"
            
                    # Note failure in the $ActionStatus variable for later update to the SharePoint list
                    $ActionStatus = "Failed"
    
                    # Note in the Results text that there was an error
                    $ResultsText = "There was an error in processing your request for access to " + $ListItem["Data Source"] + ". Please contact your administrator"
                    }
                }
    
            # If a non-sales user is requesting database access, then access is denied
            else
                {
    
                # Note in the log that user was denied access to the database because they're not in Sales
                $LogText += "Error: could not add " + $ListItem["User alias"] + " to AdventureWorksDBUsers: User is not in the Sales department `n`r"
                
                # Uptdate the Results text for the list item and email
                $ResultsText = "Access denied. Access to " + $ListItem["Data Source"] + " is not available to users in " + $department + "."
                
                # Note failure in the $ActionStatus variable for later update to the SharePoint list
                $ActionStatus = "Failed"
                }
        }
    
        # Get the current date and time
        $ActionTime = Get-Date
    
        # Append the date, time, and final status to the log variable
        $LogText += $ActionStatus + " " + $ActionTime
        
        # Update the list item with the final status and the log text
        $ListItem["Request results"] = $ResultsText
        $ListItem["Status"] = $ActionStatus
        $ListItem["Log"] = $LogText
        $ListItem.Update()
    
        # Send mail to the user for whom access was requested
        $EmailMessage = new-object System.Net.Mail.MailMessage
     
        $EmailMessage.From = "DatabaseRequests@contoso.local"
        $EmailMessage.ReplyTo = "DatabaseRequests@contoso.local"
        $EmailMessage.To.Add($SharePointUserEmail)
        $EmailMessage.subject = "Access request for " + $ListItem["Data Source"]
        $EmailMessage.body = "Your reqest for data access had been processed: `n`r"
        $EmailMessage.body += $ResultsText
     
        $MailServer.Send($EmailMessage)
        
        }
    }
    
    # Clean up the mail server object
    $MailServer.Dispose()
    
    
  3. 按一下 [檔案],按一下 [儲存],將檔案儲存到本機磁碟上的某個位置。

重要事項 重要事項:
在測試環境中,您可以將 Windows PowerShell 指令碼儲存到方便的位置。在實際執行環境中,請網域管理員建立一個需要有網域管理員權限才能存取的資料夾,然後將指令碼儲存到該處。如此可提高安全性,有助於防止指令碼遭到未經授權的變更。

根據您的環境,您可能需要更新下列指令碼項目:

  • SharePoint 清單所在網站的 URL 是設為 http://contoso-appsrv1/sites/BICenter。請將此值更新為您環境適用的 URL。這是儲存在 $ListName 變數中。

  • $SharePointUser = $SharePointUser.Replace("contoso\","") 這行,必須將 contoso 換成您的網域。

  • Data Source$DataSourceADGroup 值是針對本文所討論的 AdventureWorks 選項而設定。如果您使用自己的資料來源,必須更新這些值來符合您的資料來源。

  • $MailServer值必須更新您的郵件伺服器的名稱。

  • 如果您為任何 SharePoint 清單欄位所取的名稱不同於清單建立程序中所指定的名稱,則必須更新指令碼來使用您所選擇的值。請利用清單建立程序中列出的值,在指令碼中找出對應的值。

將指令碼儲存到本機磁碟之後,下一步是設定網域 Proxy 帳戶作為指令碼管理員。

為了順利執行 Windows PowerShell 指令碼,網域 Proxy 帳戶需要有以 Windows PowerShell 更新 SharePoint 清單的權限。若要達成此目標,請使用 Add-SPShellAdmin Windows PowerShell Cmdlet 將命令介面管理員權限授與此帳戶。

請使用下列程序,設定網域 Proxy 帳戶作為命令介面管理員。

注意事項 附註:
如果您先前已在這一系列的其他案例中,設定網域 Proxy 帳戶作為命令介面管理員,則不需要重做此程序。
設定指令碼管理員
  1. 以伺服器陣列管理員身分登入 SharePoint Server 應用程式伺服器。

  2. 依序按一下 [開始]、[所有程式]、[Microsoft SharePoint 2013 產品],以滑鼠右鍵按一下 [SharePoint 2013 管理命令介面],然後按一下 [以系統管理員身分執行]。

  3. 在 Windows PowerShell 命令視窗中,輸入下列語法:

    Get-SPContentDatabase | Add-SPShellAdmin -UserName domain\username
    

    例如:

    Get-SPContentDatabase | Add-SPShellAdmin -UserName Contoso\ADProxyAccount
    
  4. 按 Enter 鍵。

網域 Proxy 帳戶被新增為命令介面管理員之後,就可用在排定的工作中來執行 Windows PowerShell 指令碼。

我們可以利用排定的工作來定期執行 Windows PowerShell 指令碼,以自動將要求資料存取權的使用者新增至適當的 Active Directory 群組。

請使用下列程序建立排定的工作。

建立排定的工作
  1. 以本機系統管理員身分登入 SharePoint Server 應用程式伺服器。

  2. 按一下 [開始],按一下 [系統管理工具],然後按一下 [工作排程器]。

  3. 在 [動作] 窗格中,按一下 [建立工作]。

  4. 在 [一般] 索引標籤上:

    1. 在 [名稱] 文字方塊中,輸入工作的名稱。

    2. 選擇 [不論使用者登入與否均執行] 選項。

    3. 選取 [以最高權限執行] 核取方塊。

  5. 在 [觸發程序] 索引標籤上:

    1. 按一下 [新增]。

    2. 選取 [重複工作每隔] 核取方塊,然後從下拉式清單中選擇 [10 分鐘]。

    3. 從 [持續時間為] 下拉式清單中,選擇 [不限制]。

    4. 按一下 [確定]。

  6. 在 [動作] 索引標籤上:

    1. 按一下 [新增]。

    2. 在 [程式/指令碼] 文字方塊中,輸入 PowerShell.exe

    3. 在 [新增引數 (選擇性) ] 文字方塊中輸入的路徑和檔名的Windows PowerShell指令碼 (例如 C:\Scripts\DepartmentDataAccess.PS1))

    4. 按一下 [確定]。

  7. 按一下 [確定]。

  8. 輸入要用來執行指令碼的帳戶的使用者名稱和密碼。這是您已設定作為 Windows PowerShell 指令碼管理員的 Active Directory 網域管理員帳戶。

建立排定的工作之後,此案例的設定步驟就算完成。下一步是新增項目至 SharePoint 清單來測試功能。

在本節,我們將新增一些項目至 SharePoint 清單,以測試指令碼和排定的工作之運作。

這段影片顯示測試此案例的一些範例。(時間: 10:20。)

影片:測試並確認運作

視訊 (播放按鈕) 圖示

請試試下列動作,確認指令碼和排定的工作正常運作:

  • 將項目新增至清單。檢查查看工作時接下來排定要執行的工作排程器中的工作。等到有執行工作,然後再檢查 SharePoint 清單,以確定已更新的狀態記錄的欄位。檢查適當的 Active Directory 群組以確認已新增指定的使用者。

  • 將項目新增至清單中的每個資料來源您對具有 (AdventureWorks 資料庫、 資料倉儲、 OLAP cube 在我們的範例)。在 [工作排程器任務,以滑鼠右鍵按一下和 [執行(若要避免擁有等候下一個排定的時間)。檢查 [SharePoint 清單] 與 [Active Directory 群組以確保您要取得預期的結果:

    • 銷售部門成員的使用者可以順利完成其要求。

    • 應該拒絕存取的資料庫,但透過 AdventureWorksOLAPUsers 群組 cube 的存取權授與使用者不是 「 業務 」 部門的成員。

  • 建立兩個相同的清單項目 (兩個相同的使用者與資料來源的要求數目)。執行排定的工作。這應該會產生第二個要求中的錯誤自使用者已新增到適當的 Active Directory 群組中的第一個要求。記下的第二個項目日誌項目會指定這項錯誤Add-ADGroupMember指令程式所傳回。

  • 請已獲得資料存取權的使用者嘗試從 Excel 中存取資料來源。

您可以確認使用者擁有 「 業務 」 部門的成員在Excel使用例如利潤邊界的財務資料建立報表和然後讓使用者從外部銷售部門嘗試建立相同的報表有不同的層級的 OLAP cube 的存取權。

使用下列程序可建立Excel報告使用 AdventureWorks OLAP cube。使用屬於 「 業務 」 部門的使用者帳戶。

若要建立 Excel 報表
  1. Excel,在 [資料] 索引標籤上的 [從其他來源] 和 [從 Analysis Services

  2. 在 [伺服器名稱] 方塊中,輸入執行Analysis Services、 之伺服器的名稱,然後按 [下一步

  3. 在 [選取資料庫及表格] 頁面上,選取 [ AdventureWorks,並再按 [下一步

  4. 選擇連線檔案名稱] 和 [完成時間

  5. 匯入資料] 對話方塊中,選擇 [樞紐分析表] 選項,然後再按一下 [確定]

  6. 在 [樞紐分析表欄位] 清單中,選取下列核取方塊:

    • 銷售領域

    • 銷售金額

    • 毛利

屬於 「 業務 」 部門的使用者應可看到所有欄位。不是 「 業務 」 部門成員的使用者不應該能夠看到毛利] 欄位。

https://technet.microsoft.com/zh-tw/library/jj573016.aspx
顯示: