如何使用Powershell在远程共享上设置共享权限?

时间:2014-09-04 11:10:41

标签: powershell windows-server windows-server-2012-r2 powershell-v4.0

我需要从Powershell 4脚本设置远程共享的共享权限。我查看了this page,特别是命令Grant-SmbShareAccess,但该cmdlet设置了本地共享的权限,我很乐意看到-ComputerName参数,但是,唉,没有一个

我想做点什么:Grant-SmbShareAccess -ComputerName MYREMOTESERVER -Name <share_name> -AccountName <domain_account> -AccessRight Full

关于如何做到这一点的任何想法?我的远程服务器可以是Windows Server或NetApp vFiler。

修改

我在针对NetApp vFiler的评论中尝试了Matt对Invoke-Command的建议并得到了此错误:

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资源管理器中更改共享的安全性可以正常工作。

3 个答案:

答案 0 :(得分:0)

Grant-SmbShareAccess是一个CDXML命令,这意味着它使用CIM。正如您已经注意到的那样,它应该仅适用于至少运行PSv3的Windows系统(在这种情况下,WMI类仅在Windows 8和Server 2012或更高版本上使用)。

对于非Windows服务器可能还有其他方法可以执行此操作,但我会尝试PowerShell Access Control Module

$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服务器进行了测试,而且我不经常处理共享权限。尝试一下,如果它有效,我将把这一部分从答案中解脱出来。

答案 1 :(得分:0)

对于Windows Server SMB共享,​​请使用-CimSession参数。

对于非Windows SMB共享,​​我不希望Windows SMB管理cmdlet与它们一起使用。

答案 2 :(得分:0)

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