检查注册表值是否等于1无法正常工作

时间:2013-07-17 21:15:26

标签: windows powershell registry

我已将PowerShell的一些内容放在一起,以远程查询存储在.csv文件中的计算机列表,以获取注册表值。如果注册表项的值等于“1”,则脚本应使用计算机名称作为文本文件的名称创建文本文件。

一切都很好。脚本运行愉快,没有任何错误。问题是,当我返回并远程检查目标注册表值时,我发现该值不是1.脚本只是为.csv中的每一行创建一个文件。

我做错了什么?

编辑***我发现 问题我在注册表路径的$ key变量中输入了一个拼写错误。 2013年7月17日2:21p

$File = Import-Csv 'c:\temp\machines.csv'

foreach ($line in $file)
{
  $machinename = $line.machinename
  trap [Exception] {continue}
  $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine",$MachineName)
  $key = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\WinLogon"
  $regkey = ""
  $regkey = $reg.opensubkey($key)
  $keyValue = ""
  $keyValue = $regKey.GetValue('AutoAdminLogon')

  if ($keyValue = "1")
  {
    try
    {
      $textFile = New-Item -Path "c:\temp\autologin" -Name $MachineName -ItemType "File"
    }
    catch
    {
      $msg = $_
      $msg
    }
  }
  $Results = $MachineName , $keyValue
  Write-host $Results

  #Output Below Here:
}

1 个答案:

答案 0 :(得分:4)

在PowerShell =中是赋值运算符,而不是比较运算符。改变这一行:

if ($keyValue = "1")

进入这个:

if ($keyValue -eq "1")

有关详细信息,请参阅Get-Help about_Operators

你这么复杂,BTW。这样的事情就足够了:

$keyname = 'SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\WinLogon'

Import-Csv 'C:\temp\machines.csv' | % {
  $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine",
           $_.machinename)
  $key = $reg.OpenSubkey($keyname)
  $value = $key.GetValue('AutoAdminLogon')
  if ($value -eq "1") {
    $filename = Join-Path "c:\temp\autologin" $_.machinename
    try {
      touch $filename
      $textFile = Get-Item $filename
    } catch {
      $_
    }
  }
  Write-Host ($_.machinename , $value)
}