Невозможно вставить переменную в путь для Get-Item - PullRequest
1 голос
/ 19 марта 2020

Я пытаюсь взять список строк, разделенных возвратом, и разделить их символом =, обе стороны соответствуют ключу реестра, который запрашивается Get-Item. Первая половина всегда соответствует отлично, но ссылка на вторую половину соответствует только последнему элементу в списке:

Пример первой половины:

[string[]]$Patch = (".accda=Access.ACCDAExtension.16
.accdb=Access.Application.16" -split "`n")

Foreach ($a in $Patch) {
    $RegKey = ($a -split "=")[0]
    $Result = Get-Item -Path "Registry::HKEY_CLASSES_ROOT\$RegKey"
    echo $Result
}

Возвращает:

Name                           Property                                                                                                                                                                                    
----                           --------                                                                                                                                                                                    
.accda                         (default)    : Access.ACCDAExtension.16                                                                                                                                                     
                               Content Type : application/msaccess.addin                                                                                                                                                   
.accdb                         (default)    : Access.Application.16                                                                                                                                                        
                               Content Type : application/msaccess    

Пример второй половины:

[string[]]$Patch = ("
.accda=Access.ACCDAExtension.16
.accdb=Access.Application.16
" -split "`n")

Foreach ($a in $Patch) {
    $RegKey = ($a -split "=")[1]
    $Result = Get-Item -Path "Registry::HKEY_CLASSES_ROOT\$RegKey"
}

Возвращает:

Get-Item : Cannot find path 'HKEY_CLASSES_ROOT\Access.ACCDAExtension.16' because it does not exist.
At line:6 char:15
+     $Result = Get-Item -Path "Registry::HKEY_CLASSES_ROOT\$RegKey"
+               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (HKEY_CLASSES_RO...DAExtension.16:String) [Get-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemCommand



    Hive: HKEY_CLASSES_ROOT


Name                           Property                                                                                                                                                                                    
----                           --------                                                                                                                                                                                    
Access.Application.16          (default) : Microsoft Access Database        

Однако этот раздел реестра существует, и если я запускаю команду вручную, он находит его:

get-item Registry::HKEY_CLASSES_ROOT\Access.ACCDAExtension.16


    Hive: HKEY_CLASSES_ROOT


Name                           Property                                                                                                                                                                                    
----                           --------                                                                                                                                                                                    
Access.ACCDAExtension.16       (default) : Microsoft Access Add-in

Я почти уверен, что это вызвано возвратом в конце каждой строки.


PowerShell версия 5.1

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Я решил эту проблему, сделав свой список списком строк:

[string[]]$Patch = (".accda=Access.ACCDAExtension.16",
".accdb=Access.Application.16" -split "`n")

Foreach ($a in $Patch) {
    $RegKey = ($a -split "=")[1]
    $Result = Get-Item -Path "Registry::HKEY_CLASSES_ROOT\$RegKey"
}

Возможно, проблема была вызвана возвратом в конце каждой строки, возможно, я мог бы также отфильтровать его из команда.

0 голосов
/ 25 марта 2020

Измените это:

[string[]]$Patch = ("
.accda=Access.ACCDAExtension.16
.accdb=Access.Application.16
" -split "`n")

на это

[string[]]$Patch = (-split "
.accda=Access.ACCDAExtension.16
.accdb=Access.Application.16
")

Таким образом, у вас не будет пробелов.

Вот еще немного фона на оператор разбиения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...