2013-05-15 30 views
1

不太確定爲什麼以下不起作用。基本上,有多個基於鍵值的elseif語句。服務器上的註冊表項不顯示結果

我測試了一臺服務器,其設置爲$valuePassword等於我放入的隨機字符,我也將$valueAutoLogin設置爲'1'。但是,我得到的結果是低於哪個不顯示任何內容?

此外 - 你可以想到一個更好的方式來做到這一點,而不是多個elseif的說法嗎?

>

clear 
Import-Module PSRemoteRegistry 
$computers = Get-Content -Path C:\MANNY\Servers.txt 

foreach($computer in $computers) 
{ 
Write-Host "Checking $computer" 

#Check if key exists 
$valuePassword = Get-RegValue -ComputerName $Computer -Key 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' -Value DefaultPassword 
$valueAutoLogin = Get-RegValue -ComputerName $Computer -Key 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' -Value AutoAdminLogon 


if($valuePassword -eq $null -and $valueAutoLogin -eq $null) 
{Write-Host "$computer not set"} 

elseif($valuePassword -notcontains $null -and $valueAutoLogin -eq $null) 
{Write-Host "$computer has Password set"} 

elseif($valuePassword -eq $null -and $valueAutoLogin -eq '1') 
{Write-Host "$computer has Autologin set but not password"} 

elseif($valuePassword -notcontains $null -and $valueAutoLogin -eq '1') 
{Write-Host "$computer has Autologin set and password set - AUTOLOGIN IS POSSIBLY SET"} 

} 

> 結果:

Checking SV160666 
Checking SV160668 
Checking SV160670 
Checking SV160672 
Checking SV160674 
Checking SV180435 
Checking SV193865 
Checking SV193885 

回答

1

你,當你與內建方法試圖得到什麼結果呢?另外,您應該添加一個else分支來報告意外的值。

Get-Content "C:\MANNY\Servers.txt" | % { 
    $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine", $_) 
    $key = $reg.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon") 

    $valuePassword = $key.GetValue("DefaultPassword") 
    $valueAutoLogin = $key.GetValue("AutoAdminLogon") 

    $key.Close() 
    $reg.Close() 

    if ($valuePassword -eq $null -and $valueAutoLogin -eq $null) { 
    Write-Host "$_ not set" 
    } elseif ($valuePassword -ne $null -and $valueAutoLogin -eq $null) { 
    Write-Host "$_ has Password set" 
    } elseif ($valuePassword -eq $null -and $valueAutoLogin -eq '1') { 
    Write-Host "$_ has Autologin set but not password" 
    } elseif ($valuePassword -ne $null -and $valueAutoLogin -eq '1') { 
    Write-Host "$_ has Autologin set and password set - AUTOLOGIN IS POSSIBLY SET" 
    } else { 
    Write-Host "$_: unexpected AutoLogin value: $valueAutoLogin" 
    } 
} 
+0

有趣的 - 那工程 - 但是,我怎麼會得到輸出顯示每個服務器的結果? $計算機不工作,因爲它沒有定義 - 如果我將get-content定義爲$ computer,它不會顯示任何服務器名稱。 – lara400

+1

我的部分複製/粘貼錯誤。由於我使用管道連接了「Get-Content」和「ForEach-Object」,因此'$ computer'必須用'$ _'替換。固定。 –

+0

太棒了!非常感謝Ansgar! – lara400

相關問題