AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 9011
In Process
user2666
user2666
Asked: 2009-05-17 15:54:26 +0800 CST2009-05-17 15:54:26 +0800 CST 2009-05-17 15:54:26 +0800 CST

使用 Windows Powershell 创建具有权限的共享

  • 772

使用 Powershell 如何创建共享并设置访问权限。

例如如下

  • 创建名为“public”的共享,映射到“路径 c:\shares\foo”
  • 允许 DOMAIN1\Users 对共享具有只读访问权限(这并不意味着在文件上设置 acls,而是在共享上设置)
windows network-share powershell
  • 4 4 个回答
  • 42507 Views

4 个回答

  • Voted
  1. Matt Hanson
    2009-05-17T23:06:58+08:002009-05-17T23:06:58+08:00

    这应该可以解决问题:

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

    当然,您需要使用管理权限启动 PowerShell,具体取决于您在哪里/如何执行此操作。

    • 7
  2. splattne
    2009-05-18T01:45:22+08:002009-05-18T01:45:22+08:00

    使用 Win32_Share 创建方法。例子:

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

    您可以在 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
    );
    

    参数:

    • 路径 - Windows 共享的本地路径。例如,“C:\FolderToShare”。
    • 名称 - 将别名传递给在 Windows 系统上设置为共享的路径。例如,“共享名”。
    • 类型 - 传递共享资源的类型。类型包括磁盘驱动器、打印队列、进程间通信 (IPC) 和通用设备。可以是以下值之一。
      • 0 - 磁盘驱动器
      • 1 - 打印队列
      • 2 - 设备
      • 3 - 工业电脑
      • 2147483648 - 磁盘驱动器管理员
      • 2147483649 - 打印队列管理员
      • 2147483650 - 设备管理员
      • 2147483651 - IPC 管理员
    • MaximumAllowed - 限制允许同时使用此资源的最大用户数。示例:100。此参数是可选的。
    • 描述 - 描述共享资源的可选注释。此参数是可选的。示例:“共享说明”。
    • 密码 - 共享资源的密码(当服务器以共享级别安全运行时)。如果服务器以用户级安全性运行,则忽略此参数。此参数是可选的。
    • 访问 - 用户级别权限的安全描述符。安全描述符包含有关资源的权限、所有者和访问能力的信息。

    有关如何设置访问权限的详细信息,请参阅 MSDN 上的此页面:Win32_SecurityDescriptor Class。本文也是一个很好的起点:WMI 任务:文件和文件夹。

    • 7
  3. Joel Coel
    2012-06-20T10:54:33+08:002012-06-20T10:54:33+08:00

    下面的函数是一个示例,可以根据您的需要进行调整。主要限制是它必须在要托管共享的机器上运行(或者可能使用 PS Remoting 首先到达该机器)。运行脚本的帐户还必须具有足够的权限才能创建共享。

    正如所写的那样,它期望一个DirectoryInfo对象作为它的参数,但是将它用于字符串并不难。该示例包括两个不同对象(一个用户和一个组)的文件夹权限,每个对象具有不同类型的访问权限,因此您可以了解如何混合和匹配复杂的权限要求:

    # $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
  4. Frank Prepsel
    2019-10-02T06:08:06+08:002019-10-02T06:08:06+08:00

    对于 Windows 7,试试这个:

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

    以上也适用于 PowerShell。注意`之前,FULL

    • 1

相关问题

  • Vanilla Powershell 是否足以成为 Windows 和 DB 服务器管理员的语言?

  • 为什么添加新驱动器后我的磁盘驱动器访问速度如此之慢?

  • 在 Windows Server 2003 下使用 wscipt 从 .asp 文件运行 .exe

  • 最佳混合环境(OS X + Windows)备份?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve