PowerShell输出到文件无法填充文件

时间:2015-09-12 15:50:33

标签: powershell

我快速进入这个,基本上,我试图将此函数的输出发送到文件。该文件正在创建,没有问题,但它总是0字节。它没有传达信息,我也不明白为什么。

首次尝试

function Get-MD5{
<#
.Synopsis
MD5 file hasher
.Description
Generates the MD5 hash of a file you feed in.
.Example
Get-MD5 -FilePath c:\windows\system32\cmd.exe
#>
Param(
    [Parameter(Mandatory=$True)]
    [string]$FilePath = "C:\Windows\system32\cmd.exe"
)
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = [System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::ReadAllBytes($FilePath))).Replace('-', '')
Write-Host `nFile: $FilePath`nMD5: $hash`n | Out-File -FilePath "D:\AyyInfo\ MD5-%computername%-$(((get-date).ToUniversalTime()).ToString("ddMMyyyy_hhmmss")).txt"
}

第二次尝试

function Get-MD5{
<#
.Synopsis
MD5 file hasher
.Description
Generates the MD5 hash of a file you feed in.
.Example
Get-MD5 -FilePath c:\windows\system32\cmd.exe
#>
Param(
    [Parameter(Mandatory=$True)]
    [string]$FilePath = "C:\Windows\system32\cmd.exe"
)
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = [System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::ReadAllBytes($FilePath))).Replace('-', '')
Write-Host `nFile: $FilePath`nMD5: $hash`n > "D:\AyyInfo\ MD5-%computername%-$(((get-date).ToUniversalTime()).ToString("ddMMyyyy_hhmmss")).txt"
}

最后的尝试

function Get-MD5{
<#
.Synopsis
MD5 file hasher
.Description
Generates the MD5 hash of a file you feed in.
.Example
Get-MD5 -FilePath c:\windows\system32\cmd.exe
#>
Param(
    [Parameter(Mandatory=$True)]
    [string]$FilePath = "C:\Windows\system32\cmd.exe"
)
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = [System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::ReadAllBytes($FilePath))).Replace('-', '')
Out-File -FilePath "D:\AyyInfo\ MD5-%computername%-$(((get-date).ToUniversalTime()).ToString("ddMMyyyy_hhmmss")).txt"
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您需要将变量$hash的内容传递给out-file cmdlet:

"$filepath`t$hash" | out-file "D:\AyyInfo\MD5-$($env:computername)-$(((get-date).ToUniversalTime()).ToString("ddMMyyyy_hhmmss")).txt"

我用正确的方法更改了%computername%,使用环境变量构建了一个包含实际计算机名称的字符串。

在你的两个第一个代码中,除了缺少变量管道之外,你不能使用cmdlet write-host,因为它只会强制输出到控制台而不是其他地方。