2011-08-15 44 views
3

我使用powershell检查端口是否在我的计算机上打开。我有8个窗口2008 R2机器和我运行下面的脚本:Powershell无权访问网络共享

$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 

} 
} 

}

我使用运行8的计算机上运行此脚本从电脑1:

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

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

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

这两个地址应该是不同的? '\\ computer1 \ txtfiles'!= '\\ compiuter1 \ txtfiles' – JohnL

回答

1

编辑:

我能够重现这一点,它可以是双跳的问题。我解决了它按照这里的说明:

http://blogs.msdn.com/b/clustering/archive/2009/06/25/9803001.aspx

(或马特给了链接)


确保电脑2和其它计算机都能够看到该共享。如果其他机器无法首先查看共享,Powershell无法做任何事情。

对于一个简单的检查做:

Invoke-Command -computer computer2 -script {dir \\computer1\txtfiles} 
+0

他们可以看到股份 – alex

+0

其不工作的方式 – alex

4

听起来像双跳问题 - 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

HTH, 马特

+0

因为我写了我有Windows 2008 R2。请阅读我的帖子。我没有在这里使用双跳这里! – alex

+0

对不起,您确实写过,我想您需要配置CredSSP。要明确Double Hop不是你使用的东西,并且你在这里写的每一件东西都指向这个问题(尤其是Manojlds给你的代码不起作用。) – Matt

+0

第一行:我有8台Windows 2008 R2机器。双跳是:http://www.ravichaganti.com/blog/?p = 1230读它。但只是为了确定我不喜欢它。并没有帮助。 – alex

1

如果不是与访问控制的问题

:它在文件名前添加 Microsoft.PowerShell.Core\FileSystem::

Cannot find path '\\computer1\d$\path' because it does not exist.

作品:,然后用这个错误复制文件中的服务器时需要考虑我面临着类似的问题

copy-item "Microsoft.PowerShell.Core\FileSystem::\\computer1\d$\path\installer.msi" "Microsoft.PowerShell.Core\FileSystem::\\computer2\d$\path\installer.msi"