Я работаю с Windows-10.
Я только что проделал большую работу, чтобы получить информацию ShortSha в деталях скомпилированного файла. Теперь я хотел бы скопировать эту информацию в буфер обмена, но это, похоже, не работает, как вы можете видеть на этом снимке экрана:
Как видите, я могу выбрать информацию, но не могу скопировать ее в буфер обмена, в то время как я хотел бы скопировать ShortSha, чтобы найти эту информацию обратно в моей системе управления версиями Git-Extensions.
Что касается моей версии Windows, вот результат команды winver
:
Для вашего сведения: я уверен, что работая с версией Windows, где было возможно копирование этой информации (это былоWindows-серверверсия).
Редактировать:
Поскольку я уверен, что делал это в другой среде Windows, я хотел бы знать точное название этой функции и пример такой среды Windows. Таким образом, я мог бы начать искать патч.
Редактирование 2: замечание о PowerShell
В Powershell я запустил следующую команду, которая весьма многообещающа:
Get-Item "C:\Directory\Application.dll").VersionInfo.ProductVersion
Если я продолжу использовать это решение, мне нужно будет знать:
- Как использовать этот результат в качестве входных данных для копирования в буфер обмена (
Set-Clipboard -Value Get-Item "C:\Directory\Application.dll").VersionInfo.ProductVersion
не работает) - Как интегрировать это в контекстное меню Windows (щелкните правой кнопкой мыши и запустите команду для этого файла)
Редактировать3: замечание о Windows Server
Я обнаружил, что работаю на Windows Server, используя эту функцию. Возможно ли, что эта функция не работает на версии Windows-10? Если нет, есть ли какой-то патч, чтобы это заработало?
решение1
Ваш PowerShell почти правильный, не хватает только одной пары скобок:
Set-Clipboard -Value (Get-Item "C:\Directory\Application.dll").VersionInfo.ProductVersion
Чтобы использовать его в контекстном меню, создайте .ps1
файл скрипта со следующим содержимым. Мой был сохранен в C:\Temp\test.ps1
.
$param1=$args[0]
Set-Clipboard -Value (Get-Item "$param1").VersionInfo.ProductVersion
Теперь скопируйте следующий текст в .reg
файл, а затем дважды щелкните его, чтобы импортировать в реестр. Это создаст действие контекстного меню под названием "Get DLL version" и использует указанный выше скрипт (убедитесь, что вы указали правильный путь к скрипту в тексте ниже, с двойными обратными косыми чертами внутри имени файла):
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Classes\dllfile]
[HKEY_CURRENT_USER\SOFTWARE\Classes\dllfile\shell]
[HKEY_CURRENT_USER\SOFTWARE\Classes\dllfile\shell\DLLVersion]
@="Get DLL version"
[HKEY_CURRENT_USER\SOFTWARE\Classes\dllfile\shell\DLLVersion\command]
@="powershell.exe -ExecutionPolicy Bypass -File \"C:\\Temp\\test.ps1\" \"%1\""
Новый пункт контекстного меню можно использовать немедленно.
решение2
Я не могу предложить многого, поскольку ваша команда почти верна, вы пропустили только одну левую скобку, но я могу рассказать вам, как выполнить пакетную обработку.
(Get-Item "C:\Directory\Application.dll").VersionInfo.ProductVersion
Приведенный выше код получает необходимую вам информацию, Set-Clipboard
принимает конвейерные аргументы, поэтому вы можете передать вывод в командлет:
(Get-Item "C:\Directory\Application.dll").VersionInfo.ProductVersion | Set-Clipboard
Вы также можете использовать псевдонимы, чтобы сделать команду короче:
(gi "Path\to\file.dll").VersionInfo.ProductVersion | Set-Clipboard
gi
является псевдонимом Get-Item
.
По умолчанию Set-Clipboard
очищает текущий буфер обмена. Если вы хотите сохранить текущий буфер обмена, используйте -Append
переключатель.
Я предполагаю, что вы хотите получить версии нескольких DLL-файлов, для этого вы можете использовать команду Get-ChildItem
для вывода списка всех DLL-файлов внутри каталога:
Get-ChildItem -Path "path\to\folder" -File -Force -Recurse -Filter *.dll
Псевдоним:
gci "path\to\folder" -file -fo -r -filt *.dll
Чтобы получить версии каждой DLL:
Get-ChildItem "path\to\folder" -file -force -recurse -filter *.dll | ForEach-Object {$_.VersionInfo.ProductVersion}
Псевдоним ForEach-Object
is %
Получить имя и версию в строке:
Get-ChildItem "path\to\folder" -file -force -recurse -filter *.dll | ForEach-Object {"Path: $($_.FullName), Version: $($_.VersionInfo.ProductVersion)"}
Вышеприведенный код создает массив строк, подобный этому:
Path: C:\Windows\System32\vcruntime140.dll, Version: 14.28.29304.1
Чтобы объединить этот массив в одну большую строку, разделенную символами новой строки:
(Get-ChildItem "path\to\folder" -file -force -recurse -filter *.dll | ForEach-Object {"Path: $($_.FullName), Version: $($_.VersionInfo.ProductVersion)"}) -Join "`r`n"
Наконец, вставьте все это в буфер обмена:
((Get-ChildItem "path\to\folder" -file -force -recurse -filter *.dll | ForEach-Object {"Path: $($_.FullName), Version: $($_.VersionInfo.ProductVersion)"}) -Join "`r`n") | Set-Clipboard
Обернем все это в функцию:
Function Clip-DLLVersion {
param(
[string]$path,
[bool]$append = $false
)
$data = (Get-ChildItem $path -file -force -recurse -filter *.dll | ForEach-Object {"Path: $($_.FullName), Version: $($_.VersionInfo.ProductVersion)"}) -Join "`r`n"
Switch ($append)
{
$true {Set-Clipboard -Value $data -Append}
$false {Set-Clipboard -Value $data}
}
}
Пример использования:
Clip-DLLVersion -path "$Env:WINDIR\System32"
Редактировать
Обновлено в соответствии с комментарием, clip
это не псевдоним Set-Clipboard
, поэтому я исправил псевдоним команды, чтобы сделать его общеприменимым.
Редактировать 1
Исправлено несколько опечаток в коде. Я написал все это на телефоне, поэтому у меня не было возможности запустить, была опечатка в первой команде для получения имен, и я скопировал-вставил эту команду в последующие команды, я не заметил этого до сих пор.
решение3
Вы можете попробовать сделать снимок экрана, используя кнопку Print Screen на клавиатуре. Или просто используйте стороннее программное обеспечение, например Share X. Затем используйте OCR для преобразования в текст.
решение4
Вы можете получить сведения о файле с помощью PowerShell; это работает и в Windows 10:
Например, чтобы получить информацию о файле Autoruns64.exe
, выполните:
(Get-Item "D:\tools\Autoruns64.exe").VersionInfo | format-list * | Clip
Что касается добавления контекстного меню, пользовательСаймонСпохоже, что эта часть была рассмотрена.