【问题标题】:Changing share permissions using Powershell使用 Powershell 更改共享权限
【发布时间】:2016-02-10 11:06:47
【问题描述】:

我正在尝试在运行 2008 R2 或 2012 的一堆 Windows 服务器上修改共享驱动器的共享权限。

我编写了一个脚本,您可以在这里找到:

Import-Module ActiveDirectory

$list = Get-ADComputer -Filter 'SamAccountName -like "*FP*"' | Select -Exp Name

foreach ($Computer in $list)   
{ 
    Grant-SmbShareAccess -Name User -CimSession Server -AccountName "username" -AccessRight Full -confirm:$false
    $acl = (Get-Item \\$Computer\d$\User ).GetAccessControl('Access')
    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule ("Corp\uc4serv","FullControl","ContainerInherit, ObjectInherit","None","Allow")
    $acl.AddAccessRule($rule)
    Set-Acl \\$Computer\d$\User $acl
    Write-Host -ForegroundColor DarkGreen "Permissions granted on $Computer"
}
Write-Host -ForegroundColor DarkBlue "Command Has Completed" 

但它在 2008 年的服务器上不起作用,大概是因为它们无法运行 Get-SmbShareAccess cmdlet。

我正在尝试做的与这里的这篇文章非常相似:How to set share permissions on a remote share with Powershell?,但特别是在 Windows 服务器上。

我还在一个网站上找到了这段代码 (http://windowsitpro.com/powershell/managing-file-shares-windows-powershell):

$acl = Get-Acl `
    \\servername\c$\Users\username\sharetest
$permission = "corp\uc4serv","FullControl","Allow"
$accessRule = New-Object `
    System.Security.AccessControl.FileSystemAccessRule `
    $permission
$acl.SetAccessRule($accessRule)
$acl |
    Set-Acl \\servername\c$\Users\username\sharetest

但这只是设置共享的安全性而不是共享权限。

我也研究过使用 Net Share 命令,但为了更改共享权限,它必须完全删除并重新创建共享驱动器。

【问题讨论】:

标签: windows powershell permissions share


【解决方案1】:

您可以使用“网络共享”。使用 Invoke-Command 在每个远程服务器上运行它。

来源 - https://social.technet.microsoft.com/Forums/windowsserver/en-US/3edcabac-f1a8-4c4a-850c-8ba4697930a2/using-net-share-within-powershell

例子

Source - $server = "MYSRV" ; $user = "username" ; $SrvPath = "E:\Users\$user"
$sb = {
param($User,$SrvPath)
  NET SHARE $User$=$SrvPath "/GRANT:Domain Admins,FULL" "/GRANT:$User,CHANGE" /REMARK:"Home folder for $SrvPath"
  } 

Invoke-Command -Computername "$Server" -ScriptBlock $sb -ArgumentList $user,$SrvPath

【讨论】:

  • 不幸的是,这不起作用,因为远程服务器必须运行特定的东西。它必须在服务器上运行 WS-Management 服务,Invoke-Command cmdlet 才能连接到它。
猜你喜欢
  • 2021-07-23
  • 2019-07-07
  • 1970-01-01
  • 1970-01-01
  • 2023-01-20
  • 2014-10-29
  • 2018-02-15
  • 2015-06-06
  • 1970-01-01
相关资源
最近更新 更多