Я хочу, чтобы иметь возможность установить переменную среды системы в Perl, и я написал следующий скрипт (вдохновленный от this idea) для выполнения этого:Как установить переменную системной среды Win32 в Perl?
use Win32;
use Win32::API;
use Win32::OLE qw(in);
my $machine = ".";
my $WMIServices = Win32::OLE->GetObject ("winmgmts:{impersonationLevel=impersonate,(security)}//$machine/root/cimv2") || die;
my $objVariable = $WMIServices->Get("Win32_Environment")->SpawnInstance_;
$objVariable->{Name}="NewOSType";
$objVariable->{UserName} = "<System>";
$objVariable->{VariableValue} = "LAMBDA";
$objVariable->Put_;
Однако, я не являюсь экспертом в Perl, и я хотел бы знать, что эксперты думают об этом коде. Это лучший способ добиться этого?
Я не являюсь экспертом в любой Perl или Windows. Я рекомендую (а также экспертам) «использовать строгие» и «использовать предупреждения» в вашем коде. Это считается хорошей практикой и сэкономит ваше время. –
В Unix вы используете '$ ENV {VARIABLENAME} =" выбранное значение ";'. Я не знаю, почему не нужно делать то же самое в Windows, но отчасти это зависит от того, что вы подразумеваете под «переменной системной среды». Я подозреваю, что вы можете пытаться вмешаться в реестр. Для этого вам понадобятся точные данные от других. –
@Jonathan. По переменной системной среды я имею в виду переменные среды, которые вы найдете в Свойствах компьютеров> Дополнительно> Переменные окружения> Система. Эти переменные сохраняются даже после перезапуска системы; Однако, если мы делаем $ ENV {VARIABLENAME} = "выбранное значение", то эта переменная действительна только для текущего сеанса. – Santhosh