如何以编程方式添加映射的网络密码(WinXP)?
问题描述:
在WinXP(SP2)中,您可以存储映射的网络密码...如何以编程方式添加映射的网络密码(WinXP)?
开始 - >控制面板 - >用户帐户 - >选择一个,然后从相关任务中选择“管理我的网络密码”。
我通常有大约25-30台服务器以这种方式映射到几个不同的帐户/域。问题在于,在我们的政策更新期间的某个时刻,他们会被彻底清除,这是一个真正的PITA,可以将它们全部添加回去。
有谁知道如何使用某种脚本以编程方式添加它们?
为了澄清,最终目标不是映射驱动器,而是实际创建该部分中的条目。这使我们能够使用Windows身份验证连接到我们的服务器(通过Dameware,SSMS等)。
附录:
马克的CredWrite尖领我在这里...
pinvoke.net -- CredWrite (advapi32)
这反过来又导致我在这里...
Peer Channel Blog -- Application Password Security
两者都有证明非常有帮助。
答
- cmdkey.exe是该工具的CLI版本 - 但我相信它只包含在Win2003 +中。我怀疑有一个副本可以工作 - 但可能会违反您的EULA。
- net use也有SAVECRED选项,如果你映射驱动器
- 根据这一fairly detailed info的CredMgr并将其存储在2个地点的数据库。这可能是不够的,只是备份这些文件:
- %APPDATA%\微软\证书\%UserSID%\证书
- %USERPROFILE%\本地设置\应用数据\微软\证书\%UserSID%\证书
- 有一个API来读取凭证CredEnumerate - 但没有直接明显的方式来添加自己的。几个候选人:
- CredWrite需要一个正常CREDENTIAL,但没有任何表明存储过去的当前会话。
- CredUIStoreSSOCredW需要一个bPersist参数 - 但指定一个“领域”而不是服务器或网络位置。
编辑:D'oh。我错过了CREDENTIAL的PERSIST成员。它可以是下列值之一:
-
CRED_PERSIST_SESSION
: 凭据持续登录会话的生活。它不会被同一用户的其他登录会话看到。在此用户注销并重新启动后,它将不存在。 -
CRED_PERSIST_LOCAL_MACHINE
: 该凭据在同一台计算机上的所有后续登录会话中保留。在同一台计算机上对同一用户的其他登录会话可见,并且在其他计算机上对此用户登录会话时不可见。 (这是存储在本地设置文件中的内容) -
CRED_PERSIST_ENTERPRISE
: 该凭据在同一台计算机上的所有后续登录会话中保留。它可以在同一台计算机上的同一用户的其他登录会话中看到,并在其他计算机上登录该用户的会话。 如果管理员或用户将用户帐户配置为不具有漫游状态,则可以将此选项实施为本地持久凭据。例如,如果用户没有漫游配置文件,则凭证将只保留在本地。 (这是什么存储到AppData中)
它看起来像CredWrite是你想要的API。
答
NET USE(命令)和WshNetwork.MapNetworkDrive(windows脚本主机)是脚本化网络驱动器映射的两种常用方式,它们都允许您指定用户和密码。
我不知道这将如何工作/如果您不知道如果将用户选项留空,它将尝试使用当前用户的凭据,而不像您所说的那样使用存储的密码。
感谢您的详细回复!备份文件不起作用,您是否有CredWrite的链接? – 2008-10-14 13:21:52