2013-03-22 2 views
0

Я пытаюсь выяснить, включен ли/отключен брандмауэр Windows в сети, сканировать сеть и сообщать мне, включена ли функция брандмауэра/отключена.Ошибка сценария Powershell

Вот скрипт я использую, имейте в виду, что я большой уровень входа время:

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 
+0

У вас есть достаточно прав на доступ к реестру на этих машинах? – Deruijter

ответ

0

В нем говорится, что проблема вызывает метод по нулевому выражению. Вы уверены, что «$ pubkey» не является нулевым, следовательно, что

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

возвращает значение по строке 45?

+0

Это строка 46, символ 37 – user2199711

+0

Ошибка происходит по строке 46, но она, скорее всего, не работает из-за того, что $ reg имеет значение null ... –

Смежные вопросы