我正在尝试创建一个运行某些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 :(未知参数... eck your usage.:String)[],RemoteException + FullyQualifiedErrorId:NativeCommandError
所以它会这样 对于列表中的每个名称: (检查是否在广告中添加此内容)(此SPN) setspn -s serverSQL1 / pop1.company.com:2500
(在此服务帐户下) Domain \ Service100
继续前进,直到完成。
答案 0 :(得分:0)
我认为您的语法唯一的问题是您需要从调用表达式中删除:
,因为cmdlet规范中没有调用它。然后,您可以通过将“某个SPN名称”替换为$($PN)
来从列表中输入您的名字。
但是,如果完全删除invoke-expression并使用调用运算符&
,则可以清理循环。在这种情况下,您将使用
替换foreach循环的整个内部
& cmd.exe /C setspn –S $PN\corp.com:1000 corporatedomain\ServiceAccount1
我大约有90%应该可以使用,但是我没有测试环境,我现在可以使用SPN可用,所以我无法确认,如果您遇到任何错误,请告诉我,我会尽力帮你解决。