Установите SPN, используя powershell для запуска команд CMD
Я пытаюсь создать сценарий, который запускает команду cmd для установки имени участника-службы: что-то для каждого элемента в моем списке запускает 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: (Неизвестный параметр... проверьте ваше использование.:String) [], RemoteException + FullyQualifiedErrorId: NativeCommandError
поэтому он хотел бы это для каждого имени в списке: (проверьте, не добавлено ли это в объявлении) (этот SPN) setspn -s serverSQL1 / pop1.company.com: 2500
(под этой учетной записью службы) Домен \ Сервис100
и продолжай, пока не сделаешь.
2 ответа
Я думаю, что единственная проблема с вашим синтаксисом заключается в том, что вам нужно отбросить :
из вашего выражения вызова, как это не требуется в спецификации командлета. Затем вы можете ввести свое имя из списка, заменив "некоторое имя SPN" на $($PN)
,
однако вы можете очистить свой цикл, если полностью отбросите выражение invoke и используете оператор вызова &
вместо. В этом случае вы бы заменили всю внутреннюю часть цикла foreach на& cmd.exe /C setspn –S $PN\corp.com:1000 corporatedomain\ServiceAccount1
У меня примерно 90%, что должно сработать, но у меня нет тестовой среды, где я мог бы обойтись с доступными SPN прямо сейчас, поэтому я не могу подтвердить, если у вас возникнут какие-либо ошибки, пожалуйста, дайте мне знать, и я постараюсь и помочь вам разобраться.
Спасибо за стартер; это указало мне правильное направление. В конце концов, это то, что сработало для меня:
$List = Get-Content C:\scripts\servernames.csv
foreach($PN in $List)
{
$SB1= "MSSQLSvc/" + $PN + ".domain.local"
$SB2= "MSSQLSvc/" + $PN + ".domain.local:1433"
setspn -s $SB1 domain\service-account
setspn -s $SB2 domain\service-account
}