Problem Powershell kann nicht auf eine Netzwerkfreigabe zugreifen

5391
alex

Ich verwende PowerShell, um zu überprüfen, ob auf meinen Computern Ports offen sind. Ich habe acht Windows Server 2008 R2-Computer und führe das folgende Skript aus:

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

Ich führe dieses Skript auf den acht Computern von Computer1 aus aus:

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

Auf dem ersten Computer (Computer1 - der Computer, von dem ich das Skript ausführt) bekomme ich eine Ausgabe, aber auf Computer2 bekomme ich:

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 

Warum kann PowerShell die Netzwerkfreigabe nicht sehen? Wie kann ich es reparieren?

2
können Sie \\ computer2 \ txtfiles manuell in das Ausführungsfeld eines anderen Computers eingeben und es erreichen? Keltari vor 13 Jahren 0
Ja, ich kann zu diesem Anteil gehen alex vor 13 Jahren 0
Ich vermute, dass der Befehl auf jedem Rechner versucht, auf c1 und c2 zu laufen ... und c2 nicht weiß, was c1 ist ... versuchen Sie, das Skript so zu ändern, dass es in einer Schleife läuft ... `foreach $ PcName in @ComputerList `. Okay, das ist nur Pseudo-Code, aber die Idee ist, immer nur einen Computernamen an den Befehl zu übergeben. Joe Internet vor 13 Jahren 0
Wenn ich von Computer1 aus laufe: invoke-command -Computername cumputer2 ... erhalte ich dieselbe Fehlermeldung alex vor 13 Jahren 0

1 Antwort auf die Frage

3
Tex Hex

Meine beste Vermutung ist, dass die Ursache dafür ein ausgefallener Kerberos-Multi-Hop ist.

Ich denke, was hier passiert ist, dass die computer2 nicht computer1 zugreifen, da sie den Anteil der computer1 ohne Login (zuzugreifen versucht Null - Sitzung) oder die Computer - Anmeldeinformationen von computer2 ( DOMAIN \ Computer2 $ ). Da dieses Login keine Rechte besitzt, schlägt das Lesen der Textdatei fehl.

Computer1- ->Skript wird unter Ihrem Konto ausgeführt ->Ihr Konto wird für den Zugriff auf Computer1 verwendet. ->Läuft gut

Computer1 ->Skript auf Computer2 ->ausführen PowerShell stellt über Ihr Konto ->eine Verbindung zu WinRM her. Sie haben Zugriffsrechte. WinRM akzeptiert den Anruf. ->PowerShell sendet die Skripts an WinRM. ->WinRM startet das Skript unter seinem Konto (Computer2 $). ->Computer1 empfängt eine eingehende Anforderung an \ txtfiles vom Konto "Computer2 $" ->Dieses Konto hat keine Rechte, daher wird dem Zugriff ->Fehler verweigert

Als ersten Versuch würde ich versuchen, dem Benutzer Jeder Lesezugriff auf die Freigabe zu geben \txtfiles. Wenn dies nicht hilft, versuchen Sie, Ihr Login mit an -credential domain\YourNamezu übergeben Invoke-Command.

Ich denke, die Hauptursache ist Kerberos, da WinRM in diesem Dokument die Delegierung von Benutzeranmeldungen verwenden kann.