Wie kopiere ich detaillierte Informationen einer Datei (in die Zwischenablage)?

Wie kopiere ich detaillierte Informationen einer Datei (in die Zwischenablage)?

Ich arbeite mit Windows 10.

Ich habe gerade ziemlich viel Arbeit investiert, um ShortSha-Informationen in die Details einer kompilierten Datei zu bekommen. Nun möchte ich diese Informationen in die Zwischenablage kopieren, aber das scheint nicht zu funktionieren, wie Sie aus diesem Screenshot ersehen können:

Bildbeschreibung hier eingeben

Wie Sie sehen, kann ich die Informationen auswählen, aber nicht in die Zwischenablage kopieren, obwohl ich ShortSha gerne kopieren würde, um die Informationen in meinem Versionierungssystem von Git-Extensions wiederzufinden.

Für meine Windows-Version ist dies das Ergebnis des winverBefehls:

Bildbeschreibung hier eingeben

Zu Ihrer Information: Ich bin sicher, dass ich mit einer Windows-Version gearbeitet habe, bei der es möglich war, diese Informationen zu kopieren (das war eineWindows ServerAusführung).

Bearbeiten:
Da ich sicher bin, dass ich dies in einer anderen Windows-Umgebung bereits getan habe, würde ich gerne den genauen Namen dieser Funktion und ein Beispiel für eine solche Windows-Umgebung wissen. Auf diese Weise könnte ich mit der Suche nach einem Patch beginnen.

Edit2: Anmerkung zu PowerShell
In Powershell habe ich folgenden Befehl ausgeführt, der sehr vielversprechend ist:

Get-Item "C:\Directory\Application.dll").VersionInfo.ProductVersion

Falls ich mit dieser Lösung fortfahre, muss ich wissen:

  • Wie verwende ich dieses Ergebnis als Eingabe zum Kopieren in die Zwischenablage ( Set-Clipboard -Value Get-Item "C:\Directory\Application.dll").VersionInfo.ProductVersionfunktioniert nicht)?
  • So integrieren Sie dies in das Windows-Kontextmenü (rechtsklicken und den Befehl für die Datei starten)

Edit3: Anmerkung zu Windows Server
Ich habe festgestellt, dass ich mit dieser Funktion unter Windows Server gearbeitet habe. Ist es möglich, dass diese Funktion unter einer Windows-10-Version nicht funktioniert? Wenn nicht, gibt es einen Patch, mit dem dies funktioniert?

Antwort1

Ihre PowerShell war fast korrekt, es fehlte lediglich ein Klammernpaar:

Set-Clipboard -Value (Get-Item "C:\Directory\Application.dll").VersionInfo.ProductVersion

Um es im Kontextmenü zu verwenden, erstellen Sie eine .ps1Skriptdatei mit folgendem Inhalt. Meine wurde in gespeichert C:\Temp\test.ps1.

$param1=$args[0]
Set-Clipboard -Value (Get-Item "$param1").VersionInfo.ProductVersion

Kopieren Sie nun den folgenden Text in eine .regDatei und doppelklicken Sie darauf, um ihn in die Registrierung zu importieren. Dadurch wird eine Kontextmenüaktion namens „DLL-Version abrufen“ erstellt und das obige Skript verwendet (achten Sie darauf, im folgenden Text den richtigen Pfad zum Skript anzugeben, mit doppelten Backslashs im Dateinamen):

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\""

Der neue Kontextmenüeintrag kann sofort verwendet werden.

Antwort2

Ich kann nicht viel anbieten, da Ihr Befehl fast korrekt ist und Sie nur eine linke Klammer vergessen haben, aber ich kann Ihnen erklären, wie die Stapelverarbeitung funktioniert.

(Get-Item "C:\Directory\Application.dll").VersionInfo.ProductVersion

