SetSPN с использованием powershell для запуска команд CMD

Я пытаюсь создать сценарий, который запускает некоторую команду cmd для установки 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: (Неизвестный параметр... проверьте ваше использование.: Строка) [], RemoteException + FullyQualifiedErrorId: NativeCommandError

поэтому для каждого имени в списке требуется следующее: (проверьте, не добавлено ли это в объявление) (это имя участника-службы) setspn -s serverSQL1/pop1.company.com:2500

(под этой учетной записью службы) Домен\Service100

и продолжайте до тех пор, пока не закончите.


person AlwaysWrong    schedule 07.09.2016    source источник
comment
фактическая команда, которую я могу запустить в cmd: setspn –A MySQL/PM1.corp.com:2643 domain\serviceacccount. -A - это переключатель, который может быть включен как -S и -D, так и s. мне нужно иметь возможность запускать эту команду с помощью powershell.   -  person AlwaysWrong    schedule 07.09.2016
comment
Зачем использовать cmd.exe? Просто запустите setspn.exe. В этой статье есть утилита под названием showargs.exe, которая позволит вам увидеть конструкции командной строки PowerShell и несколько советов, которые помогут вам правильно создать командную строку setspn.exe в PowerShell.   -  person Bill_Stewart    schedule 08.09.2016


Ответы (1)


Я думаю, что единственная проблема с вашим синтаксисом заключается в том, что вам нужно удалить : из вашего выражения вызова, поскольку это не требуется в спецификации командлета. Затем вы можете ввести свое имя из списка, заменив «какое-то имя участника-службы» на $($PN).

однако вы можете очистить свой цикл, если полностью откажетесь от вызова-выражения и вместо этого используете оператор вызова &. В этом случае вы должны заменить всю внутреннюю часть цикла foreach на
& cmd.exe /C setspn –S $PN\corp.com:1000 corporatedomain\ServiceAccount1

Я примерно на 90% должен работать, но у меня нет тестовой среды, где я мог бы возиться с доступными SPN прямо сейчас, поэтому я не могу подтвердить, если вы получите какую-либо ошибку, пожалуйста, дайте мне знать, и я попробую и помогите разобраться.

person Mike Garuccio    schedule 07.09.2016
comment
это не работает. снова дает ту же ошибку, поэтому мой код выглядит так: $List = Get-Content C:\Users\mypc\Desktop\Lists.txt foreach($PN in $List){ & cmd.exe /C setspn –D MSSQ/ PM1.US.world.com:2643 na\s01234 } - person AlwaysWrong; 07.09.2016