0

这似乎是一件很容易做到的事情;但是,我对 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"
        }
    }
4

2 回答 2

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'")
于 2012-09-28T16:15:57.320 回答
1

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

于 2012-09-28T16:14:22.743 回答