2016-09-07 10 views
1

Я пытаюсь создать скрипт, который запускает некоторую команду cmd для установки SPN: что-то для каждого элемента в моем списке запустит setpn -s (имя spn) domain \ service account но у меня трудное время запуска командной строки, а также я должен быть в состоянии изменить (имя SPN, как я иду, хотя в списке)SetSPN с помощью powershell для запуска команд CMD

$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 и если имя Безразлично 't exist добавляет или иным образом переходит к следующему элементу и так далее. , но он дает мне ошибку: + CategoryInfo: NotSpecified: (Неизвестно PARAMET ... Эк ваш usage.:String) [], RemoteException + FullyQualifiedErrorId: NativeCommandError

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

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

и продолжайте идти до конца.

+0

Фактическая команда, которую я могу запустить в cmd: setpn -A "MySQL/PM1.corp.com: 2643" domain \ serviceacccount. -A - это переключатель, который может быть -S и -D и s включен. Мне нужно запустить эту команду с помощью powershell. – AlwaysWrong

+0

Зачем использовать cmd.exe? Просто запустите setspn.exe. [В этой статье] (http://windowsitpro.com/powershell/running-executables-powershell) есть утилита под названием «showargs.exe», которая позволит вам увидеть конструкцию PowerShell в командной строке и некоторые советы, которые помогут вам создать setpn .exe правильно в PowerShell. –

ответ

0

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

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

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

+0

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