9 votos

La creación de un Compartir con los Permisos con Windows Powershell

El uso de Powershell ¿cómo puedo crear un recurso compartido y establecer permisos de acceso.

Por ejemplo, como sigue

  • Crear el recurso compartido llamado "público" que se asigna a la "ruta de c:\shares\foo"
  • Permitir DOMAIN1\Usuarios tienen acceso de sólo lectura a la acción (esto no significa que la configuración de las acl de los archivos, sino en el compartir)

7voto

Rad Puntos 6308

Esto debe hacer el truco:

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

Por supuesto, usted necesita para el lanzamiento de PowerShell con derechos administrativos, dependiendo de dónde/cómo usted está haciendo esto.

7voto

Bob Puntos 34449

El uso de la Win32_Share método Create. Ejemplo:

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

Usted 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 - la ruta del recurso compartido de Windows. Por ejemplo, "C:\FolderToShare".
  • Nombre - Pasa el alias de una ruta de acceso configurado como un recurso compartido en un sistema Windows. Ejemplo, "Recurso".
  • Tipo - Pasa el tipo de recurso que se comparte. Tipos incluye unidades de disco, colas de impresión, comunicaciones entre procesos (IPC), y en general los dispositivos. Puede ser uno de los siguientes valores.
    • 0 - Unidad De Disco
    • 1 - La Cola De Impresión
    • 2 - Dispositivo
    • 3 - IPC
    • 2147483648 - Unidad De Disco Admin
    • 2147483649 - Cola De Impresión Admin
    • 2147483650 - Dispositivo De Administración De
    • 2147483651 - IPC Admin
  • MaximumAllowed - Límite en el número máximo de usuarios que pueden utilizar simultáneamente a este recurso. Ejemplo: 100. Este parámetro es opcional.
  • Descripción - comentario Opcional para describir el recurso compartido. Este parámetro es opcional. Ejemplo: "Compartir con la descripción".
  • Contraseña - Contraseña (cuando el servidor se está ejecutando con la seguridad de nivel compartido) para el recurso compartido. Si el servidor se está ejecutando con la seguridad de nivel de usuario, se omite este parámetro. Este parámetro es opcional.
  • Acceso - descriptor de Seguridad para el usuario con nivel de permisos. Un descriptor de seguridad contiene información acerca de los permisos, el propietario y capacidades de acceso de los recursos.

Ver esta página en MSDN para obtener más detalles de cómo configurar los permisos de acceso: Win32_SecurityDescriptor Clase. Este artículo es también un buen punto de partida: WMI Tareas: Archivos y Carpetas.

2voto

Joel Coel Puntos 8080

La función siguiente es un ejemplo, y puede ser adaptado a lo que usted necesita. Como está escrito se espera un objeto DirectoryInfo como argumento, pero no sería difícil adaptarlo para las cadenas. El ejemplo incluye los permisos en la carpeta de los dos objetos diferentes (un usuario y un grupo), cada uno con diferentes tipos de acceso, de modo que usted puede ver cómo mezclar y combinar para los complejos requisitos de permisos:

Function Create-FileShare($folder)
{
    $name = $folder.Name
    $path = $folder.FullName
    $description = "$name"

    $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='york.edu',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='york.edu',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}
     }
}

El script se debe ejecutar como administrador en la máquina en la que las acciones están alojados.

0voto

nedm Puntos 4392

Este hilo, a partir de la segunda respuesta, tiene algunos ejemplos de secuencias de comandos para lograr esto.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: