SetSPN使用powershell运行CMD命令

时间:2016-09-07 15:29:03

标签: powershell command-line cmd cmdlets spn

我正在尝试创建一个运行某些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

继续前进,直到完成。

1 个答案:

答案 0 :(得分:0)

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

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

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