Powershell删除格式列表中的空行,将结果放入剪贴板并输出txt

Powershell remove blank lines in the format-list, puts the result in the clipboard and outputs the txt

刚学Powershell,找了24个多小时,看了很多文章,还是没有找到解决以下问题的方法(因为我不聪明) ,希望有人能帮忙。

1.如何去除格式列表输出中的空行?

我写了下面的代码来检查文件的哈希值:

powershell -noexit Write-Host '%1';get-filehash -literalpath '%1' -algorithm MD5 | format-list -property algorithm, hash; get-filehash -literalpath '%1' -algorithm SHA1 | format-list -property algorithm, hash

结果如下

D:\Downloads\new 1.txt


Algorithm : MD5
Hash      : B1D91A5CB33FDCD3CF24964769E23BDA





Algorithm : SHA1
Hash      : 748B44A79C7FA38898C0248DE6D1B102A71B36D3

两个结果之间有5行空行,如何缩短到只有1行?

我也试过像这样使用select-object,结果不错,但是对于像SHA512这样的哈希函数,它没有显示完整范围,而是在结束。

powershell -noexit Write-Host '%1';get-filehash -literalpath '%1' -algorithm MD5 | select-object -property algorithm, hash;get-filehash -literalpath '%1' -algorithm SHA1 | select-object -property algorithm, hash;get-filehash -literalpath '%1' -algorithm SHA256| select-object -property algorithm, hash

请注意:

  1. 我需要一行代码来添加到注册表中。
  2. 我在这里看到了一个答案,但对我来说太复杂了。我不知道如何将它合并到我的代码中:Remove empty lines after simple Format-list command

2。如何同时:在Powershell中显示结果,复制到剪贴板并输出txt文件?

如果我在 format-list 后使用“|clip”,它不起作用。

powershell -noexit Write-Host '%1';get-filehash -literalpath '%1' -algorithm MD5 | format-list -property algorithm, hash;get-filehash -literalpath '%1' -algorithm SHA1 | format-list -property algorithm, hash | clip 

3。输出文件

我无法将文件输出到C盘(或者有人知道其他方法吗?),那么Powershell如何将文件输出到另一个可用的驱动器?比如你的D盘被锁了,Powershell会识别并输出文件到E盘。

或者有没有办法打开记事本自动粘贴结果,然后选择是否保存文件?

非常感谢大家的帮助。

如果你想要的只是一个 kinda-sorta 将算法和散列输出到一行的“一个衬里”,这样的事情就可以了 [grin] 。 ..

代码...

Get-ChildItem -LiteralPath $env:TEMP -Filter '*.log' -File | Get-FileHash -Algorithm MD5 | ForEach-Object {'Algo = {0}; Hash = {1}' -f $_.Algorithm, $_.Hash}

它的作用...

  • 抓取要使用的文件
    我从我的临时目录中选择了日志文件。
  • 使用所需的算法
  • 将每个管道传输到Get-FileHash
  • 通过管道传输到 ForEach-Object
  • 使用 -f 字符串格式运算符构建一个字符串
  • 将其发送到屏幕
    您可以根据需要将其发送到其他地方。

输出...

Algo = MD5; Hash = B8D9CD8AEAC35E8C018A9F612196D2F7
Algo = MD5; Hash = 4FF28D9F2ABAC624DC04EA690B613509
Algo = MD5; Hash = FC738758B9ECA9E36BB15C8AEA592BEC
Algo = MD5; Hash = 1C480823E74B761DF4BEE1A5684ACD80
Algo = MD5; Hash = 23088A1A7FB398B077DF7CB52F9925DD
Algo = MD5; Hash = 8679AAAC06D4EE1E80E28C356E650189
Algo = MD5; Hash = 42AB574F9F8D5735E81A0164F1942C20
Algo = MD5; Hash = 36D72201A2B33DC2103B9CEA62502CCF
Algo = MD5; Hash = 730770FAC0461041C756DF7BB500729A
Algo = MD5; Hash = E388F1B0827265FE5BB2DB888A6737A1
Algo = MD5; Hash = 3CFA940E581F8945F7863F4F0DE6F5D9
Algo = MD5; Hash = 8B7BD3ADA2BBF862A486D557BF96A770
Algo = MD5; Hash = 5C7DE92E6914A7FF41A70C30313C2740

我有点困惑你不想要文件名。

#just simple foreach

Gci -File C:\Temp.txt | % { Get-FileHash $_.Fullname -Algorithm MD5; Get-FileHash $_.Fullname -Algorithm SHA1}

#object using select object

$Path = Get-ChildItem C:\Temp
foreach ($i in $Path){
"" | Select-Object @{name='FileName';Expression={($i.FullName)}},
@{Name='MD5';Expression={(Get-FileHash $i.FullName -Algorithm MD5).Hash}},
@{Name='SHA1';Expression={(Get-FileHash $i.FullName -Algorithm SHA1).Hash}}

}

您可以使用 Tee-Object 输出到文件,然后返回管道。除此之外,这是我对此的看法:


PowerShell.exe -Command "
    'MD5','SHA1','SHA256','SHA512' | 
    Foreach-Object { Get-FileHash -LiteralPath 'C:\Users\Abraham\Desktop\atari\cleanmem\New Text Document.txt' -Algorithm `$_ } | 
    Select-Object -Property 'algorithm', 'hash' | 
    Tee-Object -FilePath 'C:\Temp\temp.txt' | Format-List -Property * | clip; Get-Clipboard"

在这种情况下,我更喜欢使用 Clip.exe 而不是 Set-Clipboard 因为它将字符串作为一个整体发送,而不是作为一个对象发送;这将导致在您的剪贴板中设置哈希表,而 Clip 不会。最后,设置到剪贴板后,您可以使用 Get-Clipboard 从中取回内容。这导致:

Algorithm : MD5
Hash      : D41D8CD98F00B204E9800998ECF8427E

Algorithm : SHA1
Hash      : DA39A3EE5E6B4B0D3255BFEF95601890AFD80709

Algorithm : SHA256
Hash      : E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855

Algorithm : SHA512
Hash      : CF83E1357EEFB8BDF1542850D66D8007D620E4050B5715DC83F4A921D36CE9CE47D0D13C5D85F2B0FF8318D2877EEC2F63B931BD474
            17A81A538327AF927DA3E