Какие аргументы необходимы для выполнения MSIscsiInitiator_TargetClass: Логин? - PullRequest
1 голос
/ 12 января 2012

Я пытаюсь подключиться к цели 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.

...