0

Windows OSで次のことをしなければならないプロジェクトを手に入れました:

  1. 現在のシステムに接続されているドライブ (C: D: E: など) の数を検出する
  2. 各ボリュームのシステム ラベルとは
  3. 各ドライブのストレージ容量 (使用済みと空き容量の両方)
  4. 各ドライブのフォーマット (NTFS/FAT32)
  5. これらのドライブのいずれかの特定のディレクトリにあるファイルの数
  6. 各ファイルサイズの大きさ
  7. ファイル処理 (各ファイルは約 2GB) では、C のような fseek()、バイナリ データの解析、およびビッグ エンディアンからリトルエンディアンへの変換を数多く行う必要があります。いくつかのロジック コードも記述する必要があります。

私は経験豊富な C/C++ プログラマーですが、スクリプトについて学び始めるのに最適な時期だと思いました。

私が考えた候補は: ( Python || Ruby ) && PowerShell.

たとえば、IronPython + Powershell を使用して、これらのようなことを達成できますか? それとも、より良いツール/言語がありますか?

PS: PowerShell は VBScript を置き換えるものですか? また、C#、WPF、および Powershell が存在する今、とにかく VB.net は何の役に立つのでしょうか?

4

7 に答える 7

8

リストの 7 番目の項目を除いて、これはおそらくPowershell自然なドメインであるため、Powershell と WMI を使用することはかなり簡単です。最初の 6 つのリスト項目には別の言語は必要ないため、最後の項目に何を使用しても問題ありません。おそらく、PS (ただし、IO を使用したことはありません) または任意のものを使用できます。

2 番目の質問について: VBScript はおそらく近い将来なくなることはありません。Windows Script Host は、98 以降のすべての Windows にプレインストールされているため、展開用の小さなスクリプトを作成する場合は依然として安全な方法です。Powershell はWindows 7 以降。そうは言っても、Powershell は、自動化の目的で WSH と CMD を廃止することを確実にターゲットにしています。なぜなら、Powershell は前述のものと同じ機能を提供するだけでなく、さらに多くの機能 (.NET や WMI への簡単なアクセスなど) を提供するからです。

一方、VB.NET は、Microsoft が販売する主要な .NET 言語の 1 つです。VBScript とはほとんどまたはまったく関係がなく、Powershell や WPF の競合相手ではありません (これらはまったく異なるテクノロジです)。どちらの言語も意図した市場を見つけるのにまだ少し苦労しているように見えるため、C# との収束が進んでいることがわかるかもしれません。それでも、あなたがVBプログラマーである場合、VB.NETは.NETに切り替える最も簡単な選択肢であり、.NETを作成したという理由だけでMSが失いたくないものがたくさんありました.

于 2009-05-08T20:40:05.727 に答える
6

PowerShellは1〜6を簡単に処理できます。7番目はPowerShellで実行できる可能性がありますが、詳細によってはより適切なオプションがある場合があります。

PowerShellを学習するためにどのチュートリアルをお勧めしますか?を参照してください。PowerShellの学習に関するいくつかの良い情報があります。

于 2009-05-09T01:48:48.717 に答える
4

PowerShell は、この種のシステム情報の取得に最適化されているため、このタスクに最適だと思います。C# IMO とは対照的に、PowerShell から WMI を使用するのは非常に簡単です (そして、私は毎日 C# 開発者です)。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 行目あたりから始まるこの末尾コンテンツ スクリプトを確認してください。

于 2009-05-11T00:34:00.877 に答える
4

これは、IronPython|IronRuby または Powershell で実行できます。IronPython は実際の言語 (C# や Java よりも古い言語) であり、多くのサポートがあり、必要な .NET API (さらには COM API) へのフル アクセスがあるため、IronPython をお勧めします。

あなたの正確な質問に答えるこの記事を読むことをお勧めします: http://pythonconquerstheuniverse.blogspot.com/2009/04/ironpython-windows-scripting-language.html

于 2009-05-08T20:44:40.803 に答える
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

また、ファイル処理には、get-content などのネイティブ コマンドレットを使用したり、.Net 型を呼び出してインスタンス化したりできます。

于 2009-05-10T20:06:14.777 に答える
0

Perlに関しては、RubyもすべてのWin32APIおよびWMI関数にアクセスできます。

于 2009-05-10T08:09:52.500 に答える
0

誰もそれを追加していないので、人気のない答えをあげます: Perl.

C/C++ プログラマーとして Win32 API に慣れている場合は、Perl の方が簡単な方法かもしれません。Win32 API にアクセスするためのモジュールがあり、Perl は C/C++ プログラマーがすぐに理解できるようにするのが非常に簡単です。Perl は過去に常に私のために仕事をしてくれました。

于 2009-05-09T02:23:23.857 に答える