Я пытаюсь подключиться к цели iSCSI через WMI (класс WMI\MSIscsiInitiator_TargetClass
, который распространяется вместе с инициатором программного обеспечения Microsoft), но всегда получаю общий сбой (80041001). Вот мой код:
var mgmts = GetObject("winmgmts:\\\\.\\root\\WMI");
function login (path, login, passwd) {
var portal = mgmts.Get("MSIscsiInitiator_Portal").SpawnInstance_(),
target = mgmts.Get("MSIscsiInitiator_TargetClass"
).SpawnInstance_(),
args = target.Methods_("Login").InParameters.SpawnInstance_(),
options = mgmts.Get("MSIscsiInitiator_TargetLoginOptions"
).SpawnInstance_();
target.TargetName = path;
target.Put_();
with ( portal ) {
Address = '10.0.0.100';
Port = 3260;
Index = 1;
SymbolicName = 'default';
Put_();
};
args.TargetPortal = portal;
args.IsPersistent = false;
with ( options ) {
HeaderDigest = 1; // CRC32C
DataDigest = 1; // CRC32C
AuthType = 1; // CHAP
Username = login.split('');
Password = passwd.split('');
InformationSpecified = 0xE3; // 227 = 11100011 !! 0x67 = 1100111
if ( ! ( login && passwd ) ) {
AuthType = 0;
// 0000011;
InformationSpecified = InformationSpecified ^ 0x03;
};
DefaultTime2Retain = 0;
DefaultTime2Wait = 0;
LoginFlags = 10; // 1010
MaximumConnections = 0;
Version = 0;
};
args.LoginOptions = options;
return target.ExecMethod_("Login", args); // <- this line fails
}
используя вот так:
login('iqn.2004-04.com.qnap:ts-859proplus:iscsi.test.c620aa',
'test', 'verylongpassword');
Что не так?
P.S: та же задача с iscsicli.exe
var portal_parameter = '10.0.0.100 3260';
function login (path, login, passwd) {
shell.run('iscsicli AddTargetPortal' +
portal_parameter +
' * * * * * * * * * * * *',
0, true);
var auth = '1'; // CHAP
if ( ! ( login && passwd ) ) {
auth = '0'; // NO
login = '*';
passwd = '*';
};
shell.run('iscsicli LoginTarget ' +
path + ' T ' + // PNP
portal_parameter +
' * * * * 1 1 * * * ' +
login + ' ' + passwd + ' ' + auth + ' * 0',
0, true);
}
работает (без проверки результата), но мне нужен WMI.