Проверка, если значение реестра равно 1, работает неправильно

Я собрал воедино кусочки PowerShell для удаленного запроса списка машин, хранящегося в файле.csv, для определения значения реестра. Если значение ключа реестра равно "1", сценарий должен создать текстовый файл, используя имя компьютера в качестве имени текстового файла.

Все отлично работает. Сценарий работает без ошибок. Проблема в том, что когда я возвращаюсь назад и удаленно проверяю целевое значение реестра, я обнаруживаю, что это значение не равно 1. Сценарий просто создает файл для каждой строки в.csv.

Что я делаю неправильно?

РЕДАКТИРОВАТЬ *** Я нашел проблему, у меня была опечатка в переменной $key для пути реестра. 17.07.2013 2:21р

$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 ответ

Решение

В PowerShell = является оператором присваивания, а не оператором сравнения. Измените эту строку:

if ($keyValue = "1")

в это:

if ($keyValue -eq "1")

Для получения дополнительной информации см. Get-Help about_Operators,

Кстати, ты делаешь это слишком сложным. Что-то вроде этого должно быть достаточно:

$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)
}
Другие вопросы по тегам