it-swarm-pt.tech

Criando um compartilhamento com permissões com o Windows Powershell

Usando o PowerShell, como posso criar um compartilhamento e definir permissões de acesso.

Por exemplo, como segue

  • Crie um compartilhamento chamado "public" que mapeie para o "caminho c:\shares\foo"
  • Permitir que DOMAIN1\Users tenha acesso somente leitura ao compartilhamento (isso não significa definir acls nos arquivos, mas no compartilhamento)
9
user2666

Isso deve fazer o truque:

net share "Public=c:\shares\foo" "/GRANT:Users,READ"

Obviamente, você precisará iniciar o PowerShell com direitos administrativos, dependendo de onde/como está fazendo isso.

7
Matt Hanson

Use o método Win32_Share Create. Exemplo:

(Get-WmiObject -List -ComputerName . | Where-Object -FilterScript 
{$_.Name -eq "Win32_Share"}).InvokeMethod("Create",
   ("C:\FolderToShare","ShareName",0,100,"Share description"))

Você pode encontrar a documentação deste método aqui no MSDN .

uint32 Create(
  [in]  string Path,
  [in]  string Name,
  [in]  uint32 Type,
  [in]  uint32 MaximumAllowed,
  [in]  string Description,
  [in]  string Password,
  [in]  Win32_SecurityDescriptor Access
);

Parâmetros:

  • Caminho - Caminho local do compartilhamento do Windows. Por exemplo, "C:\FolderToShare".
  • Nome - passa o alias para um caminho configurado como um compartilhamento em um sistema Windows. Exemplo, "ShareName".
  • Tipo - passa o tipo de recurso que está sendo compartilhado. Os tipos incluem unidades de disco, filas de impressão, comunicações entre processos (IPC) e dispositivos gerais. Pode ser um dos seguintes valores.
    • 0 - Unidade de disco
    • 1 - Fila de impressão
    • 2 - Dispositivo
    • 3 - IPC
    • 2147483648 - Administrador da unidade de disco
    • 2147483649 - Admin da fila de impressão
    • 2147483650 - Administrador do dispositivo
    • 2147483651 - IPC Admin
  • MaximumAllowed - limite no número máximo de usuários com permissão para usar simultaneamente esse recurso. Exemplo: 100. Este parâmetro é opcional.
  • Descrição - comentário opcional para descrever o recurso que está sendo compartilhado. Este parâmetro é opcional. Exemplo: "Compartilhar descrição".
  • Senha - Senha (quando o servidor está sendo executado com segurança em nível de compartilhamento) para o recurso compartilhado. Se o servidor estiver executando com segurança no nível do usuário, esse parâmetro será ignorado. Este parâmetro é opcional.
  • Acesso - descritor de segurança para permissões no nível do usuário. Um descritor de segurança contém informações sobre as permissões, proprietário e recursos de acesso do recurso.

Consulte esta página no MSDN para obter detalhes sobre como definir permissões de acesso: Win32_SecurityDescriptor Class . Este artigo também é um bom ponto de partida: Tarefas WMI: arquivos e pastas .

7
splattne

A função abaixo é um exemplo e pode ser adaptada para o que você precisar. A principal restrição é que ele deve ser executado na máquina em que o compartilhamento será hospedado (ou talvez usando o PS Remoting para alcançar a máquina primeiro). A conta que está executando o script também deve ter permissões suficientes para criar compartilhamentos.

Conforme escrito, espera um objeto DirectoryInfo como argumento, mas não seria difícil adaptá-lo para strings. O exemplo inclui permissões na pasta para dois objetos diferentes (um usuário e um grupo), cada um com diferentes tipos de acesso, para que você possa ver como combinar e combinar requisitos complexos de permissão:

# $folder is a DirectoryInfo object
Function Create-FileShare($folder)
{
    $name = $folder.Name
    $path = $folder.FullName
    $description = "$name"
    $domain = "example.com" #AD Domain name here (Optional/Not really used/Here for completeness)

    $Method = "Create"
    $sd = ([WMIClass] "Win32_SecurityDescriptor").CreateInstance()

    #AccessMasks:
    #2032127 = Full Control
    #1245631 = Change
    #1179817 = Read

    #Share with the user
    $ACE = ([WMIClass] "Win32_ACE").CreateInstance()
    $Trustee = ([WMIClass] "Win32_Trustee").CreateInstance()
    $Trustee.Name = $name
    $Trustee.Domain = $Null
    #original example assigned this, but I found it worked better if I left it empty
    #$Trustee.SID = ([wmi]"win32_userAccount.Domain='$domain',Name='$name'").sid    
    $ace.AccessMask = 1245631 
    $ace.AceFlags = 3 #Should almost always be three. Really. don't change it.
    $ace.AceType = 0 # 0 = allow, 1 = deny
    $ACE.Trustee = $Trustee 
    $sd.DACL += $ACE.psObject.baseobject 

    #Share with Domain Admins
    $ACE = ([WMIClass] "Win32_ACE").CreateInstance()
    $Trustee = ([WMIClass] "Win32_Trustee").CreateInstance()
    $Trustee.Name = "Domain Admins"
    $Trustee.Domain = $Null
    #$Trustee.SID = ([wmi]"win32_userAccount.Domain='$domain',Name='$name'").sid    
    $ace.AccessMask = 2032127
    $ace.AceFlags = 3
    $ace.AceType = 0
    $ACE.Trustee = $Trustee 
    $sd.DACL += $ACE.psObject.baseobject        

    $mc = [WmiClass]"Win32_Share"
    $InParams = $mc.psbase.GetMethodParameters($Method)
    $InParams.Access = $sd
    $InParams.Description = $description
    $InParams.MaximumAllowed = $Null
    $InParams.Name = $name
    $InParams.Password = $Null
    $InParams.Path = $path
    $InParams.Type = [uint32]0

    $R = $mc.PSBase.InvokeMethod($Method, $InParams, $Null)
    switch ($($R.ReturnValue))
     {
          0 {Write-Host "Share:$name Path:$path Result:Success"; break}
          2 {Write-Host "Share:$name Path:$path Result:Access Denied" -foregroundcolor red -backgroundcolor yellow;break}
          8 {Write-Host "Share:$name Path:$path Result:Unknown Failure" -foregroundcolor red -backgroundcolor yellow;break}
          9 {Write-Host "Share:$name Path:$path Result:Invalid Name" -foregroundcolor red -backgroundcolor yellow;break}
          10 {Write-Host "Share:$name Path:$path Result:Invalid Level" -foregroundcolor red -backgroundcolor yellow;break}
          21 {Write-Host "Share:$name Path:$path Result:Invalid Parameter" -foregroundcolor red -backgroundcolor yellow;break}
          22 {Write-Host "Share:$name Path:$path Result:Duplicate Share" -foregroundcolor red -backgroundcolor yellow;break}
          23 {Write-Host "Share:$name Path:$path Result:Reedirected Path" -foregroundcolor red -backgroundcolor yellow;break}
          24 {Write-Host "Share:$name Path:$path Result:Unknown Device or Directory" -foregroundcolor red -backgroundcolor yellow;break}
          25 {Write-Host "Share:$name Path:$path Result:Network Name Not Found" -foregroundcolor red -backgroundcolor yellow;break}
          default {Write-Host "Share:$name Path:$path Result:*** Unknown Error ***" -foregroundcolor red -backgroundcolor yellow;break}
     }
}
2
Joel Coel

Para o Windows 7, tente o seguinte:

net SHARE share=d:\share /GRANT:EVERYONE`,FULL /REMARK:"

Acima também funciona no PowerShell. Nota `antes, COMPLETO

0
Frank Prepsel