New-PSDrive 的“-Persist”标志不起作用:重新启动时驱动器被删除

Xav*_*eña 3 powershell

该脚本正确安装了驱动器,但重新启动计算机后驱动器未保留:

\n
function RemapDrive {\n    param(      \n        $DriveLetter,\n        $FullPath,\n        $Credential     \n    )\n    \n    Write-Host "Trying to remove $DriveLetter in case it already exists ..."    \n    # $DriveLetter must be concatenated with ":" for the command to work\n    net use "${DriveLetter}:" /del\n    \n    ## $DriveLetter cannot contain ":"\n    $psDrive = New-PSDrive -Name "$DriveLetter" -PSProvider "FileSystem" -Root "$FullPath" -Credential $Credential -Scope "Global" -Persist\n    \n    Write-Host "$DriveLetter was successfully added !"  \n}\n\nfunction BuildCredential {\n    param (\n        $Username,\n        $Password\n    )\n    $pass = ConvertTo-SecureString $Password -AsPlainText -Force\n    $credential = New-Object System.Management.Automation.PSCredential ($Username, $pass)\n    return $credential\n}\n\n$credential = (BuildCredential -Username "xxxxxx" -Password "yyyyyy")[-1]\n\nRemapDrive -DriveLetter "X" -FullPath "\\\\my-server\\x" -Credential $credential\n\n
Run Code Online (Sandbox Code Playgroud)\n

我发现了什么:

\n
\n

\xe2\x80\x9c当您在本地范围内设置命令时(即,没有点源),Persist 参数不会在运行命令的范围之外保留 PSDrive 的创建。如果您在脚本内运行 New-PSDrive,并且希望新驱动器无限期地保留,则必须对该脚本进行点源化。为了获得最佳结果,要强制保留新驱动器,除了将 Persist 添加到命令中之外,还应指定 Global 作为 Scope 参数的值。\xe2\x80\x9d

\n
\n

我尝试使用“. .\\my-script.ps1”执行脚本(对脚本进行点源?),但结果是相同的。

\n

尝试使用“网络使用”和注册表来尝试添加网络驱动器也将我带入了死胡同。

\n
\n

眼镜:

\n

Windows 10 家庭版

\n

Powershell版本:

\n
Major  Minor  Build  Revision\n-----  -----  -----  --------\n5      1      18362  1171\n
Run Code Online (Sandbox Code Playgroud)\n

Cpt*_*ale 5

基本上,New-PSDrive没有/SAVECRED来自 的参数net use,并且不会以运行脚本的用户以外的用户身份持久映射驱动器。

有三种方法可以处理这个问题:

  1. [推荐]修复文件共享权限,而不是使用单独的用户名/密码,然后使用New-PSDrive -Name "$DriveLetter" -PSProvider "FileSystem" -Root "$FullPath" -Scope 'Global' -Persist无凭据标志。这假设您的文件共享允许 kerberos 登录,因此在某些边缘情况下可能不起作用。
  2. 使用net use,并包含用户名、密码/persistent:yes/savecred。这可以在 powershell 中完成,没有任何问题。
  3. 设置启动时必须运行的 powershell 脚本。
  4. 设置您的脚本以使用凭证管理器 - 请参阅此处的答案
  • 安装 CredentialManager powershell 模块
  • HKCU\Network\[drive letter]\ConnectionType = 1
  • HKCU\Network\[drive letter]\DeferFlags= 4