| 网站首页 | 新闻中心 | 系统安全 | 网络安全 | 安全技术 | 下载中心 | 
课件制作网.
收藏本站
设为首页
安全365
如何读取远程计算机上的文本文件?
如何读取远程计算机上的文本文件?
作者:佚名 文章来源:不详 点击数: 更新时间:2007-1-24 11:02:57
问:

您好,脚本专家!如何读取远程计算机上的文本文件?

-- BM

答:

您好,BM。我们得承认:我们在利用您和您的问题来达成我们自己的邪恶目的。本周早些时候我们回答了有关如何读取一组文本文件最后一行的问题;在回答中,我们承诺将会说明如何使用 FileSystemObject 对远程计算机执行同样的功能。这并无恶意,只是为了维护本专栏的精神,除非有人提出有关对远程计算机上的文本文件进行处理的问题,我们是不会做出回答的。于是我们选择了您的问题。

因此,没错,我们在利用您。但如果往好处想,您的问题得到了回答。事实上,让我们先来看一看您的问题。

如您所知,FileSystemObject(用于读写文本文件的对象)的原本用于本地;而事实上,您读过的有关 FileSystemObject 的任何材料差不多都会煞费苦心地指出,不能对远程计算机使用该对象。尽管事实并非完全如此:那是因为 FileSystemObject 可以使用 UNC 路径。假定要读取的文件位于文件共享目录中 (//atl-fs-01/public/myfile.txt)。在这种情况下,打开和读取文本文件就像下面的代码那样简单:

Const ForReading = 1



Set objFSO = CreateObject("Scripting.FileSystemObject")



Set objTextFile = objFSO.OpenTextFile _

    ("//atl-fs-01/public/myfile.txt", ForReading)

strContents = objTextFile.ReadAll

objTextFile.Close



Wscript.Echo strContents

如您所看到的,我们先是定义一个名为 ForReading 的常量并将其值设置为 1。然后创建 FileSystemObject 引用,并调用 OpenTextFile 方法,传递两个参数:要操作的文件的 UNC 路径及常量 ForReading。此时我们已经可以对文件进行所需的任何操作:给您举一个操作文本文件的简单例子:调用 ReadAll 方法将文件的全部内容读入名为 strContents 的变量中。然后关闭文件并回显 strContents 的值,就是这样。

目前,只要待操作的文件位于共享文件夹中,这段代码便很有效。但如果文件不在共享文件夹中,该怎么办呢?在这种情况下,就只能使用管理共享(如 C$)。即使尚未共享文件夹 C:/Public,以下脚本也能够读取文件 MyFile.txt:

Const ForReading = 1



Set objFSO = CreateObject("Scripting.FileSystemObject")



Set objTextFile = objFSO.OpenTextFile _

    ("//atl-fs-01/C$/public/myfile.txt", ForReading)

strContents = objTextFile.ReadAll

objTextFile.Close



Wscript.Echo strContents

如果不使用管理共享,那多半没什么办法。(除非您真的要做出某些疯狂的举动,如使用 WSHController 对象。但那就要另当别论了。)

而这便引出了我们的不可告人目的:如何遍历远程文件夹中的所有文件并使用 FileSystemObject 打开和读取其中的每个文件?嗯,请看下面这种方法:

Const ForReading = 1



Set objFSO = CreateObject("Scripting.FileSystemObject")



strComputer = "atl-fs-01"



Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2")



Set colFileList = objWMIService.ExecQuery _

    ("ASSOCIATORS OF {Win32_Directory.Name='C:/Logs'} Where " _

        & "ResultClass = CIM_DataFile")



For Each objFile In colFileList

    strFilePath = "//" & strComputer & "/C$/Logs/" & _

        objFile.FileName & "." & objFile.Extension

    Set objTextFile = objFSO.OpenTextFile(strFilePath, ForReading)

    strContents = objTextFile.ReadAll

    Wscript.Echo strContents

    objTextFile.Close

Next

这段代码的作用是连接到远程计算机 atl-fs-01,并检索文件夹 C:/Logs 中所有文件的集合。棘手之处是构建每个文件的路径,那是因为我们需要使用与以下类似的管理共享路径:

//atl-fs-01/C$/Logs/MyFile.log

为构建该路径,我们会各使用一些 WMI 和硬编码:

strFilePath = "//" & strComputer & "/C$/Logs/" & _

    objFile.FileName & "." & objFile.Extension

我们要做的是:

以一对 / 开头: //

添加计算机名称://atl-fs-01

添加一个 / 和管理共享路径 C$/Logs/://atl-fs-01/C$/Logs/

添加 WMI FileName 属性(只含文件名部分,不含文件扩展名)://atl-fs-01/C$/Logs/MyFile

在文件名和文件扩展名之间添加句点(因为句点不是 WMI Extension 属性的一部分)://atl-fs-01/C$/Logs/MyFile.

添加 WMI 属性 Extension//atl-fs-01/C$/Logs/MyFile.log

这稍显复杂,但它构建了我们需要的 UNC 路径。而且,每次完成循环时它都会替换新的文件名和新的文件扩展名(计算机名称和文件夹路径从不改变)。于是,我们最终能够打开(并读取)远程文件夹中的每个文件。

顺便向 BM 表示感谢,感谢您让我们利用您的问题。我们欠您一个人情!

【转自世纪安全网 http://www.21safe.com】
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
     
     
     
    CSO们如何应对新技术的安
    普通企业如何应对黑客攻
    企业该如何防范由VoIP引
    浅谈IT如何实现企业的应
    黑客与正规企业是如何串
    如何无限制申请Gmail 2.
    企业如何避免人为因素的
    社会工程学:如何利用黑客
    如何在一个文件被添加到
    如何将“珊瑚虫”好友请

    Copyright © 2006-2008 www.anquan365.com 安全365
    建议使用1024*768分辨率及第三方浏览器对本站进行浏览