问题 powershell 无法访问网络共享

问题 powershell 无法访问网络共享

我使用 PowerShell 检查我的计算机上是否有任何端口打开。我有八台 Windows Server 2008 R2 计算机并运行以下脚本:

$localhost = get-content env:computername

foreach($port in get-content "\\computer1\txtfiles\ports.txt")
{

    foreach ($hostname in get-content "\\compiuter1\txtfiles\servers.txt")
    {
        try
        {
            $sock = new-object System.Net.Sockets.Socket -ArgumentList $([System.Net.Sockets.AddressFamily]::InterNetwork),$([System.Net.Sockets.SocketType]::Stream),$([System.Net.Sockets.ProtocolType]::Tcp)
            $sock.Connect($hostname,$Port)
            $output = $localhost+","+$hostname+","+$port+","+$sock.Connected
            $output
            $sock.Close()
        }
        catch {
            $output = $localhost+","+$hostname+","+$port+","+$sock.Connected
            $output
        }
    }
}

我使用以下命令在 computer1 中的八台计算机上运行此脚本:

Invoke-Command -ComputerName computer1,computer2 -FilePath F:\scripts\port-test.ps1

在第一台计算机(计算机 1-我执行脚本的机器)上我得到了一个输出,但在计算机 2 上我得到了:

Cannot find path '\\computer1\txtfiles' because it does not exist.
+ CategoryInfo          : ObjectNotFound: (\\computer1\txt
files:String) [Set-Location], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLo
cationCommand

为什么 PowerShell 看不到网络共享?我该如何修复?

答案1

我最好的猜测是,造成这种情况的原因是 Kerberos 多跳失败。

我猜这里发生的事情是,计算机 2 无法访问计算机 1,因为它尝试在没有登录的情况下访问计算机 1 的共享(无效的会话)或 computer2 的计算机凭据(域\Computer2$)。由于此登录没有任何权限,因此读取文本文件失败。

Computer1->脚本在您的帐户下运行->您的帐户用于访问 Computer1->运行良好

计算机 1->在计算机 2 上运行脚本->PowerShell 使用你的帐户连接到 WinRM->你具有访问权限,因此 WinRM 接受调用->PowerShell 将脚本发送到 WinRM ->WinRM 在其帐户 (Computer2$) 下启动脚本->计算机 1 看到来自帐户“Computer2$”的对 \txtfiles 的传入请求->此帐户没有权限,因此访问被拒绝->错误

作为第一步,我会尝试给用户每个人对共享的读取权限\txtfiles。如果这没有帮助,请尝试使用 传递您的登录-credential domain\YourName信息Invoke-Command

我猜根本原因是与 Kerberos 有关,因为这个文件表示 WinRM 能够使用用户登录委派。

相关内容