Генерация машинного ключа с помощью Power shell
Я пытаюсь сгенерировать ключ компьютера, чтобы разделить его между несколькими компьютерами, после быстрого поиска в Google я нашел эту статью KB 2915218, Приложение А.
- Я скопировал код и сохранил как расширение.ps1, которое я считаю расширением Power Shell.
- Открытая силовая оболочка
- Переместить в местоположение файла
- запустить скрипт
PS E: ./Generate-MachineKey - проверка sha1
Он работает нормально, но не выводит ключи. Есть причина почему? Я делаю что-то не так в Powershell?
Спасибо,
2 ответа
Скрипт содержит функцию, поэтому вам нужно сначала загрузить скрипт, а затем запустить функцию, чтобы он работал.
Сначала нам нужно загрузить файл, я назвал мой ps1 "MachineKey", вот как я его загружаю
PS E:\> . .\MachineKey.ps1
После того, как я загрузил файл, если я хочу запустить функцию "Generate-MachineKey", я должен напечатать это потом
PS E:\> Generate-MachineKey -validationAlgorithm SHA1
Это намного проще, чем я думал: не нужно сохранять файл.ps1, просто вставьте скрипт и запустите его. Я на своем локальном ПК, Win 8.1 в качестве администратора.
Откройте PowerShell от имени администратора.
Вставьте скрипт из https://support.microsoft.com/en-us/help/2915218/resolving-view-state-message-authentication-code-mac-errors следующим образом:
Windows PowerShell
Copyright (C) 2014 Microsoft Corporation. All rights reserved.
PS C:\Users\JM> # Generates a <machineKey> element that can be copied + pasted into a Web.config file.
PS C:\Users\JM> function Generate-MachineKey {
>> [CmdletBinding()]
>> param (
>> [ValidateSet("AES", "DES", "3DES")]
>> [string]$decryptionAlgorithm = 'AES',
>> [ValidateSet("MD5", "SHA1", "HMACSHA256", "HMACSHA384", "HMACSHA512")]
>> [string]$validationAlgorithm = 'HMACSHA256'
>> )
>> process {
>> function BinaryToHex {
>> [CmdLetBinding()]
>> param($bytes)
>> process {
>> $builder = new-object System.Text.StringBuilder
>> foreach ($b in $bytes) {
>> $builder = $builder.AppendFormat([System.Globalization.CultureInfo]::InvariantCulture, "{0:X2}", $b)
>> }
>> $builder
>> }
>> }
>> switch ($decryptionAlgorithm) {
>> "AES" { $decryptionObject = new-object System.Security.Cryptography.AesCryptoServiceProvider }
>> "DES" { $decryptionObject = new-object System.Security.Cryptography.DESCryptoServiceProvider }
>> "3DES" { $decryptionObject = new-object System.Security.Cryptography.TripleDESCryptoServiceProvider }
>> }
>> $decryptionObject.GenerateKey()
>> $decryptionKey = BinaryToHex($decryptionObject.Key)
>> $decryptionObject.Dispose()
>> switch ($validationAlgorithm) {
>> "MD5" { $validationObject = new-object System.Security.Cryptography.HMACMD5 }
>> "SHA1" { $validationObject = new-object System.Security.Cryptography.HMACSHA1 }
>> "HMACSHA256" { $validationObject = new-object System.Security.Cryptography.HMACSHA256 }
>> "HMACSHA385" { $validationObject = new-object System.Security.Cryptography.HMACSHA384 }
>> "HMACSHA512" { $validationObject = new-object System.Security.Cryptography.HMACSHA512 }
>> }
>> $validationKey = BinaryToHex($validationObject.Key)
>> $validationObject.Dispose()
>> [string]::Format([System.Globalization.CultureInfo]::InvariantCulture,
>> "<machineKey decryption=`"{0}`" decryptionKey=`"{1}`" validation=`"{2}`" validationKey=`"{3}`" />",
>> $decryptionAlgorithm.ToUpperInvariant(), $decryptionKey,
>> $validationAlgorithm.ToUpperInvariant(), $validationKey)
>> }
>> }
>>
Введите эту команду в следующей строке
PS C:\Users\JM> Generate-MachineKey
<machineKey decryption="AES" decryptionKey="xxxxxxxxxxxxxxxxxxxx" validation="HMACSHA256" validationKey="xxxxxxxxxxxxxxxxx" />