0

これは非常に簡単なことのように思えます。ただし、WMI については何も知りません。サーバーの 1 つでディレクトリがネットワーク経由で共有されているかどうかを確認するにはどうすればよいですか (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句と同等)を使用して、特定のローカルパスとの共有を取り戻すことができますが、各スラッシュを2倍にする必要もあります(スラッシュは:です。

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 に答える