Powershell远程脚本错误CryptAcquireContext期间出错
Posted
技术标签:
【中文标题】Powershell远程脚本错误CryptAcquireContext期间出错【英文标题】:Powershell remote script error Error during CryptAcquireContext 【发布时间】:2014-04-07 14:24:36 【问题描述】:我只是用 invoke-command -computer [servername] -scriptblock powershell.exe D:\test\script.ps1 运行一个简单的脚本
如果我在框中手动运行脚本,然后再次运行远程脚本,则错误不再出现,但我不喜欢手动登录框并运行脚本才能修复此错误,尤其是使用这么多服务器。谁可以帮我这个事。谢谢
CryptAcquireContext 期间出错。 [服务器名称] : 错误消息:请求的操作无法完成。必须信任计算机才能进行委派,并且必须将当前用户帐户配置为允许委派。 错误代码:80090345
在获取错误部分的服务器上运行的脚本
$fciv = "D:\test\fciv.exe"
$fcivLog = "D:\test\fcivLog.txt"
$xmlPath = "D:\test\server.xml"
& $fciv -v -bp "\\servername\folder1" -XML $xmlPath | Out-File $fcivLog
【问题讨论】:
我发布了运行 fciv.exe 工具的脚本 您知道错误是来自 PowerShell 远程处理功能,还是来自fciv.exe
工具?
我认为它可能来自 fciv.exe 工具,因为它的输出保存在有错误的日志中:( 脚本在框中手动运行良好,如果我这样做一次,远程脚本运行良好。我不知道如果脚本不是首先在每个框中手动运行,为什么会出现错误。
您对这个脚本的最终目标是什么?验证一堆文件的哈希值?可能有更好的方法来做到这一点。例如,Windows 8.1 中的 PowerShell 包含一个Get-FileHash
命令。
是的,正在验证文件的哈希值,但我正在使用的服务器在 windows 2003 和 2008 服务器上运行,它只有 powershell 2.0,所以我真的很有限。
【参考方案1】:
这是一个 PowerShell 函数,它应该适用于 PowerShell 2.0 版,用于计算 MD5 哈希:
function Get-MD5FileHash
[CmdletBinding()]
param (
[string] $Path
)
$MD5 = [System.Security.Cryptography.MD5]::Create();
$Stream = [System.IO.File]::OpenRead($Path);
$ByteArray = $MD5.ComputeHash($Stream);
[System.BitConverter]::ToString($ByteArray).Replace('-','').ToLower();
$Stream.Dispose();
Get-MD5FileHash -Path C:\test\test.xlsx;
我在 Windows 8.1 上的 PowerShell 4.0 上对其进行了测试,效果很好!
【讨论】:
这可以做递归散列吗?我的目标是能够检查每个服务器中的所有文件夹/文件是否相同,这就是我使用 fciv.exe 工具的原因,因为它输出 xml 文件中的哈希值,我可以用它来比较哈希值 这只是一个哈希,递归取决于你。像gci <path> -recurse|%$hash = Get-MD5FileHash $_.FullName;New-Object PSObject -Property @File=$_.FullName;Hash=$hash|Export-CSV C:\Path\File,csv -notype
这样的东西,然后当您在下一个服务器上运行它时,导入 CSV 并将该服务器的文件的哈希值与 CSV 作为参考进行比较。运行相同的东西,但为其分配一个变量而不是将其输出到 CSV,然后为两者做一个比较对象将是最简单的。
很好的建议,@TheMadTechnician。【参考方案2】:
这个问题很老了,已经找到了解决方法。但它仍然没有解决使用 CryptAcquireContext 的程序委托的主要问题
我在使用另一个程序(BiosConfigUtility,来自 HP)时遇到了同样的问题。
我通过允许我的计算机和远程计算机之间的委派解决了这个问题。
在您的客户端上启用委托:
Enable-WSManCredSSP -Role Client -DelegateComputer host.domain.com -Force
在远程计算机上启用委派:
Enable-WSManCredSSP -Role Server –Force
查看此帖子:https://devblogs.microsoft.com/scripting/enable-powershell-second-hop-functionality-with-credssp/ 了解更多信息
【讨论】:
以上是关于Powershell远程脚本错误CryptAcquireContext期间出错的主要内容,如果未能解决你的问题,请参考以下文章
在 C# 中使用不同的凭据调用远程 powershell 脚本
检查是不是通过 Powershell 远程启用了 CredSSP
Powershell远程在Azure A7虚拟机执行Java JVM失败