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

使用 Windows PowerShell 自助資料存取

SharePoint 2013
 

適用版本:SharePoint Server 2013 Enterprise

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

摘要:會自動授與使用者資料庫的存取使用 Windows PowerShell、 SharePoint 清單及工作排程器。

本案例說明如何使用以排定的工作形式執行的Windows PowerShell指令碼來自動處理使用者要求存取資料來源。

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

本文內容:

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

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

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

本文說明如何:

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

  2. 建立Windows PowerShell指令碼、 排定的工作,以執行掃描 SharePoint] 清單中,並將使用者加入至適當的 Active Directory 群組來提供這些要求的資料存取權限。

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

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

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

  • 在執行本文中的程序期間,您需要建立 Active Directory 帳戶和群組。其中一個帳戶需要新增至 Domain Admins 群組。建議使用可讓您直接存取網域控制站的測試環境。或者,您也可以請網域管理員設定所需的帳戶和群組。

注意事項 附註:
如果您已按照本系列中的相關文章中的步驟,部分的使用者和系統要求您建立的群組可能已經存在環境中。若情況是,您可以使用現有的使用者和群組。就不需要重新建立現有的使用者或群組。

在本節,我們將會:

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

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

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

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

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

影片:初始設定

視訊 (播放按鈕) 圖示

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

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

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

  • AdventureWorks OLAP cube  我們將建立 adventureworksolapusers 的群組

請使用下列程序建立 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 設定步驟之後,下一步是將適當的資料庫存取權授與新的 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 角色,以存取任何 Analysis Services Cube。以 AdventureWorks 而言,Cube 需要 AdventureWorksOLAPUsers Active Directory 群組的角色。

請使用下列程序建立 Analysis Services 角色。針對 AdventureWorks OLAP Cube 或您自己的 Analysis Services 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. 按一下 [確定]。

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 模組,在要執行指令碼的伺服器上,必須已設定「遠端伺服器管理工具」。「遠端伺服器管理工具」是項可透過「伺服器管理員」來新增的功能。

這段影片顯示步驟設定Windows PowerShell指令碼所讀取之 SharePoint 清單並套用所要求的權限和設定執行Windows PowerShell指令碼排定的工作。(時間: 10:35。)

影片:自動化和指令碼

視訊 (播放按鈕) 圖示

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

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

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

  3. 每個項目狀態的指令碼會新增至 Active Directory 群組與資料來源欄位中指定的資料來源相關聯的使用者別名] 欄位中指定的使用者。

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

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

請使用下列程序建立 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
     }
    
    # 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["Self-service 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 = ""
        $ActionStatus = ""
        $ActionTime = ""
        $DataSourceADGroup = ""
    
    
        # Add-ADGroupMember requires alias with no domain, so remove the domain\ if it exists
        $SharePointUser = $ListItem["User alias"]
        $SharePointUser = $SharePointUser.ToLower()
    
        # Replace contoso in the line below with the name of your domain
        $SharePointUser = $SharePointUser.Replace("contoso\","")
       
        # 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 = "AdventureWorksOLAPUsers"}
    
        # Add user request and data source information to the log variable
        $LogText += "User " + $ListItem["User alias"] + " requesting access to " + $DataSourceADGroup + "`n`r"
    
        # 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"
            }
        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"
            }
        
        # 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["Status"] = $ActionStatus
        $ListItem["Log"] = $LogText
        $ListItem.Update()
        }
    }
    
    
  3. 按一下 [檔案],按一下 [儲存],將檔案儲存到本機磁碟上的某個位置。

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

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

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

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

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

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

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

才能順利執行Windows PowerShell指令碼、 網域 proxy 帳戶需要權限可讓更新至 SharePoint 清單使用Windows PowerShell。這被藉由使用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\SelfServiceDataAccess.PS1))

    4. 按一下 [確定]。

  7. 按一下 [確定]。

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

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

在本節,我們會新增一些項目至 SharePoint 清單來測試功能的指令碼和排定的工作。

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

影片:測試並確認運作

視訊 (播放按鈕) 圖示

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

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

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

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

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

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