使用脚本映射网络驱动器

使用脚本映射网络驱动器

我正在尝试使用脚本来

  1. 取消驱动器映射
  2. 清除用于映射该驱动器的缓存凭据
  3. 使用不同的用户凭据再次映射驱动器。

在 Windows 7 中,以下脚本对我有用

@echo off
net use Z: /delete /y >nul
net stop LanmanWorkstation /y >nul
net start LanmanWorkstation >nul
timeout 1 >nul
net use Z: \\path\to\directory

此脚本用于卸载映射到 Z 的内容。然后清除用于挂载 z 的缓存凭据。然后使用另一个用户的凭据重新映射驱动器。

当我在 Windows 10 上运行此程序时,net stop 和 net start 会抛出访问被拒绝错误。我尝试创建脚本的快捷方式并将快捷方式设置为始终以管理员身份运行,但此选项在我的框中变灰,可能是组策略设置所致。

我正在尝试找到一种方法来实现相同的取消映射/映射解决方案,目前正在探索通过 powershell 授予的选项。我目前在 powershell 中的尝试是使用

mount -Name "z" -PSProvider filesystem -Root "\\path\to\directory" -Persist

映射需要持久化,以便驱动器出现在 Windows 资源管理器中。当我在 powershell 中运行此命令时,它正常工作,但双击文件以运行它不会映射驱动器,可能是因为访问问题。我是 powershell 新手,仍在学习它,所以我不知道所有可用的选项。有人知道实现我想要的效果的方法吗?

答案1

参见下文 ---

清除 Windows 凭据缓存

删除缓存凭据的实用程序很难找到。它既存储证书数据,也存储用户密码。

打开命令提示符,或在运行命令中输入以下内容

 rundll32.exe keymgr.dll,KRShowKeyMgr

还有一个命令行实用程序:

C:\> cmdkey /?

创建、显示和删除存储的用户名和密码。

从历史上看,驱动器映射是一件麻烦事。嗯,你知道…… ;-}

Net use 并不是唯一的选择,因为您也可以使用 VBS 中的 WScript 或 WMIC 来执行此操作。因此,PowerShell 肯定可以为此执行 WMI。

#PSTip 使用 WScript.Network 创建映射网络驱动器

如何映射驱动器的示例如下:

(New-Object -ComObject WScript.Network).MapNetworkDrive('Z:','\\server\folder')

这不会永久映射驱动器。换句话说,驱动器将在重新启动或用户注销后消失。为了确保驱动器映射是持久的,应该添加第三个参数 - 设置为 true 的布尔值:

(New-Object -ComObject WScript.Network).MapNetworkDrive('Z:','\\server\folder',$true)

使用 -persist 开关是用于驱动器粘性的 PowerShell 选项,但自 v3 以来,您也有 Smb cmdlet。

Get-Command -Name '*smb*'

CommandType     Name                   Version    Source
-----------     ----                   -------    ------
...         
Function        Get-SmbGlobalMapping   2.0.0.0    SmbShare
Function        Get-SmbMapping         2.0.0.0    SmbShare
...        
Function        Get-SmbShare           2.0.0.0    SmbShare
Function        Get-SmbShareAccess     2.0.0.0    SmbShare
....
Function        New-SmbMapping         2.0.0.0    SmbShare
...        
Function        New-SmbShare           2.0.0.0    SmbShare
...            
Function        Remove-SmbShare        2.0.0.0    SmbShare
...           
Function        Set-SmbShare           2.0.0.0    SmbShare
...

也可以看看: Powershell:在远程计算机上映射/取消映射网络驱动器

至于这个...

我在 powershell 中运行它,但是双击文件来运行它并没有映射驱动器,可能是因为访问问题。

…这不是什么。.ps1 默认与记事本或其他文本编辑器关联。这是我设计的。当然,您可以更改该关联,但不要这样做。用户几乎可以双击任何东西,这可能会给您和您的组织带来一系列实际的安全/风险管理/运营问题。

有多种方式可以双击运行(需要/不需要提升权限):

  1. 整个协会的事情,不要那样做。
  2. 从 bat/cmd 文件调用.ps1。

虽然我一直都这么认为,双击运行 .bat、.vbs、.cmd 甚至直接运行都是一件坏事,这在 PowerShell 出现之前就已经存在了。然而,行业已经养成了这种习惯,因此很难让人们改掉它。

  1. 创建自定义快捷方式,正确配置为双击运行。

例子:

# specify the path to your PowerShell script
$ScriptPath = "C:\test\test.ps1"

# create a lnk file
$shortcutPath = [System.IO.Path]::ChangeExtension($ScriptPath, "lnk")
$filename = [System.IO.Path]::GetFileName($ScriptPath)

# create a new shortcut
$shell = New-Object -ComObject WScript.Shell
$scut = $shell.CreateShortcut($shortcutPath)

# launch the script with powershell.exe:
$scut.TargetPath = "powershell.exe"

# skip profile scripts and enable execution policy for this one call
# IMPORTANT: specify only the script file name, not the complete path
$scut.Arguments = "-noprofile -executionpolicy bypass -file ""$filename"""

# IMPORTANT: leave the working directory empty. This way, the 
# shortcut uses relative paths 
$scut.WorkingDirectory = ""

# optinally specify a nice icon
$scut.IconLocation = "$env:windir\system32\shell32.dll,162"

# save shortcut file
$scut.Save()

# open shortcut file in File Explorer
explorer.exe /select, $ShortcutPath
  1. 使用此 MS PowerShellGallery.com 工具将我们的脚本转换为 .exe。

PS2EXE-GUI:使用 GUI 将 PowerShell 脚本“转换”为 EXE 文件

所以,你有选择。选择哪一个取决于运营津贴等。

相关内容