Советы по написанию сценариев Windows + программирование - PullRequest
0 голосов
/ 09 мая 2009

Я только что получил проект, в котором я должен сделать следующее в ОС Windows:

  1. определить, сколько дисков (C: D: E: ..etc) подключены к току система
  2. что такое системные метки за каждый том
  3. сколько памяти (как используемые, так и бесплатные) для каждого из диски
  4. в каком формате каждый диск (NTFS / FAT32)
  5. сколько файлов в данном каталоге в любом из тех диски
  6. насколько большой размер каждого файла
  7. Обработка файлов (каждый файл около 2Гб) где надо много сделать C-подобный fseek () и двоичные данные разбор, и от большого к младшему преобразование. Должен написать немного логики код также.

Я опытный программист на C \ C ++, но я подумал, что сейчас самое время начать изучать скрипты.

Кандидаты, о которых я подумал: (Python || Ruby) && PowerShell.

Это те вещи, которые я могу выполнить, скажем, с IronPython + Powershell? Или есть лучшие инструменты / языки?

PS: PowerShell предназначен для замены VBScript? Кроме того, чем VB.net хорош в любом случае сейчас, когда существуют C #, WPF и Powershell?

Ответы [ 7 ]

8 голосов
/ 09 мая 2009

За исключением седьмого пункта в вашем списке, это должно быть довольно тривиально, используя Powershell и WMI, поскольку это, возможно, естественный домен для Powershell. Поскольку для первых шести элементов списка вам не понадобится другой язык, на самом деле не должно иметь значения, что вы используете для последнего. Вы, вероятно, можете использовать PS (хотя я никогда не делал с ним IO) или что угодно.

Что касается вашего второго вопроса: VBScript, вероятно, не исчезнет в ближайшем будущем, так как хост сценариев Windows все еще более безопасен при написании небольших сценариев для развертывания, поскольку он предустановлен на каждой Windows начиная с 98. включено только в Windows 7 и более поздних версиях. При этом Powershell, безусловно, нацелен на устаревание WSH и CMD для целей автоматизации, поскольку он предлагает те же функции, что и вышеупомянутые, и многие другие (например, простой доступ к .NET и WMI).

VB.NET, с другой стороны, является одним из основных языков .NET, продаваемых Microsoft. Он не имеет никакого отношения к VBScript, не является конкурентом Powershell или WPF (черт возьми, это совершенно разные технологии). Вы можете увидеть некоторую конвергенцию с C #, поскольку оба языка, похоже, все еще не могут найти свой предполагаемый рынок. Тем не менее, VB.NET - это самый простой вариант перехода на .NET, когда вы программист на VB, и многие из них MS не хотели терять только потому, что создали .NET.

6 голосов
/ 09 мая 2009

PowerShell легко справляется с 1-6. Номер 7, вероятно, можно сделать в PowerShell, но в зависимости от деталей возможны более подходящие варианты.

См. Какой учебник вы порекомендуете для изучения PowerShell? , чтобы получить полезную информацию по изучению PowerShell.

4 голосов
/ 11 мая 2009

Я думаю, что PowerShell идеально подходит для этой задачи, поскольку он оптимизирован для такого рода поиска системной информации. WMI исключительно прост в использовании из PowerShell, в отличие от C # IMO (а я - 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 может легко справиться с # 7 благодаря своей способности использовать .NET Framework. Для примера программирования в стиле fseek в PowerShell проверьте этот скрипт с хвостовым содержимым , начиная со строки 139.

4 голосов
/ 09 мая 2009

Вы можете сделать это в IronPython | IronRuby или Powershell. Я бы порекомендовал IronPython, поскольку он является реальным языком (старше C # или даже Java), с большой поддержкой и полным доступом к .NET API, которые вам понадобятся (или даже COM API).

Я бы предложил вам прочитать эту статью, которая отвечает на ваш точный вопрос: http://pythonconquerstheuniverse.blogspot.com/2009/04/ironpython-windows-scripting-language.html

1 голос
/ 11 мая 2009

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

А для обработки файлов вы можете использовать собственные командлеты, такие как get-content или вызывать и создавать экземпляры .Net типов.

0 голосов
/ 10 мая 2009

Что касается Perl, Ruby также имеет доступ ко всем функциям Win32 API и WMI.

0 голосов
/ 09 мая 2009

Тогда я дам непопулярный ответ, поскольку никто не добавил его: Perl.

Если вы знакомы с Win32 API в качестве программиста на C / C ++, Perl может оказаться более простым способом. У него есть модули для доступа к Win32 API, и программисты на C / C ++ довольно легко могут освоить его. Perl всегда выполнял эту работу за меня в прошлом.

...