2014-02-21 154 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