我只对“DelayedAutoStart”键的值感兴趣,并希望此代码能够工作,但它会打印更多信息。有人能告诉我这里有什么问题吗?
use Win32::Registry;
use Data::Dumper;
$p = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
$p = "SYSTEM\\CurrentControlSet\\Services\\sppsvc";
$main::HKEY_LOCAL_MACHINE->Open($p, $CurrVer) ||
die "Open: $!";
$CurrVer->GetValues(\%vals);
#print Dumper(\%vals);
foreach $k (keys %vals) {
$key = $vals{$k};
if ($$key[0] == "DelayedAutoStart")
{
print "$$key[0] = $$key[2]\n";
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
ServiceSidType = 1
ErrorControl = 1
LaunchProtected = 1
DisplayName = @%SystemRoot%\system32\sppsvc.exe,-101
Start = 2
ImagePath = %SystemRoot%\system32\sppsvc.exe
Description = @%SystemRoot%\system32\sppsvc.exe,-100
DelayedAutoStart = 1
ObjectName = NT AUTHORITY\NetworkService
RequiredPrivileges = SeAuditPrivilege SeChangeNotifyPrivilege
SeCreateGlobalPrivilege SeImpersonatePrivilege
FailureActions = ÇQ? ? ¶ ? ?È? ? Óô??
DependOnService = RpcSs
Type = 16
Run Code Online (Sandbox Code Playgroud)
请将use strict和添加use warnings到您的代码中。他们会给你一个错误,告诉你你使用了错误的比较运算符。在==平等的运营商是比较数字而不是字符串。您需要eqwhich 进行字符串比较。
此外,您通过将哈希值存储在一个名为的变量中$key而使事情变得混乱,并且通常使事情比它们需要的复杂得多!
foreach my $key (keys %vals) {
if ($key eq "DelayedAutoStart")
{
print "$key = $vals{$key}[2]\n";
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当然,您可以直接在散列中查找值。无需遍历键。这几乎是使用哈希的重点:-)
my $key = 'DelayedAutoStart';
if (exists $vals{$key}) {
print "$vals{$key} = $vals{$key}[2]\n";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |