如何以编程方式添加映射的网络密码(WinXP)?

时间:2008-10-14 00:09:16

标签: windows-xp

在WinXP(SP2)中,您可以存储映射的网络密码......

开始 - >控制面板 - >用户帐户 - >选择一个,然后从相关任务中选择“管理我的网络密码”。

我通常有大约25-30台服务器以这种方式映射到几个不同的帐户/域。问题是,在我们的政策更新期间的某些时候,它们会被消灭,而真正的PITA将它们全部重新添加回来。

有没有人知道如何使用某种脚本以编程方式添加它们?

为了澄清,最终目标不是映射驱动器,而是实际创建该部分中的条目。这允许我们使用Windows身份验证连接到我们的服务器(通过Dameware,SSMS等)。

附录:

Mark的CredWrite小贴士让我来到这里......

pinvoke.net -- CredWrite (advapi32)

这反过来又让我在这里......

Peer Channel Blog -- Application Password Security

两者都证明非常有用。

2 个答案:

答案 0 :(得分:3)

  • cmdkey.exe是该工具的CLI版本 - 但我相信它仅包含在Win2003 +中。我怀疑XP的副本会起作用 - 但可能违反了你的EULA。
  • net use还有一个savecred选项,如果您要映射驱动器
  • 根据此fairly detailed info,CredMgr将其数据库存储在2个位置。仅备份这些文件可能就足够了:
    • %APPDATA%\微软\证书\%UserSID%\证书
    • %USERPROFILE%\ Local Settings \ Application Data \ Microsoft \ Credentials \%UserSID%\ Credentials
  • 有一个API来读取凭据CredEnumerate - 但没有立即明显的方法来添加自己的凭据。几位候选人:
    • CredWrite采用正常CREDENTIAL,但没有任何内容表示存储在当前会话之后。
    • CredUIStoreSSOCredW采用bPersist参数 - 但指定“领域”而不是服务器或网络位置。
编辑:D'哦。我错过了CREDENTIAL的PERSIST成员。它可以是以下值之一:

  • CRED_PERSIST_SESSION: 凭据在登录会话的生命周期中持续存在。它不会对同一用户的其他登录会话可见。在此用户注销并重新登录后,它将不存在。
  • CRED_PERSIST_LOCAL_MACHINE: 该凭据在同一台计算机上的所有后续登录会话中保持不变。它在同一台计算机上对同一用户的其他登录会话可见,而在其他计算机上对此用户的登录会话不可见。 (这是存储在本地设置文件中的内容)
  • CRED_PERSIST_ENTERPRISE: 该凭据在同一台计算机上的所有后续登录会话中保持不变。它在同一台计算机上对同一用户的其他登录会话可见,并在其他计算机上为该用户登录会话。 如果管理员或用户将用户帐户配置为不具有漫游状态,则可以将此选项实现为本地持久凭据。例如,如果用户没有漫游配置文件,则凭证将仅在本地持久存在。 (这是存储在AppData中的内容)

CredWrite似乎是您想要的API。

答案 1 :(得分:1)

NET USE(命令)和WshNetwork.MapNetworkDrive(Windows脚本主机)是编写网络驱动器映射的两种常用方法,它们都允许您指定用户和密码。
我不知道这会如何工作/不能使用存储的密码,除了知道如果你将用户选项留空,它将尝试使用当前用户的凭据。