3

У меня есть скрипт powershell, который хэширует MAC-адрес, а затем публикует его в файл и буфер обмена.

$hash = [System.BitConverter]::ToString($md5.ComputeHash($utf8.GetBytes($MAC)))
$hash | clip
$hash | Out-File $Env:USERPROFILE\Desktop\this.txt 

У меня проблема в том, что возврат каретки экспортируется в буфер обмена. Я не хочу этого

Есть ли способ остановить это?

Дополнительная информация - Когда я вставляю текст из буфера обмена в шестнадцатеричный редактор, я вижу 0D0A

Функция буфера обмена была бы хороша, если бы я мог просто потерять это, как? Спасибо

3 ответа3

1

Если вы можете использовать PowerShell 5.0 или выше, доступен Set-Clipboard . Он не добавляет символы новой строки. Итак, ваш пример станет:

$hash = [System.BitConverter]::ToString($md5.ComputeHash($utf8.GetBytes($MAC)))
$hash | Set-Clipboard
$hash | Out-File $Env:USERPROFILE\Desktop\this.txt
0

$Hash.TrimEnd() должен очистить все пробелы Юникода в конце строки. http://msdn.microsoft.com/en-us/library/system.string.trimend.aspx

0

К сожалению, похоже, что сам clip добавляет новую строку. Итак, давайте сделаем это .NET способом!

Вот функция, которая берет стандартный ввод и помещает его в буфер обмена:

function Out-ClipboardText
{
    param(  
        [Parameter(
            Position=0, 
            Mandatory=$true, 
            ValueFromPipeline=$true)
        ]
        [String]$text
    ) 

    process
    {
        powershell -sta -noprofile -command "add-type -an system.windows.forms; [System.Windows.Forms.Clipboard]::SetText('$text')"
    }
}

Адаптировано с http://brianreiter.org/2010/09/03/copy-and-paste-with-clipboard-from-powershell/ и https://stackoverflow.com/a/887406/1030702

Используйте это так:

$hash | Out-ClipboardText

Он использует функцию буфера обмена .NET для установки текста. К сожалению, он также немного медленный и сложный, потому что ему нужно запустить новый процесс PowerShell в режиме STA, как это требуется для Clipboard (источник).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .