使用腳本映射網路驅動器

使用腳本映射網路驅動器

我正在嘗試使用腳本

  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 的內容。然後使用其他使用者的憑證重新映射磁碟機。

當我在 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 使用並不是唯一的選擇,因為您也可以使用 VBS 或 WMIC 中的 WScript 來執行此操作。因此,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 文件

所以,你有選擇。您選擇哪一個取決於營運津貼等。

相關內容