Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Включить опцию "Сохранения логина-пароля" для Интернет-соединения (http://forum.oszone.net/showthread.php?t=232629)

19w85 12-04-2012 00:58 1897992

Включить опцию "Сохранения логина-пароля" для Интернет-соединения
 
Cабж (на Win7 x64)
В общем требуется при помощи любого скрипта (cmd, vbs, powershell, или любой другой способ) или сторонней консольной утилиты включить опцию в свойствах соединения:
"Сохранять Имя пользователя и Пароль"

Хотел полностью автоматизировать создание нескольких готовых соединений на чистой свеже установленной системе, импортировал rasphone.pbk, а вот при последующем прописывании логина-пароля при помощи найденных аналогичных программок (nircmd setdialuplogon и Dialupass /setpass) неожиданно столкнулся с проблемой, т.к. они могут прописать и сохранить логин и особенно пароль ТОЛЬКО если в свойствах соединения уже активирована опция сохранения логина-пароля.

Долго искал в инете хоть какое-нибудь решение (казалось простой задачи), но к моему удивлению в этот раз так и не нашел...

Petya V4sechkin 12-04-2012 07:32 1898042

Скрипт для создания интернет-соединения

19w85 12-04-2012 08:54 1898076

По теме:
1) CMAK - не вариант абсолютно
2) Скрипт AutoIt на Win7 x64 не работает, т.е. сразу встает на паузу. Да и не скрыто он я так понимаю работает.
3) Оба скрипта vbs, "старый" и "улучшенный", (кстати "старый" скрипт я уже раньше находил и пробовал). Сейчас еще раз попробвал, оба vbs. Оба не работают, видно что "улучшенный" "нажимает" совершенно не те кнопки (видимо опять под XP всё). Да и даже если бы работал, отображаются все действия как если бы это всё делалось вручную.

В "улучшенном" vbs правда есть нужная часть кода (которая тоже работает не так как должна):
Цитата:

'В интернет-соединении ставим галочку "Сохранять имя пользователя и пароль", если не стоит
но даже если исправить (думаю смогу), толку всё равно от этого почти нет, т.к. это почти тот же самый ручной метод, т.к. всё отображается и после доработки, чтобы этот vbs сработал и поставилась галочка на сохранение логина-пароля обязательно в свойствах соединения понадобится, чтобы было включено "Запрашивать логин-пароль", т.к. без этого окна ничего не сработает.

Сабж всё ещё актуален.

Iska 12-04-2012 09:07 1898081

Цитата:

Цитата 19w85
1) CMAK - не вариант абсолютно »

Отчего так?

19w85 12-04-2012 09:11 1898084

Цитата:

Цитата Iska
Отчего так? »

http://forum.oszone.net/post-1094156-7.html

Да и вообще использование в точности настроенного rasphone.pbk мне очень нравится, достаточно гибкий способ. Сохранив всего один файлк имеемь полный комплект нескольких настроенных соединений.

Kazun 08-05-2012 01:26 1912288

Особо не тестировал,но у меня под Windows 7 отработало,как надо.

Код:

$code = @"
const int UNLEN = 256;
const int PWLEN = 256;
const int DNLEN = 15;

[DllImport("Rasapi32.dll ", CharSet=CharSet.Auto, SetLastError=true)]
public static extern uint RasSetCredentials(
  [MarshalAs(UnmanagedType.LPWStr)]
  string lpszPhonebook,
  [MarshalAs(UnmanagedType.LPWStr)]
  string lpszEntry,
  LPRASCREDENTIALS lpCredentials,
  bool fClearCredentials
);

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct LPRASCREDENTIALS {
  public uint dwSize;
  public uint dwMask;
  [MarshalAs(UnmanagedType.ByValTStr, SizeConst = UNLEN + 1)]
  public string szUserName;
  [MarshalAs(UnmanagedType.ByValTStr, SizeConst = PWLEN + 1)]
  public string szPassword;
  [MarshalAs(UnmanagedType.ByValTStr, SizeConst = DNLEN + 1)]
  public string szDomain;
}
"@

Add-Type -MemberDefinition $code -Namespace Ras -Name RasCred

#Путь к Phonebook
$pbk = "$env:APPDATA\Microsoft\Network\Connections\Pbk\rasphone.pbk"
#Название соединения
$con = "MyNet"

$StrCred = New-Object Ras.RasCred+LPRASCREDENTIALS

<#
http://msdn.microsoft.com/en-us/library/aa376730(v=vs.85).aspx
dwMask флаги

3 - 1 -bor 2 (UserName -bor Password)

RASCM_UserName = 0x00000001,
RASCM_Password = 0x00000002,
RASCM_Domain = 0x00000004,
RASCM_DefaultCreds = 0x00000008,
RASCM_PreSharedKey = 0x00000010,
RASCM_ServerPreSharedKey = 0x00000020,
RASCM_DDMPreSharedKey = 0x00000040

#>

$StrCred.dwMask = 3
$StrCred.szUserName = "Test"
$StrCred.szPassword = "Test"

[Ras.RasCred]::RasSetCredentials($pbk,$con,$StrCred,$false)


19w85 08-05-2012 05:55 1912307

Kazun,
Огромное спасибо, работает идеально!

P.S. Как чувствовал, что Вы моя последняя надежда на нормальное решение сабжа...так оно и оказалось

19w85 09-05-2012 00:27 1912844

Kazun,
А можно попросить ещё чуток дополнить скрипт?
Добавить возможность передавать имя соединения при помощи доп. ключа при запуске скрипта, вместо фиксированно заданного тут:
Код:

$con = "MyNet"
Т.е. типа такого:
Код:

powershell .\temp.ps1 -Name "Name Connect"
P.S. В идеале, конечно, передавать "Имя соединения+UserName+Password" но необходимый минимум хотя бы имя соединения.

Kazun 09-05-2012 12:01 1912974

Добавить в верхушку скрипта:

param($Name)

Удалить строку: $con = "MyNet"

И исправить [Ras.RasCred]::RasSetCredentials($pbk,$con,$StrCred,$false) на [Ras.RasCred]::RasSetCredentials($pbk,$name,$StrCred,$false)

Собственно для UserName,Password:
Код:

param(
        $Name,
        $UserName,
        $PassWord
)


19w85 09-05-2012 15:23 1913059

Kazun,
Ещё раз огромное спасибо, теперь сабж можно считать решённым на все 100% :)


Время: 18:29.

Время: 18:29.
© OSzone.net 2001-