0

Windowsファイアウォールがネットワーク上で有効/無効になっているかどうかを調べて、ネットワークをスキャンし、ファイアウォールサービスが有効/無効になっているかどうかを知らせようとしています.

これが私が使用しているスクリプトです。私は初心者レベルであることに注意してください。

function Get-FWState
{
    param
    (
        [int]$state
    )

    switch ($state)
    {
        0 { return "Off" }
        1 { return "On" }
    }
}

if (-not (Get-Module ActiveDirectory))
{
    Import-Module ActiveDirectory
}

$computers = Get-ADComputer -Filter *

ForEach ($computer in $computers)
{
    try 
    {
        $everythingOK = $True

        $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $computer.Name)

        $domkey = $reg.OpenSubkey("SYSTEM\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\DomainProfile")
        $domvalue = $domkey.GetValue("EnableFirewall")

    } 
    catch 
    {
        $everythingOK = $false
        $_
    }

    if ($everythingOK)
    {
        $stdkey = $reg.OpenSubkey("SYSTEM\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\StandardProfile")
        $stdvalue = $stdkey.GetValue("EnableFirewall")

        $pubkey = $reg.OpenSubkey("SYSTEM\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\PublicProfile")
        $pubvalue = $pubkey.GetValue("EnableFirewall")
    }

    $obj = New-Object -TypeName PSObject
    $obj | Add-Member -MemberType NoteProperty -Name 'HostName' -Value $computer.Name
    $obj | Add-Member -MemberType NoteProperty -Name 'DomainProfile' -Value $(Get-FWState -state $domvalue)
    $obj | Add-Member -MemberType NoteProperty -Name 'StandardProfile' -Value $(Get-FWState -state $stdvalue)
    $obj | Add-Member -MemberType NoteProperty -Name 'PublicProfile' -Value $(Get-FWState -state $pubvalue)

    Write-Output $obj
}

このスクリプトを実行すると、次のエラー メッセージが表示されます。

You cannot call a method on a null-valued expression.
At C:\Scripts\Firewall.ps1:46 char:37
+         $pubvalue = $pubkey.GetValue <<<< ("EnableFirewall")
    + CategoryInfo          : InvalidOperation: (GetValue:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

You cannot call a method on a null-valued expression.
At C:\Scripts\Firewall.ps1:46 char:37
+         $pubvalue = $pubkey.GetValue <<<< ("EnableFirewall")
    + CategoryInfo          : InvalidOperation: (GetValue:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
4

1 に答える 1

0

これは、問題がnull式でメソッドを呼び出すことであると述べています。「$pubkey」がnullではないことを確認しますか?

$pubkey = $reg.OpenSubkey("SYSTEM\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\PublicProfile")

45行目に値を返しますか?

于 2013-03-22T15:26:25.683 に答える