Как установить права доступа к удаленному ресурсу с помощью Powershell?

Мне нужно установить права доступа к удаленному общему ресурсу из сценария Powershell 4. Я просмотрел эта страница, в частности команда Grant-SmbShareAccess, но этот командлет устанавливает разрешения на локальные общие ресурсы, я бы хотел увидеть параметр -ComputerName, но, увы, его нет.

Я хочу сделать что-то вроде: Grant-SmbShareAccess -ComputerName MYREMOTESERVER -Name <share_name> -AccountName <domain_account> -AccessRight Full

Есть идеи, как это сделать? Мой удаленный сервер может быть Windows Server или NetApp vFiler.

ИЗМЕНИТЬ

Я попробовал предложение Мэтта Invoke-Command в комментариях против NetApp vFiler и получил эту ошибку:

Connecting to remote server MYREMOTESERVER failed with the following error message : The client cannot connect to the destination specified in the request. Verify that the service on the destination is running and is accepting requests. Consult the logs and documentation for the WS-Management service running on the destination, most commonly IIS or WinRM. If the destination is the WinRM service, run the following command on the destination to analyze and configure the WinRM service: "winrm quickconfig".

Изменение безопасности общего ресурса в проводнике Windows работает нормально.


person Mark Allison    schedule 04.09.2014    source источник
comment
Возможно, Invoke-Command это то, что вы ищете. Подробнее здесь   -  person Matt    schedule 04.09.2014
comment
@Matt Если бы я имел дело только с удаленными серверами Windows, я бы посмотрел на это, но если удаленный общий ресурс размещен на NetApp vFiler, я не думаю, что это сработает, потому что это зависит от удаленного взаимодействия.   -  person Mark Allison    schedule 04.09.2014
comment
Вы пытались просто передать имя сервера вместе с именем общего ресурса? Что-то вроде: Grant-SmbShareAccess -Name \\MYREMOTESERVER\SHARENAME -AccountName USERACCOUNT -AccessRight Full   -  person CitizenRon    schedule 05.09.2014
comment
@CitizenRon Спасибо за предложение, но оно тоже не работает, потому что команда ищет локальный общий ресурс. Я все равно попробовал: Grant-SmbShareAccess : No MSFT_SMBShare objects found with property 'Name' equal to '\\MYREMOTESERVER\SHARENAME'. Verify the value of the property and retry.   -  person Mark Allison    schedule 05.09.2014


Ответы (3)


Grant-SmbShareAccess — это команда CDXML, что означает, что он использует CIM. Как вы уже заметили, он должен работать только в системе Windows, работающей как минимум с PSv3 (в этом случае используемый класс WMI существует только в Windows 8 и Server 2012 или выше).

Могут быть и другие способы сделать это на сервере, отличном от Windows, но я бы попробовал PowerShell Модуль контроля доступа:

$SharePath = "\\ServerName\ShareName"
$Principal = <account name here>

# Add permission to $Principal (-Force will suppress the prompt)
Get-SecurityDescriptor -Path $SharePath -ObjectType LMShare |
    Add-AccessControlEntry -Principal $Principal -LogicalShareRights FullControl -Apply #-Force

# Verify:
Get-SecurityDescriptor -Path $SharePath -ObjectType LMShare |
    Get-AccessControlEntry

Честно говоря, я не знаю, сработает ли это, поскольку я тестировал его только на серверах Windows и не очень часто имею дело с разрешениями на общий доступ. Попробуйте, и если это сработает, я уберу эту часть из ответа.

person Rohn Edwards    schedule 06.09.2014
comment
Спасибо, а есть ли способ без использования этого модуля? Я пытаюсь сделать это, используя набор инструментов по умолчанию на Windows Server. - person Mark Allison; 09.09.2014
comment
Возможно, но я не знаю ни одного. Модуль работает? Если это так, я могу изменить ответ, включив в него гораздо более короткий сценарий PowerShell, который включает только подписи P/Invoke и код PS/.NET, необходимые для его работы (модуль не требуется). - person Rohn Edwards; 09.09.2014

Для общих ресурсов Windows Server SMB используйте параметр -CimSession.

Для общих ресурсов, отличных от Windows SMB, я не ожидаю, что командлеты администрирования Windows SMB будут работать с ними.

person Dan    schedule 11.12.2014

В этом поможет инструментарий Netapp Powershell. После установки вы можете импортировать модуль в свой скрипт и управлять своими общими ресурсами. Вот грубый пример, который подключается к файлеру, запрашивает имя общего ресурса, а затем настраивает этот общий ресурс с некоторыми разрешениями по умолчанию:

# Import the Netapp Powershell Module
import-module dataontap

# Connect to the filer
connect-nacontroller *filername*

# Get the sharename
$sharename = Read-Host -Prompt 'Enter the share you want to configure'

# Configure the CIFS Permissions
Set-NaCifsShareAcl $sharename "Authenticated users" -AccessRights "Change"
Set-NaCifsShareAcl $sharename filername\administrators -AccessRights "Full Control"
Set-NaCifsShareAcl $sharename domain\somegroup -AccessRights "Full Control"
Remove-NaCifsShareAcl $sharename everyone
person markey164    schedule 19.02.2016