2013-03-28 70 views
0

我正在使用下面的代碼來獲取驅動器,可用空間和驅動器的總空間。Perl:如何將WMIC輸出捕獲到變量

my @pnames = `wmic /node:"IP" /user:"UserName" /password:"password" LogicalDisk Where "DeviceID='H:'" Get DeviceID,FreeSpace,Size`; 

print "@pnames"; 

上述命令的輸出顯示如下:

DeviceID FreeSpace Size 

H:  51664236544 214753832960 

我如何讀DeviceID$DriveName變量,FreeSpace$FreeSpaceOnDrive變量和Size$TotalSpace變量?

在此先感謝。

+0

替代方法:[DBD :: WMI(http://search.cpan.org/perldoc? DBD :: WMI) – ikegami 2013-03-28 10:21:50

回答

0

捕獲在標量變量的輸出,並與正則表達式檢查它,這樣的事情:

my ($DriveName, $FreeSpaceOnDrive, $TotalSpace); 
my $pnames = `wmic /node:"IP" /user:"UserName" /password:"password" LogicalDisk Where "DeviceID='H:'" Get DeviceID,FreeSpace,Size`; 

if($pnames =~ m!\s+([\w:]+)\s+(\d+)\s+(\d+)!) { 
    ($DriveName, $FreeSpaceOnDrive, $TotalSpace) = ($1, $2, $3); 
} 
1

可能最好使用split來獲取這些值。

我不清楚是否真的在你的輸出中的頭之後一個空行,但如果是這樣,那麼你需要

my ($dev_id, $free_space, $size) = split ' ', $pnames[2]; 

如果沒有空行,然後只需改變split$pnames[1]工作代替。

+0

感謝您的解決方案。它正在工作。 – user1752602 2013-03-28 10:30:30