Проверка, если значение реестра равно 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)
}