自从公司的域控升级到2008 R2以后,平时AD的工作就基本以PowerShell为主.这样可以迫使自己尽早掌握相关的cmdlets,自我感觉常见的工作都可以由PowerShell完成.


Setspn命令这几年一直没用,就没考虑对应的PowerShell命令.前一段时间刚好一个客户安装了一个SAP应用,需要设置一个机器帐户的SPN,没多想,用setspn -A就干完了。后来一直在想,PowerShell应该有相应的命令,简单地搜了一下:Get-Command *-ad*spn*也没有结果。


后来仔细一想,SPN是(计算机和用户)帐户的属性,应该由Set-ADuser后Set-ADcomputer来设置,查看帮助,没有参数来直接设置SPN。同传统的dsmod相比,这两个Set-AD*命令还可以设置非参数控制的属性,相应的帮助如下:
The Set-ADComputer cmdlet modifies the properties of an Active Directory computer object. You can modify commonly used property values by using the cmdlet parameters. Property values that are not associated with cmdlet parameters can be modified by using the Add, Replace, Clear and Remove parameters.


 所以,setspn -A可以由Set-Adcomputer <ADcomputer> -Add @{servicePrincipalName="XXX"}或者Set-Aduser <ADuser> -Add @{servicePrincipalName="XXX"}来代替;
setspn -D可以由Set-Adcomputer <ADcomputer> -Remove @{servicePrincipalName="XXX"}或者Set-ADuser <ADuser> -Remove @{servicePrincipalName="XXX"}来代替;


简单地说,PowerShell的-Add替代了-A,-Reomve替代了-D。同时,PowerShell不只简单地替代,还有两个更强大的参数setspn所没有:
-Clear servicePrincipalName会清除所有的SPN;
-Replace @{servicePrincipalName="SPN1","SPN2"}来实现SPN的替换。


本博文写到这里就要止笔了,最后提醒AD模块的PowerShell用户,AD对象常用属性可以通过参数修改,不常见的参数Add, Replace或Remove+哈希表,以及clear+属性名进行编辑。