Powershell New-PSDrive 在登录之间保留

标签 powershell network-drive

我正在使用 New-PSDrive 来映射网络驱动器。我的问题是,尽管使用了 -Persist 和 -Scope Global 参数,但用户下次登录 Windows 时驱动器不再显示。驱动器需要凭据才能访问,我将其传递到 New-PSDrive 命令中。我可以在命令行中使用 net use 注销并登录后看到驱动器仍然存在,但驱动器不可用。我相信可能发生的情况是 Windows 不存储凭据,因此无法重新连接,但注销和登录后驱动器根本不会显示在 Windows 资源管理器中。我正在寻找一种方法来保留驱动器,就像我通过 Windows 文件资源管理器中的“映射网络驱动器”选项创建它们一样,并在选择使用不同的凭据后选中“记住我的凭据”选项。这在 Powershell 中可能吗?如果没有,是否有另一种 Windows 脚本语言支持此功能?这是我的代码:

#iterate through array of connection information and map drives
foreach ($connection in $connections)
{
    #split out array into variables
    $driveletter,$key,$account,$location = $connection

    $acctKey = ConvertTo-SecureString -String $key -AsPlainText -Force
    $credential = New-Object System.Management.Automation.PSCredential -ArgumentList $account, $acctKey
    New-PSDrive -Name $driveletter -PSProvider FileSystem -Root $location -Scope Global -Credential $credential -Persist -ErrorAction SilentlyContinue
}

最佳答案

我在使用我创建的驱动器映射脚本时遇到了同样的问题。凭据不会保存,驱动器从文件资源管理器中消失,但在网络使用中显示为不可用。 PowerShell 似乎没有用于访问凭据管理器的内置方法。我还应该提到,我映射的驱动器与主机位于不同的域中,并通过 VPN 访问。

对于凭证管理,我将此模块推送到需要运行此脚本的所有工作站: https://www.powershellgallery.com/packages/CredentialManager/2.0 这使您能够从 PowerShell 中将凭据保存到 Windows 凭据管理器。

我还创建了一个自定义 WPF 表单,该表单仍然可以安全地获取凭据(与答案无关,但我只是需要 GUI 的更大灵活性)。

这使我能够安全地获取和保存凭据,但是在重新启动或注销登录后,驱动器仍然从文件资源管理器中消失,并在网络使用中显示为不可用。

然后我开始思考,当您通过 net use 使用/persist 和/savecred 映射网络驱动器或通过文件资源管理器并勾选记住密码框时会发生什么?所以我检查了注册表。

HKCU\Network\[驱动器盘符]

有 2 个不正确的值控制文件资源管理器如何使用和显示映射驱动器。

ConnectionType 和 DeferFlags。

我注意到,当通过 New-PSDrive 映射时,这两个值未正确设置。因此,在成功映射驱动器并将凭据成功保存到凭据管理器后,在我的脚本中,我将 ConnectionType 设置为 1,将 DeferFlags 设置为 4。

现在,重新启动后,驱动器将保留在文件资源管理器中,并且在连接到 VPN 并访问驱动器时,无需输入密码即可恢复连接。希望这对某人有帮助。

关于Powershell New-PSDrive 在登录之间保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49201332/

相关文章:

azure - Set-AzContext 在运行函数的所有实例中设置上下文

python - 当我尝试导入当前工作目录中的模块时引发 ModuleNotFoundError

来自外部创建的文件的 python pyinotify 事件

apache - 使用 php open dir 访问网络驱动器

powershell - 如何检测 Powershell 中的 Powershell 嵌套?

azure - 通过 Azure Dev Ops API 调用创建分支时是否可以 checkin DLL?

powershell - 方法调用失败,因为 [System.__ComObject] 不包含名为 'Click' 的方法

powershell - 使用 Start-Process 和 WaitForExit 而不是 -Wait 获取 ExitCode

linux - 在 Linux 中映射 NTFS 和 MVFS 文件系统

vb.net - 使用此函数映射网络驱动器时 "R"c 是什么意思