web-dev-qa-db-fra.com

Création d'une action avec des autorisations avec Windows PowerShell

Utilisation de Powershell Comment puis-je créer une action et définir des autorisations d'accès.

Par exemple comme suit

  • Créer une part appelé "public" qui carte vers le "chemin c:\actions\foo"
  • Autoriser le domaine1\Les utilisateurs d'avoir accès en lecture seule à la part (ceci ne signifie pas définir les ACL sur les fichiers, plutôt sur la part de l'action)
9
user2666

Cela devrait faire l'affaire:

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

Bien sûr, vous devrez lancer PowerShell avec des droits administratifs, en fonction de l'endroit où/comment vous faites cela.

7
Matt Hanson

Utilisez la méthode Win32_Share Create. Exemple:

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

Vous pouvez trouver la documentation de cette méthode ici sur 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
);

Paramètres:

  • Chemin - chemin local du partage de Windows. Par exemple, "C:\foldertoshare".
  • Nom - transmet l'alias à un chemin d'accès configuré comme une action sur un système Windows. Exemple, "Sharename".
  • Type - passe le type de ressource partagée. Les types comprennent les lecteurs de disque, les files d'impression, les communications interprocesses (IPC) et les appareils généraux. Peut être l'une des valeurs suivantes.
    • 0 - lecteur de disque
    • 1 - Queue d'impression
    • 2 - Dispositif
    • 3 - IPC
    • 2147483648 - Administrateur de lecteur de disque
    • 2147483649 - Impression de la file d'attente
    • 2147483650 - Device admin
    • 2147483651 - IPC admin
  • MAINTENTIFALITÉ - Limite du nombre maximal d'utilisateurs autorisés à utiliser simultanément cette ressource. Exemple: 100. Ce paramètre est facultatif.
  • Description - Commentaire facultatif pour décrire la ressource partagée. Ce paramètre est facultatif. Exemple: "Share Description".
  • Mot de passe - Mot de passe (lorsque le serveur fonctionne avec la sécurité au niveau des actions) de la ressource partagée. Si le serveur fonctionne avec la sécurité au niveau de l'utilisateur, ce paramètre est ignoré. Ce paramètre est facultatif.
  • Accès - Descripteur de sécurité pour les autorisations de niveau utilisateur. Un descripteur de sécurité contient des informations sur les autorisations, le propriétaire et les capacités d'accès de la ressource.

Voir cette page sur MSDN pour savoir comment définir les autorisations d'accès: Win32_SecurityDescriptor Classe . Cet article est également un bon point de départ: tâches WMI: fichiers et dossiers .

7
splattne

La fonction ci-dessous est un exemple et peut être adaptée à tout ce dont vous avez besoin. La principale restriction est qu'il doit être exécutée sur la machine où la part doit être hébergée (ou peut-être utiliser PS Remoting pour atteindre d'abord cette machine). Le compte exécutant le script doit également avoir des autorisations suffisantes pour créer des actions.

Comme écrit, il s'attend à ce que l'objet DirectoryInfo tel quel argument, mais il ne serait pas difficile de l'adapter pour les chaînes. L'exemple inclut des autorisations sur le dossier pour deux objets différents (un utilisateur et un groupe), chacun avec différents types d'accès, de sorte que vous puissiez voir comment mélanger et faire correspondre des exigences d'autorisation complexes:

# $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

Pour Windows 7, essayez ceci:

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

Ci-dessus fonctionne aussi de PowerShell. Remarque `avant, plein

0
Frank Prepsel