Ask a questionAsk a question
 

AnswerSet/Create Registry Values

  • Tuesday, June 30, 2009 7:20 PMAnthonyP100 Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    I am trying to search registry values and either create a value if
    it's not there or set the cirrect value it should have via the
    following function:

    function Compare2([string]$TermtoMatch, [string]$RegType, [int]
    $RegValue, [string]$RegistryPath) {
            $value = Get-ItemProperty -path $RegistryPath
            if ($value -match $TermtoMatch) { Set-ItemProperty $RegistryPath -
    Name $TermtoMatch -value $RegValue }
            Else { New-ItemProperty $RegistryPath -Name $TermtoMatch -value
    $RegValue -propertyType RegType }

     

    }

    Here's a snippet of the code calling the function:

    $RegistryPath = "HKLM:\SOFTWARE\Intel\LANDesk
    \VirusProtect6\CurrentVersion\Storages\FileSystem\RealTimeScan"

    Compare2("ConfigRestart", "dword", 1, $RegistryPath)

    Here's the error:
    Get-ItemProperty : Cannot bind argument to parameter 'Path' because it
    is an empty string.
    At C:\script.ps1:2 char:33
    + $value = Get-ItemProperty -Path <<<< $RegistryPath
    The '-match' operator failed: parsing "ConfigRestart dword 1 "HKLM:
    \SOFTWARE\Intel\LANDesk\VirusProtect6\CurrentVersion\Storages
    \FileSystem\RealTimeScan" - Unrecognized escape sequence \I..
    At C:\script.ps1:3 char:19
    + if ($value -match <<<< $TermtoMatch) {

    Any ideas what I'm missing here?  I'm thinking it has something to do
    with my casting.  When I manually put the values in for the variables
    it seems to work just fine.

    Thanks.

Answers

  • Wednesday, July 01, 2009 1:20 AMMarco ShawMVP, ModeratorUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
    When you call your function, call it like this:
    PS>compare2 "configrestart" "dword" 1 $registrypath

    By putting commas, PowerShell is thinking this is all the first argument and passes it in as an array value.

All Replies

  • Wednesday, July 01, 2009 1:20 AMMarco ShawMVP, ModeratorUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
    When you call your function, call it like this:
    PS>compare2 "configrestart" "dword" 1 $registrypath

    By putting commas, PowerShell is thinking this is all the first argument and passes it in as an array value.
  • Wednesday, July 01, 2009 2:27 AMMervyn ZhangMSFT, ModeratorUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    Hi,

    Additional to Marco's answer, it’s suggested to run the following commands to get more detailed information and instruction about PowerShell Functions.

    Get-Help about_functions

    Get-Help about_functions_advanced

    Get-Help about_functions_advanced_methods

    Get-Help about_functions_cmdletbindingattribute

    Thanks.

    This posting is provided "AS IS" with no warranties, and confers no rights.
  • Wednesday, July 01, 2009 1:17 PMMarco ShawMVP, ModeratorUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    Some of what Mervyn just suggested requires PowerShell v2 (about_functions_advanced, for example).
  • Wednesday, July 01, 2009 4:25 PMAnthonyP100 Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    Wow, I feel like a complete idiot.  Thanks you!