Как получить доступ к 64-разрядному реестру от 32-разрядного экземпляра Powershell?

Итак, у вас есть идентификатор tdFri и tdFri2, и вы получаете данные обратно, то есть shiftDay = Fri и shiftNo = 2

Мне кажется, что вам просто нужно объединить их и сделать несколько строк для выбора элементов по идентификатору.

var selectors = '#td' + shiftDay + ', #td' + shiftDay + shiftNo;  //'#tdFri, #tdFri2'
var elements = document.querySelectorAll(selectors);
elements.forEach(function(el) {
    el.classList.add('highlighted');
});
.highlighted {
    background: yellow;
}

Или, возможно, лучший более «angularJS» способ сделать это - поместить эти значения в угловую область, а затем добавить класс в шаблон

<td colspan="3" id="tdFri" ng-class="{'highlight': shiftDay ==='Fri'}">
or maybe
<td colspan="3" id="tdFri" ng-class="{'highlight': shiftDay === date[4]}">
16
задан Richard Berg 10 March 2009 в 14:17
поделиться

1 ответ

Когда Powershell работает как процесс на 32 бита, я не знаю о механизме для "переключения его" на режим на 64 бита. Смысл поддержки виртуализации в системах на 64 бита должен убедить процессам на 32 бита, они живут в ОС на 32 бита...

Однако это сказало, что я использовал следующую технику в прошлом, и это работало очень приятно на меня (следующий код был протестирован на Vista SP1 x64 с Powershell v1). Техника полагается на то, что "Любой ЦП.NET" исполняемые файлы будет работать, поскольку 64 бита обрабатывают, даже когда вызвано от процесса на 32 бита. Шаги мы будем выполнять:

  1. Скомпилируйте короткую программу C#, которая запустит powershell (т.е. очень простая реализация "ветвления" :-))
  2. Запустите скомпилированную программу C#
  3. Скомпилированная программа C# запустит Powershell, но потому что это - "Любой ЦП", это будет работать как процесс на 64 бита, таким образом, это запустится Powershell, на 64 бита (обратите внимание, что, потому что это - просто подтверждение концепции, я ожидаю, что powershell будет в Вашем 'пути'),
  4. Новый Powershell на 64 бита выполнит commandlet нашего выбора

Это - снимок экрана вышеупомянутого в действии (заметьте разрядность процессов): Обработайте древовидный http://img3.imageshack.us/img3/3248/powershellfork.png

Следующая программа ожидает все файлы, перечисленные для нахождения в том же каталоге. Я рекомендую создать тестовый каталог, например, C:\Temp\PowershellTest, и хранить все файлы там).

Точка входа к программе будет простым commandlet:

# file "test.ps1"
$basePath = Split-Path -resolve $myInvocation.MyCommand.Path
$exe = Join-Path $basePath test.exe
&"$env:SystemRoot\Microsoft.NET\Framework\v3.5\csc.exe" /nologo /target:exe /out:$exe (Join-Path $basePath test.cs)
&$exe (Join-Path $basePath visibility.ps1)

Это выполняет csc (32 бита, но это не имеет значения :-)), и затем выполняет результат csc компилятора, передавая один аргумент, (полный путь к) видимость ps1 (это - commandlet, который мы хотим выполнить в Powershell на 64 бита).

Код C# очень прост также:

// file "test.cs"
using System.Diagnostics;
static class Program {
    static int Main(string[] args) {
        ProcessStartInfo i = new ProcessStartInfo("powershell", args[0]);
        i.UseShellExecute = false;
        using(Process p = Process.Start(i)) {
            p.WaitForExit();
            return p.ExitCode;
        }
    }
}

И наконец, Ваш сценарий "видимости":

# file "visibility.ps1"
(dir HKLM:\SOFTWARE).count - (dir HKLM:\SOFTWARE\wow6432node).count

Запущение скрипта записи от Powershell на 32 бита теперь приводит к желаемому результату (только, чтобы показать, что я не обманывал, я запускаю скрипт видимости непосредственно сначала, затем с помощью нашего метода ветвления):

Прогон программы http://img3.imageshack.us/img3/2766/powershellrunc.png

8
ответ дан 30 November 2019 в 16:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: