【问题标题】:Test to see if directory is shared using PowerShell?测试是否使用 PowerShell 共享目录?
【发布时间】:2012-09-20 13:03:57
【问题描述】:

这似乎是一件很容易做到的事情;但是,我对 WMI 一无所知。我将如何确定一个目录是否在我的一台服务器上通过网络共享(使用 PowerShell)?此外,是否有我可以阅读以熟悉 WMI 的快速入门书?我真的希望能够在编写脚本时使用它,但大多数资源都没有显示任何使用 PowerShell 的示例。

目前,我正在检查“服务器”服务是否正在运行;并再次检查特定组是否对该目录具有权限。

    $serversrvc = Get-Service -Name "Server"
    $dirpath = "C:\My\Path\"
    $pathacl = (Get-Acl -path $dirpath).Access
    $group = "Domain\User"

    # Test if the "Server" service is running
    If ($serversrvc.Status -eq "Running")
    {
        echo '"Server" service is running.'
    }
    Else
    {
        echo '"Server" is NOT running.'
    }

    # Test if the $dirpath exists
    If (Test-Path $dirpath)
    {
        echo "$dirpath exists."
    }
    Else
    {
        echo "$dirpath does not exist."
    }

    # Test if $group has permssions on $dirpath
    foreach ($id in $pathacl)
    {
        If ($id.IdentityReference -eq $group)
        {
            echo "$group has access to $dirpath"
        }
    }

【问题讨论】:

    标签: powershell wmi powershell-2.0 wmi-query


    【解决方案1】:

    Win32_Share WMI 类返回计算机上共享文件夹的所有实例。这将为您提供本地计算机上的所有共享文件夹:

    Get-WmiObject -Class Win32_Share
    

    注意 Path 属性,您可以使用 Filter 参数(相当于 WQL WHERE 子句)来获取具有特定本地路径的共享,但您还需要将每个斜杠加倍(斜杠是:

    Get-WmiObject -Class Win32_Share -ComputerName PC1 -Filter "Path='C:\\Windows'"
    

    如果您返回结果,则该文件夹是共享的,否则不是。注意 ComputerName 参数,您可以对远程计算机执行 wmi 命令。

    要返回布尔结果,如果文件夹是共享的,则为 true,否则为 false,将命令强制转换为 bool:

     [bool](Get-WmiObject -Class Win32_Share -ComputerName PC1 -Filter "Path='C:\\Windows'")
    

    【讨论】:

    • 谢谢!这正是我正在寻找的。我将不得不更多地阅读 WMI,因为我将来可能会经常使用它。
    【解决方案2】:

    您可以使用Get-WmiObject Win32_Share 枚举计算机上的共享。您也可以使用net share,但是您必须解析输出,并且当您有 WMI 输出时为什么还要为此烦恼。 :-)

    【讨论】:

      猜你喜欢
      • 2017-02-20
      • 2012-03-25
      • 2011-03-11
      • 1970-01-01
      • 2015-01-30
      • 2018-11-22
      • 2018-05-30
      • 2015-07-13
      • 1970-01-01
      相关资源
      最近更新 更多