2014-02-21 60 views
2

如何讓SetSPN使用DC的特定DC或IP地址? 要從實驗室DC中的實驗室帳戶的服務主體名稱設置爲不是實驗室域的一部分的跳轉框。PowerShell替換SetSPN

通過添加「-Server」參數完成大多數Powershell AD cmdlet。

SetSPN似乎不可能。

回答

4

知識分享:

我花了一天的很大一部分想辦法得到的SetSPN我試圖從跳轉開箱即用的克隆碰上了網絡隔離的實驗室環境中,當工作的特區。

其餘代碼中的所有AD /網絡調用都可以指定要與哪個服務器通話(powershell廣告調用通常允許「-Server 192.168.2.1」在實驗室中指定DC)。

但不是SetSPN。對於那些與SetSPN有類似問題的人來說,或者只是想單獨使用powershell,下面是使用Powershell的ActiveDirectory模塊添加SPN的簡單方法。

Function Add-SPN([string]$SamAccountName,[string]$SPNString, [string]$ADServerName){ 
    Try{ 
    $filter = "(SamAccountName -eq '$SamAccountName')"; 
    $user=get-aduser -Filter $Filter -prop ServicePrincipalNames -Server $ADServerName; 
    $Ready=$True; 
    if($User.ServicePrincipalNames.Count -gt 0){ 
     if($User.ServicePrincipalNames.ToUpper().Contains($SPNString.ToUpper())){"Failed. A Matching SPNString Already Exists! ($SPNString) -> ($SamAccountName)";$Ready=$false;} 
    } 
    if($ready){ 
     $user|Set-ADUser -ServicePrincipalNames @{Add=$SPNString} -Server $ADServerName; 
     if((get-aduser -Filter $Filter -prop ServicePrincipalNames -Server $ADServerName).ServicePrincipalNames.ToUpper().Contains($SPNString.ToUpper())){ 
      "Successfully Added SPN ($spnstring) -> ($SamAccountName)." 
     }else{ throw "Something went wrong, SPNString not found after Set-ADUser succeeded."} 
    } 
    }catch{throw "Add-SPN: SamAccountName($($SamAccountName)) SPNString($($SPNString))An Error Occurred. $_"} 
} 

Add-SPN -SamAccountName "SVC_Test_SQL" -SPNString "http/$($WebServer.DNSName)" -ADServerName (get-addomain -Identity $ServerDomain).pdcEmulator 
Add-SPN -SamAccountName "SVC_Test_SQL" -SPNString "http/$($WebServer.name)" -ADServerName (get-addomain -Identity $ServerDomain).pdcEmulator 

實際設定值時,SET-ADUser便有函數的部分(從:進口模塊ActiveDircetory),可以很容易地修改,以刪除,替換或明確SPN對上述新的功能或膨脹。

From: http://technet.microsoft.com/en-us/library/ee617215.aspx 
To add values: 
    -ServicePrincipalNames @{Add=value1,value2,...} 
To remove values: 
    -ServicePrincipalNames @{Remove=value3,value4,...} 
To replace values: 
    -ServicePrincipalNames @{Replace=value1,value2,...} 
To clear all values: 
    -ServicePrincipalNames $null