problema powershell não pode acessar um compartilhamento de rede

2

Eu uso o PowerShell para verificar se alguma porta está aberta em meus computadores. Eu tenho oito máquinas Windows Server 2008 R2 e execute o seguinte script:

$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
        }
    }
}

Eu corro este script nos oito computadores do computador1 usando:

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

No primeiro computador (computador1- a máquina da qual executo o script) recebo uma saída, mas no computador2 fico:

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

Por que o PowerShell não vê o compartilhamento de rede? Como posso consertar isso?

    
por alex 15.08.2011 / 06:15

1 resposta

3

Meu melhor palpite é que a causa disso é um multi-hop do Kerberos com falha.

Eu acho que o que acontece aqui é que o computador2 não pode acessar o computador1 porque ele tenta acessar o compartilhamento de computador1 sem login (sessão Nulo ) ou as credenciais de computador do computador2 ( DOMÍNIO \ Computer2 $ ). Como esse login não tem direitos, a leitura do arquivo de texto falha.

Computador1 -> O script é executado na sua conta -> Sua conta é usada para acessar o Computador1 -> Executa bem

Computador1 -> Executar script no computador2 -> PowerShell se conecta ao WinRM usando sua conta -> Você tem direitos de acesso, portanto o WinRM aceita a chamada -> PowerShell envia os scripts para o WinRM -> WinRM inicia o script sob sua conta (Computer2 $) -> Computer1 vê uma solicitação recebida para \ txtfiles da conta "Computer2 $" -> Esta conta não tem direitos, portanto, o acesso é negado -> Error

Como primeiro, eu tentaria dar ao usuário Everyone acesso de leitura ao compartilhamento \txtfiles . Se isso não ajudar, tente passar seu login com -credential domain\YourName para Invoke-Command .

Eu acho que a causa raiz é relacionada ao Kerberos desde este documento diz que o WinRM é capaz de usar a delegação de logins de usuários.

    
por 15.08.2011 / 19:38