我使用powershell检查我的计算机上是否打开了端口。我有8台Windows 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
}
}
}
我使用以下方法在计算机1的8台计算机上运行此脚本:
Invoke-Command -ComputerName computer1,computer2 -FilePath F:\scripts\port-test.ps1
在第一台计算机上(computer1-我执行脚本的机器)我得到了一个输出但是在计算机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.SetLocationCommand
为什么Powershell不会看到网络共享?我该如何解决?
答案 0 :(得分:5)
听起来像双跳问题 - http://blogs.technet.com/b/askds/archive/2008/06/13/understanding-kerberos-double-hop.aspx - 基本上你是远程连接一台机器,然后尝试访问另一台机器。您的kerberos令牌被视为无效,因为原始目的地和目的地之间有一台机器。
您使用的操作系统(源操作系统和目标操作系统与CredSSP相关)?如果它是Windows 2008或Windows 7,并且问题是双跳,您可以让CredSSP避免它 - http://www.ravichaganti.com/blog/?p=1230
答案 1 :(得分:2)
如果这不是访问控制的问题,那么考虑一下我在服务器上复制文件时遇到的类似问题:
无法找到路径'\\ computer1 \ d $ \ path',因为它不存在。
在文件名前添加 Microsoft.PowerShell.Core\FileSystem::
后可以正常工作:
copy-item "Microsoft.PowerShell.Core\FileSystem::\\computer1\d$\path\installer.msi" "Microsoft.PowerShell.Core\FileSystem::\\computer2\d$\path\installer.msi"
答案 2 :(得分:1)
编辑:
我能够重现这一点,它可能是双跳问题。我按照这里的说明解决了它:
http://blogs.msdn.com/b/clustering/archive/2009/06/25/9803001.aspx
(或Matt给出的链接)
确保computer2和其他计算机能够看到该共享。如果其他机器首先无法看到共享,那么Powershell无法做任何事情。
如需简单检查,请执行以下操作:
Invoke-Command -computer computer2 -script {dir \\computer1\txtfiles}