Das Obige ruft die gewünschten Informationen ab und Set-Clipboardakzeptiert weitergeleitete Argumente, sodass Sie die Ausgabe an das Cmdlet weiterleiten können:

(Get-Item "C:\Directory\Application.dll").VersionInfo.ProductVersion | Set-Clipboard

Sie können auch Aliase verwenden, um den Befehl kürzer zu machen:

(gi "Path\to\file.dll").VersionInfo.ProductVersion | Set-Clipboard

giist ein Alias ​​von Get-Item.

Standardmäßig Set-Clipboardwird die aktuelle Zwischenablage geleert. Wenn Sie die aktuelle Zwischenablage behalten möchten, verwenden Sie -Appendden Schalter.

Ich gehe davon aus, dass Sie die Versionen mehrerer DLLs abrufen möchten. Sie können Get-ChildItemeine Liste aller DLLs im Verzeichnis erstellen:

Get-ChildItem -Path "path\to\folder" -File -Force -Recurse -Filter *.dll

Alias:

gci "path\to\folder" -file -fo -r -filt *.dll

So erhalten Sie die Versionen jeder DLL:

Get-ChildItem "path\to\folder" -file -force -recurse -filter *.dll | ForEach-Object {$_.VersionInfo.ProductVersion}

Alias ​​von ForEach-Objectist: % Holen Sie sich den Namen und die Version in einer Zeichenfolge:

Get-ChildItem "path\to\folder" -file -force -recurse -filter *.dll | ForEach-Object {"Path: $($_.FullName), Version: $($_.VersionInfo.ProductVersion)"}

Das Obige erstellt ein Array von Zeichenfolgen wie dieses:

Path: C:\Windows\System32\vcruntime140.dll, Version: 14.28.29304.1

So fügen Sie dieses Array zu einem riesigen, durch Zeilenumbrüche getrennten String zusammen:

(Get-ChildItem "path\to\folder" -file -force -recurse -filter *.dll | ForEach-Object {"Path: $($_.FullName), Version: $($_.VersionInfo.ProductVersion)"}) -Join "`r`n"

Fügen Sie abschließend das Ganze in die Zwischenablage ein:

((Get-ChildItem "path\to\folder" -file -force -recurse -filter *.dll | ForEach-Object {"Path: $($_.FullName), Version: $($_.VersionInfo.ProductVersion)"}) -Join "`r`n") | Set-Clipboard

Fassen Sie all dies in eine Funktion zusammen:

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}
    } 
}

Anwendungsbeispiel:

Clip-DLLVersion -path "$Env:WINDIR\System32"

Bearbeiten

Gemäß Kommentar aktualisiert, clipist kein Alias ​​von Set-Clipboard, daher habe ich den Alias-Befehl korrigiert, um ihn allgemein anwendbar zu machen.


Bearbeiten 1

Mehrere Tippfehler im Code behoben. Ich habe alles auf einem Telefon geschrieben, sodass ich nicht die Möglichkeit hatte, es auszuführen. Im ersten Befehl zum Abrufen der Namen war ein Tippfehler, und ich habe diesen Befehl in nachfolgende Befehle kopiert und eingefügt. Das ist mir erst jetzt aufgefallen.

Antwort3

Sie können versuchen, einen Screenshot mit der Druck-Taste auf Ihrer Tastatur zu erstellen. Oder verwenden Sie einfach eine Drittanbietersoftware wie Share X. Verwenden Sie dann OCR, um den Screenshot in Text umzuwandeln.

Antwort4

Sie können die Dateidetails mithilfe von PowerShell abrufen; das funktioniert auch unter Windows 10:

Um beispielsweise die Dateiinformationen für abzurufen Autoruns64.exe, führen Sie Folgendes aus:

(Get-Item "D:\tools\Autoruns64.exe").VersionInfo | format-list * | Clip

In Bezug auf die Kontextmenüerweiterung, BenutzerSimonSscheint dieser Teil angesprochen zu sein.

verwandte Informationen