Эффективное преобразование Base64 в PowerShell - PullRequest
1 голос
/ 19 апреля 2020

Я довольно новичок в powershell, так что извините за этот базовый c вопрос

Я натолкнулся на следующий скрипт для преобразования двоичного файла в base64, но я не понимаю, как определить файл ввода / вывода и Я не нашел контакта с тем, кто сделал этот сценарий, поэтому, если кто-то может сказать мне, как это работает, я буду признателен

Код

function ConvertTo-Base64
{
    param
    (
        [string] $SourceFilePath,
        [string] $TargetFilePath
    )
 
    $SourceFilePath = Resolve-PathSafe $SourceFilePath
    $TargetFilePath = Resolve-PathSafe $TargetFilePath
     
    $bufferSize = 9000 # should be a multiplier of 3
    $buffer = New-Object byte[] $bufferSize
     
    $reader = [System.IO.File]::OpenRead($SourceFilePath)
    $writer = [System.IO.File]::CreateText($TargetFilePath)
     
    $bytesRead = 0
    do
    {
        $bytesRead = $reader.Read($buffer, 0, $bufferSize);
        $writer.Write([Convert]::ToBase64String($buffer, 0, $bytesRead));
    } while ($bytesRead -eq $bufferSize);
     
    $reader.Dispose()
    $writer.Dispose()
}
 
function ConvertFrom-Base64
{
    param
    (
        [string] $SourceFilePath,
        [string] $TargetFilePath
    )
 
    $SourceFilePath = Resolve-PathSafe $SourceFilePath
    $TargetFilePath = Resolve-PathSafe $TargetFilePath
 
    $bufferSize = 9000 # should be a multiplier of 4
    $buffer = New-Object char[] $bufferSize
     
    $reader = [System.IO.File]::OpenText($SourceFilePath)
    $writer = [System.IO.File]::OpenWrite($TargetFilePath)
     
    $bytesRead = 0
    do
    {
        $bytesRead = $reader.Read($buffer, 0, $bufferSize);
        $bytes = [Convert]::FromBase64CharArray($buffer, 0, $bytesRead);
        $writer.Write($bytes, 0, $bytes.Length);
    } while ($bytesRead -eq $bufferSize);
     
    $reader.Dispose()
    $writer.Dispose()
}
 
function Resolve-PathSafe
{
    param
    (
        [string] $Path
    )
      
    $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($Path)
}

Спасибо

1 Ответ

0 голосов
/ 19 апреля 2020

Быстрый ответ:

function ConvertTo-Base64
{
    param
    (
        [string] $SourceFilePath,
        [string] $TargetFilePath
    )
 ...
}

Описывает функцию, которая принимает два параметра, вы можете назвать ее так:

ConvertTo-Base64 "c:\temp\soucefile" "c:\temp\destfile"

Предположим, что ваш скрипт находится в файле "c:\temp\converter.ps1", Вы можете написать новый скрипт "MyScript.ps1":

# MyScript.ps1

# Dot source external script
. "c:\temp\converter.ps1"

# use the converter
ConvertTo-Base64 "c:\temp\soucefile" "c:\temp\destfile"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...