PowerShell获取域控制器文件哈希值失败问题求助
问题排查与解决
问题根源
你的命令存在两个关键错误:
- 路径格式完全错误:访问域控制器上的共享文件必须使用UNC路径(
\\计算机名\共享名\文件路径),而你写的\$_.Name\netlogon\site\logon.bat既没有双反斜杠开头,也没有指定合法的共享名。 - 变量未正确解析:在计算属性的脚本块中,
$_.Name无法直接嵌入无引号的字符串里,必须用子表达式$($_.Name)确保变量被正确展开。
修正后的命令
考虑到需要验证文件存在性和哈希一致性,推荐使用带错误处理的版本:
Get-ADDomainController -Filter * | Select-Object Name, @{ Name = "Hash"; Expression = { $targetPath = "\\$($_.Name)\Netlogon\site\logon.bat" if (Test-Path -Path $targetPath -PathType Leaf) { try { (Get-FileHash -Path $targetPath -Algorithm SHA256).Hash } catch { "读取失败:$($_.Exception.Message)" } } else { "文件不存在" } } }
关键说明
- Netlogon共享是域控制器默认的脚本共享,路径对应
\\DC名称\Netlogon,如果你的site\logon.bat在其他共享下,需要替换对应的共享名。 - 添加
Test-Path提前检查文件是否存在,避免无意义的报错。 - 加入try/catch块处理权限不足、文件损坏等异常情况,返回明确提示。
内容的提问来源于stack exchange,提问作者CoryC
相关产品推荐
相关产品推荐

