1

我正在尝试制作一个脚本来运行一些 cmd 命令来设置 SPN:对于我的列表中的每个项目运行 setspn -s(spn 的名称)域\服务帐户,但我很难运行命令行为以及我需要能够更改(我通过列表时的 SPN 名称)

$List = Get-Content C:\Users\MyComputer\Desktop\Lists.txt
foreach($PN in $List){
$Semper_fi = @' 
cmd.exe /C setspn –S "some SPN name\corp.com:1000" corporatedomain\ServiceAccount1                                                                            
'@
Invoke-Expression -Command:$Semper_fi
}

-S 假设在 AD 中查找,如果名称不存在,则添加或以其他方式移动到下一项,依此类推。但它给了我一个错误:+ CategoryInfo : NotSpecified: (Unknown paramet...eck your usage.:String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError

所以它希望列表中的每个名称都是这样的:(检查是否不在广告中添加这个)(这个 SPN)setspn -s serverSQL1/pop1.company.com:2500

(在此服务帐户下) Domain\Service100

并继续进行直到完成。

4

1 回答 1

0

我认为你的语法的唯一问题是你需要:从你的调用表达式中删除它,因为它在 cmdlet 规范中没有被调用。然后,您可以通过将“某些 SPN 名称”替换为$($PN).

但是,如果您完全放弃调用表达式并使用调用运算符,则可以清理循环&。在这种情况下,您可以将 foreach 循环的整个内部替换为
& cmd.exe /C setspn –S $PN\corp.com:1000 corporatedomain\ServiceAccount1

我大约 90% 应该可以工作,但我没有测试环境,我现在可以使用 SPN,所以我无法确认,如果您遇到任何错误,请告诉我,我会尝试并帮助您解决问题。

于 2016-09-07T17:38:33.263 回答