Powershell 替代 SetSPN

标签 powershell active-directory powershell-3.0

如何让 SetSPN 使用特定的 DC 或 DC 的 IP 地址? 从不属于实验室域的 Jump-Box 为实验室 DC 内的实验室帐户设置服务主体名称。

通过添加“-Server”参数实现了大多数 Powershell AD cmdlet。

SetSPN 似乎不可能。

最佳答案

知识分享:

在尝试从 Jump-box 运行到具有 DC 克隆的网络隔离实验室环境时,我花了最后一天的大部分时间试图找到让 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(来自:import-module 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

关于Powershell 替代 SetSPN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21941047/

相关文章:

azure - 自动向 Visual Studio Online 中的用户授予权限

c# - 使用应用程序池标识会导致异常和事件日志

powershell-3.0 - 到远程服务器的 Enter-PSSession 失败并显示 "cannot find the computer"

powershell - 在 Windows PowerShell 中检查文件是否存在?

powershell - Powershell-创建计划任务以作为本地系统/服务运行

winforms - 将RTF加载到Winforms Richtextbox “in stages”

php - 通过仅具有登录凭据的 LDAP 和 PHP 获取用户可读的名称

使用严格模式最新找不到 Powershell 对象

unit-testing - 使用 Pester 测试 PowerShell 脚本时如何模拟输出文件?

powershell - 通过 PowerShell 获取 Sharepoint Online 任务列表中的更改