对Windows系统脚本+编程的建议

时间:2009-05-08 20:35:12

标签: .net ruby powershell scripting ironpython

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

  1. 检测多少驱动器(C:D:E: ..etc)连接到当前 系统
  2. 系统标签是什么 对于每个卷
  3. 多少存储空间 (每个都使用和免费) 驱动器
  4. 每个驱动器的格式 (NTFS / FAT32)
  5. 有多少个文件 在任何一个给定的目录中 驱动器
  6. 每个文件大小有多大
  7. 文件处理(每个文件是 约2GB)我必须做很多事情 C-like fseek()和二进制数据 解析,从大到小端 转换。必须写一些逻辑 代码也是如此。
  8. 我是一位经验丰富的C \ C ++程序员,但我认为这将是我开始学习脚本编写的最佳时机。

    我想到的候选人是:(Python || Ruby)&& PowerShell中。

    那些我可以用IronPython + Powershell完成的事情是什么?或者那里有更好的工具/语言吗?

    PS:PowerShell是否意味着要取代VBScript?另外,现在C#,WPF和Powershell的存在对VB.net有什么好处呢?

7 个答案:

答案 0 :(得分:8)

除了列表中的第七项之外,使用Powershell和WMI这应该是相当简单的,因为这可能是 Powershell的自然域。由于前6个列表项不需要其他语言,因此对于最后一个列表项使用的内容并不重要。你可能可以使用PS(我从未用它做过IO)或者适合你的任何事情。

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

另一方面,VB.NET是Microsoft销售的主要.NET语言之一。它与VBScript几乎没有关系,也不是Powershell或WPF的竞争对手(哎呀,那些是完全不同的技术)。你可能会看到与C#的融合,因为这两种语言似乎仍然很难找到他们想要的市场。当你是一个VB程序员时,VB.NET是转换到.NET的最简单的选择,并且有很多人只是因为他们创建了.NET而不想丢失。

答案 1 :(得分:6)

PowerShell可以轻松处理1-6。 Number 7可以在PowerShell中完成,但根据细节可能有更好的选择。

有关学习PowerShell的一些好消息,请参阅What tutorial do you recommend for learning PowerShell?

答案 2 :(得分:4)

您可以在IronPython | IronRuby或Powershell中执行此操作。我推荐IronPython,因为它是一种真正的语言(早于C#甚至是Java),有很多支持并且可以完全访问你需要的.NET API(甚至是COM API)。

我建议你阅读这篇文章来回答你的确切问题:http://pythonconquerstheuniverse.blogspot.com/2009/04/ironpython-windows-scripting-language.html

答案 3 :(得分:4)

我认为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

PowerShell可以通过其使用.NET Framework的功能轻松处理#7。有关PowerShell中fseek样式编程的示例,请从第139行开始查看此tail-content script

答案 4 :(得分:1)

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,例如get-content或invoke,并实例化.Net类型。

答案 5 :(得分:0)

我会给你不受欢迎的答案,因为没有其他人添加它:Perl。

如果您对作为C / C ++程序员的Win32 API感到满意,Perl可能是更容易的方法。它有用于访问Win32 API的模块,而且Perl很容易让C / C ++程序员快速掌握.Perl过去总是为我完成这项工作。

答案 6 :(得分:0)

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