Проверьте, существует ли значение реестра - PullRequest
36 голосов
/ 13 апреля 2011

В моем скрипте powershell я создаю одну запись реестра для каждого элемента, для которого запускаю скрипт, и я хотел бы сохранить некоторую дополнительную информацию о каждом элементе в реестре (если вы указали необязательные параметры один раз, то по умолчанию эти параметры используются вбудущее).

Проблема, с которой я столкнулся, заключается в том, что мне нужно выполнить Test-RegistryValue (например, здесь ), но, похоже, он не работает (он возвращает false, даже еслизапись существует).Я попытался «построить на его основе», и единственное, что я придумал, это:

Function Test-RegistryValue($regkey, $name) 
{
    try
    {
        $exists = Get-ItemProperty $regkey $name -ErrorAction SilentlyContinue
        Write-Host "Test-RegistryValue: $exists"
        if (($exists -eq $null) -or ($exists.Length -eq 0))
        {
            return $false
        }
        else
        {
            return $true
        }
    }
    catch
    {
        return $false
    }
}

Это, к сожалению, также не делает то, что мне нужно, так как кажется, что он всегда выбирает некоторое (первое?) Значениеиз раздела реестра.

У кого-нибудь есть идеи, как это сделать?Просто кажется слишком много, чтобы написать управляемый код для этого ...

Ответы [ 12 ]

0 голосов
/ 13 апреля 2011

Это работает для меня:

Function Test-RegistryValue 
{
    param($regkey, $name)
    $exists = Get-ItemProperty "$regkey\$name" -ErrorAction SilentlyContinue
    Write-Host "Test-RegistryValue: $exists"
    if (($exists -eq $null) -or ($exists.Length -eq 0))
    {
        return $false
    }
    else
    {
        return $true
    }
}
0 голосов
/ 13 апреля 2011

Тест -not должен срабатывать, если свойство не существует:

$prop = (Get-ItemProperty $regkey).$name
if (-not $prop)
{
   New-ItemProperty -Path $regkey -Name $name -Value "X"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...