测试是否使用PowerShell共享目录?

时间:2012-09-28 16:05:20

标签: powershell wmi powershell-v2.0 wmi-query

这似乎是一件非常容易的事;但是,我对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"
        }
    }

2 个答案:

答案 0 :(得分:5)

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'")

答案 1 :(得分:1)

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