Диспетчер конфигурации

#powershell

#powershell

Вопрос:

Я новичок в powershell, так что не стоит меня обманывать 🙂 Мой вопрос заключается в следующем: мне нужно настроить два типа компьютеров x86 и x64. Во время этой настройки я должен проверить версию .NET Framework, установленную на компьютере. Я делаю это, вызывая тестовый путь: Тестовый ключ «HKLM: Software Wow6432Node Microsoft NET Framework Setup NDP v1.1.4322» «Установить» то, что я хотел бы сделать, это: # Проверьте, соответствует ли система архитектуре x64 # в случае положительного ответа измените реестр # на Wow6432Node if($os_architecture -eq «x64») { $dot_net_registry_root_path = «HKLM:SOFTWARE Wow6432Node»}

 # Add common framework path
$dot_net_registry_path = $dot_net_registry_root_path   "NET Framework SetupNDP"

# Check 1.0 version of .NET Framework
$dot_net_1_0_registry_path = $dot_net_registry_root_path   "Microsoft.NETFrameworkv1.0SBSDisabled"

if(!(Test-Key $dot_net_1_0_registry_path "Install"))
{
    Write-Output ".NET Framework v1.0.3705 is NOT installed"
}
else
{
    Write-Output ".NET Framework v1.0.3705 is installed"
}

# Check 1.1 version of .NET Framework
$dot_net_1_1_registry_path = "'"   $dot_net_registry_path   "v1.1.4322"    "'"

if (!(Test-Key $dot_net_1_1_registry_path "Install"))
{
    Write-Output "Please install .NET Framework v1.1.4322"
}
else
{
    Write-Output ".NET Framework v1.1.4322 is installed"
}
  

где тестовый ключ

 function Test-Key([string]$path, [string]$key)
{
    if(!(Test-Path -LiteralPath $path)) { return $false }

    if ((Get-ItemProperty $path).$key -eq $null) { return $false }

    return $true
}
  

Проблема в том, что когда я использую переменную вместо строки в кавычках, тестовый путь завершается ошибкой из-за пробелов в пути: «NET Framework Setup»

Что следует сделать, чтобы исправить это?

Комментарии:

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

2. Я изменяю начальный тест…

Ответ №1:

Я часто заканчиваю тем, что ставлю «» вокруг путей, просто чтобы быть уверенным, попытался добавить их к Test-Path и Get-ItemProperty вызовам в функции выше:

if(!(Test-Path -LiteralPath "$path"))

if ((Get-ItemProperty "$path").$key

Вы можете получить архитектуру компьютера с помощью команды

(Get-WmiObject Win32_OperatingSystem).OSArchitecture