Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Windows系统脚本编制建议+;程序设计_.net_Ruby_Powershell_Scripting_Ironpython - Fatal编程技术网

.net Windows系统脚本编制建议+;程序设计

.net Windows系统脚本编制建议+;程序设计,.net,ruby,powershell,scripting,ironpython,.net,Ruby,Powershell,Scripting,Ironpython,我刚得到一个项目,我必须在Windows操作系统上执行以下操作: 检测有多少个驱动器(C:D:E: …等)连接到电流 系统 系统标签是什么 每卷 有多少存储空间 (使用和免费)用于每个 驱动力 每个驱动器的格式是什么 (NTFS/FAT32) 有多少文件 在给定目录中的任何一个 驱动力 每个文件大小有多大 文件处理(每个文件都是 大约2GB)我需要做很多事情 类C的fseek()和二进制数据 解析,以及从大到小的endian 转变必须写一些逻辑 代码也是 我是一名经验丰富的C\C++程序员,但我

我刚得到一个项目,我必须在Windows操作系统上执行以下操作:

  • 检测有多少个驱动器(C:D:E: …等)连接到电流 系统
  • 系统标签是什么 每卷
  • 有多少存储空间 (使用和免费)用于每个 驱动力
  • 每个驱动器的格式是什么 (NTFS/FAT32)
  • 有多少文件 在给定目录中的任何一个 驱动力
  • 每个文件大小有多大
  • 文件处理(每个文件都是 大约2GB)我需要做很多事情 类C的fseek()和二进制数据 解析,以及从大到小的endian 转变必须写一些逻辑 代码也是
  • 我是一名经验丰富的C\C++程序员,但我认为现在是开始学习脚本的最佳时机

    我想到的候选对象是:(Python | | Ruby)和PowerShell

    这些是我可以用IronPython+Powershell实现的吗?还是有更好的工具/语言


    PS:PowerShell是否打算取代VBScript?另外,既然C#、WPF和Powershell已经存在,那么VB.net到底有什么好处呢

    除了列表中的第七项之外,使用Powershell和WMI应该很简单,因为这可能是Powershell的自然域。因为前六个列表项不需要其他语言,所以最后一个列表项使用什么语言并不重要。您可能可以使用PS(尽管我从未使用过IO)或任何适合您的工具

    至于你的第二个问题:VBScript可能不会在不久的将来消失,因为在编写用于部署的小脚本时,Windows脚本主机仍然是一个更安全的选择,因为它自98年以来就预装在每个Windows上。Powershell仅包含在Windows 7及更高版本中。话虽如此,Powershell的目标无疑是为了自动化而淘汰WSH和CMD,因为它提供了与上述功能相同的功能以及更多功能(如easy.NET和WMI访问)


    另一方面,VB.NET是Microsoft销售的主要.NET语言之一。它与VBScript几乎没有任何关系,也不是Powershell或WPF的竞争对手(见鬼,这是完全不同的技术)。你可能会看到与C语言的一些趋同,因为这两种语言似乎仍在努力寻找它们的目标市场。尽管如此,当你是一名VB程序员时,VB.NET仍然是切换到.NET的最简单的选择,因为微软不想因为创建了.NET而失去很多VB.NET。

    你可以在IronPython | IronRuby或Powershell中实现这一点。我推荐IronPython,因为它是一种真正的语言(比C#甚至Java都旧),有很多支持和对您需要的.NET API(甚至是COM API)的完全访问


    我建议您阅读这篇回答您确切问题的文章:

    PowerShell可以轻松处理1-6。第7项可能可以在PowerShell中完成,但根据具体情况,可能会有更好的选项


    有关学习PowerShell的一些好信息,请参阅。

    我将给您一个不受欢迎的答案,因为没有其他人添加它:Perl


    如果您作为一名C/C++程序员熟悉Win32 API,那么Perl可能是更简单的方法。它有用于访问Win32 API的模块,对于C/C++程序员来说,Perl非常容易跟上速度。Perl过去一直为我做这项工作。

    至于Perl,Ruby也可以访问所有Win32 API和WMI函数。

    Powershell被设计为Windows的自动化平台。当然,Ruby、Python、Perl、VBScript等都可以完成这项工作,为什么不选择最适合这项工作的工具呢。 以下是获取一些基本驱动器信息的方法:

    $drives = Get-WmiObject -Class  Win32_LogicalDisk | ? {$_.DriveType -eq 3 }
    $drives | select DeviceId,VolumeName,FileSystem,FreeSpace, Size
    
    目录中的文件数

    Get-ChildItem c:\path -Recurse | Measure-Object
    Get-ChildItem c:\path | Measure-Object
    
    提供有关文件大小的信息

    Get-ChildItem c:\path -Recurse |  Measure-Object -Average -Sum 
                                     -Maximum -Property Length
    
    对于文件处理,您可以使用本机cmdlet,例如获取内容或调用并实例化.Net类型。

    我认为PowerShell非常适合此任务,因为它针对此类系统信息检索进行了优化。与C#IMO相比,WMI在PowerShell中非常易于使用(我现在是C#dev)。见鬼,让我们看看这在PowerShell中有多容易:

    #1,2, 3 and 4
    PS> Get-WmiObject Win32_LogicalDisk | 
    >>  Format-Table Name, VolumeName, FileSystem, Size, FreeSpace -auto
    
    Name VolumeName FileSystem         Size    FreeSpace
    ---- ---------- ----------         ----    ---------
    C:              NTFS       160038907904 100353536000
    D:
    E:
    F:   PDC2008    NTFS       160039239680  40155922432
    V:   Vista      NTFS       250056704000  33944559616
    
    #5
    PS> dir <path> -r | where {!$_.PSIsContainer} | Measure-Object
    
    #6
    PS> dir <path> -r | where {!$_.PSIsContainer} | 
    >>  Format-Table Fullname, Length -auto
    
    #1,2,3和4
    PS>获取WmiObject Win32_LogicalDisk|
    >>格式化表名、卷名、文件系统、大小、自由空间-自动
    名称VolumeName文件系统大小释放空间
    ---- ---------- ----------         ----    ---------
    C:NTFS 1600389079004 100353536000
    D:
    E:
    F:PDC2008 NTFS 160039239680 40155922432
    V:Vista NTFS 25005670400033944559616
    #5
    PS>dir-r |其中{!$\uu.PSIsContainer}|度量对象
    #6
    PS>dir-r | where{!$uu.PSIsContainer}|
    >>格式表全名,长度-自动
    

    PowerShell还可以通过使用.NET框架轻松处理#7。有关PowerShell中fseek风格编程的示例,请从第139行开始查看。

    Python是一种比C#或Java更古老的语言,但IronPython肯定不是。即使它变老了,也不会自动让它变好(我也不是说它会让它变得更糟)。还有,我不确定你所说的“真实”语言是什么意思。是的,PowerShell也是真实的。这当然不是虚构的。:)