0

Во-первых, Я очень новичок в powershell. Каждый раз я думаю, что я получаю логики я идти WTF .. Если бы это был удар, что будет так легко и т.д ..Пытаясь создать скрипт, который получит мой отфильтрованный список Get-Adcomputer, затем запустите команду для каждого

, что я пытаюсь сделать точно ...

Получить все компьютеры из AD, что Встречайте Xiopwb* критериев. После того, как у меня есть список мне нужно изменить разрешения на \\Xiopwb20\Nsiwebroot каталог, чтобы включать только администраторы домена и А группа безопасности «Webadmins»

Моя логика:

Получить все компьютеры из AD, которые соответствуют Xio*PWB* Возьмите только НАЗВАНИЕ объектов в этом списке навсегда «имя» в этом списке do Get-ACL \\Name from list\Nsiwebroot удалить * добавить пользователя/группу.

Что у меня есть:

PS C:\Windows\system32> Get-ADComputer -filter * | Where-Object {$_.Name -like "xiopwb*"} | Select Name | ForEach-Object { Get-Acl \\$_.Name\nsiwebroot} 

все до «ForEach» работает ... Я получаю только имена ПК, которые мне нужны и т.д ..

Простой, как это возможно, я не» t нужен 100-строчный скрипт.

Благодаря

** Обновление **

это двойной \ его просто не показывая его ... не знаю, почему

Похоже, он делает то, что я хочу в такой степени. Однако его выплевывает формат фанки. @{Name=XIOPWB09}

PS C:\Windows\system32> Get-ADComputer -filter * | Where-Object {$_.Name -like "xiopwb*"} | Select Name | ForEach-Object {get-acl "\\$_\D$\nsiwebroot"} 

Get-Acl: Не удается найти путь '\ @ {Name = XIOPWB09} \ D $ \ nsiwebroot', потому что он не существует. В строке: 1 char: 99 + ... opwb * "} | Выберите имя | ForEach-Object {get-acl" \ $ _ \ D $ \ nsiwebroot "} + ~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~ + CategoryInfo: ObjectNotFound: (:) [Get-Acl], ItemNotFoundException + FullyQualifiedErrorId: GetAcl_PathNotFound_Exception, Microsoft.PowerShell.Commands.GetAclCommand

get-acl: Не удается найти путь '\ @ {Name = XIOPWB06} \ D $ \ nsiwebroot', потому что его не существует. В строке: 1 char: 99 + ... opwb * "} | Выберите имя | ForEach-Object {get-acl "\ $ _ \ D $ \ nsiwebroot"} + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: ObjectNotFound: (:) [Get-Acl], ItemNotFoundException + FullyQualifiedErrorId: GetAcl_PathNotFound_Exception, Microsoft.PowerShell.Commands.GetAclCommand

+0

Что такое '\ Xiopwb20 \ Nsiwebroot'? Это не правильный путь.Предполагается, что это '\\ Xiopwb20 \ Nsiwebroot', и вы хотите изменить разрешения * share *? Или это должно быть '\\ Xiopwb20 \ c $ \ Nsiwebroot \', чтобы получить что-то на удаленном диске через общий ресурс admin? Или это что-то вроде 'c: \ xiopwb20 \ nsiwebroot' пути на локальном диске, названном именем компьютера? – TessellatingHeckler

+1

1) Было бы совсем не легко получить компьютеры AD и изменить ACL Windows в bash. 2) Ваш 'where-object' сломан, потому что' $ .Name' не вещь, она должна быть '$ _. Name'. И вы можете сделать эту фильтрацию в 'Get-ADComputer -filter 'Name -like' xiopwb * '" 'part. 3) Ваш '| выберите «Имя |», фактически ничего не делает. 4) Ваше 'get-acl \ $. Name' сломано по той же причине, что вам нужно' $ _. Name', и вам, возможно, потребуются двойные кавычки по пути. – TessellatingHeckler

+1

вам понадобится двойная кавычка вокруг пути, а затем нужно будет изменить $ _. Name на $ ($ _. Name) так, чтобы оно обработалось правильно. Это также приведет вас к тому, что у вас есть объект ACL, который вам нужно будет манипулировать и применять с помощью Set-ACL, что не совсем легко сделать в рамках одного конвейера. –

ответ

1

"Select Name" возвращает объект с заглавной таблицы Имя. «Select -ExpandProperty Name» - это то, что нужно здесь, которое преобразует его в String.

С уважением,

kvprasoon