квадратные скобки PowerShell означают

Я преобразовываю скрипт, но я не уверен, что означает следующее:

$valueData = (Get-ItemProperty $key).digitalproductid[52..66]

$valueData хранит значения от 52 до 66 или хранит значения с 52-го по 66-е?

Длинное объяснение: я пытаюсь получить ключи активации из офиса Microsoft, который покоится на «мертвых» компьютерах. Я получил доступ к регистру и скопировал зашифрованное значение. У меня есть .txt с:

"DigitalProductID"=hex:a4,00,00,aa,...

Теперь мне нужно разобрать его на $valueData, чтобы он мог обрабатываться этим скриптом:

<# this part was hand made 
function Search-RegistryKeyValues {
  param(
    [string]$path,
    [string]$valueName
  )
  Get-ChildItem $path -recurse -ea SilentlyContinue | % {
    if ((Get-ItemProperty -Path $_.PsPath -ea SilentlyContinue) -match $valueName) {
      $_.PsPath
    }
  }
}

# find registry key that has value "digitalproductid"
# 32-bit versions
$key = Search-RegistryKeyValues "hklm:\software\microsoft\office" "digitalproductid"
if ($key -eq $null) {
  # 64-bit versions
  $key = Search-RegistryKeyValues "hklm:\software\Wow6432Node\microsoft\office" "digitalproductid"
  if ($key -eq $null) {Write-Host "MS Office is not installed."}
}
#end of hand made search #>
#begins doubt:
$valueData = (Get-ItemProperty $key).digitalproductid[52..66]

# decrypt base24 encoded binary data
$productKey = ""
$chars = "BCDFGHJKMPQRTVWXY2346789"
for ($i = 24; $i -ge 0; $i--) {
  $r = 0
  for ($j = 14; $j -ge 0; $j--) {
    $r = ($r * 256) -bxor $valueData[$j]
    $valueData[$j] = [math]::Truncate($r / 24)
    $r = $r % 24
  }
  $productKey = $chars[$r] + $productKey
  if (($i % 5) -eq 0 -and $i -ne 0) {
    $productKey = "-" + $productKey
  }
}

Write-Host "MS Office Product Key:" $productKey

person Ezeq    schedule 04.07.2015    source источник


Ответы (1)


Поскольку индексация начинается с нуля, она возвращает элементы с 53-го по 67-й.

Здесь у вас есть две независимые операции:

  • Операция диапазона 52..66, которая возвращает массив с целыми числами от 52 до 66.
  • Операции индексирования [], которые могут принимать массив индексов, в этом случае возвращают массив соответствующих элементов

    $Array=write 1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10th # array with ten elements
    
    $a=1,5,2,7
    $b=2..6 # equivalent to 2,3,4,5,6.
    
    $Array[$a] # returns 2nd, 6th, 3rd, 8th.
    $Array[$b] # returns 3rd, 4th, 5th, 6th, 7th.
    
person user4003407    schedule 04.07.2015
comment
Вопрос возник из-за использования квадратных скобок с текстом, что было сделано здесь . Я должен помнить, что powershell очень универсален (не полиморфен). - person Ezeq; 07.07.2015