it-swarm-es.com

Crear un recurso compartido con permisos con Windows Powershell

Con Powershell, ¿cómo puedo crear un recurso compartido y establecer permisos de acceso?.

Por ejemplo de la siguiente manera

  • Crear recurso compartido llamado "público" que se asigna a la "ruta c:\shares\foo"
  • Permita que DOMAIN1\Users tenga acceso de solo lectura al recurso compartido (esto no significa configurar acls en los archivos, sino en el recurso compartido)
9
user2666

Esto debería funcionar:

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

Por supuesto, deberá iniciar PowerShell con derechos administrativos, según dónde/cómo lo haga.

7
Matt Hanson

Use el método Win32_Share Create. Ejemplo:

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

Puede encontrar la documentación de este método aquí en 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:

  • Ruta: ruta local del recurso compartido de Windows. Por ejemplo, "C:\FolderToShare".
  • Nombre: pasa el alias a una ruta configurada como recurso compartido en un sistema Windows. Ejemplo, "ShareName".
  • Tipo: pasa el tipo de recurso que se comparte. Los tipos incluyen unidades de disco, colas de impresión, comunicaciones entre procesos (IPC) y dispositivos generales. Puede ser uno de los siguientes valores.
    • 0 - Unidad de disco
    • 1 - Cola de impresión
    • 2 - Dispositivo
    • 3 - IPC
    • 2147483648 - Administrador de la unidad de disco
    • 2147483649 - Administrador de cola de impresión
    • 2147483650 - Administrador de dispositivos
    • 2147483651 - IPC Admin
  • MaximumAllowed: límite en el número máximo de usuarios que pueden usar este recurso simultáneamente. Ejemplo: 100. Este parámetro es opcional.
  • Descripción: comentario opcional para describir el recurso que se comparte. Este parámetro es opcional. Ejemplo: "Compartir descripción".
  • Contraseña: contraseña (cuando el servidor se ejecuta con seguridad de nivel compartido) para el recurso compartido. Si el servidor se ejecuta con seguridad de nivel de usuario, este parámetro se ignora. Este parámetro es opcional.
  • Acceso: descriptor de seguridad para permisos de nivel de usuario. Un descriptor de seguridad contiene información sobre los permisos, el propietario y las capacidades de acceso del recurso.

Consulte esta página en MSDN para obtener detalles sobre cómo establecer permisos de acceso: Clase Win32_SecurityDescriptor . Este artículo también es un buen punto de partida: Tareas de WMI: archivos y carpetas .

7
splattne

La siguiente función es un ejemplo y se puede adaptar a lo que necesite. La principal restricción es que debe ejecutarse en la máquina donde se alojará el recurso compartido (o tal vez usando PS Remoting para llegar a esa máquina primero). La cuenta que ejecuta el script también debe tener permisos suficientes para crear recursos compartidos.

Tal como está escrito, espera un objeto DirectoryInfo como argumento, pero no sería difícil adaptarlo para cadenas. El ejemplo incluye permisos en la carpeta para dos objetos diferentes (un usuario y un grupo), cada uno con diferentes tipos de acceso, para que pueda ver cómo mezclar y combinar para requisitos de permisos complejos:

# $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 Windows 7 intente esto:

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

Arriba también funciona desde PowerShell. Nota `antes, COMPLETO

0
Frank Prepsel