【发布时间】:2021-07-11 12:46:23
【问题描述】:
我编写了一个脚本来映射网络驱动器 (NAS),如果未映射,则取消映射。
# NAS.ps1
If (!(Test-Path N:)) {
$User = "User"
# Pwd in script will be removed later
$Pwd = ConvertTo-SecureString -String "Password" -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $Pwd
New-PSDrive -Name "N" -PSProvider "FileSystem" -Root "\\192.168.1.100\NAS" -Persist -Credential $Credential
} else {
Remove-PSDrive -Name "N"
}
我使用 Windows Powershell ISE 对其进行编辑。当我运行它时,我看到驱动器在我的 Windows 资源管理器窗口中出现或消失。太完美了。
使用 Powershell 运行
但是,当我右键单击NAS.ps1 > "Run with Powershell" 时,PS 窗口会迅速出现/消失,并且驱动器既没有映射也没有取消映射(没有任何变化)。
运行 Powershell,然后运行 ./NAS.ps1
如果我尝试运行 Powershell,使用我的脚本 cd 到文件夹并手动运行它,它会继续安装驱动器:
PS C:\Users\User\Desktop> .\NAS.ps1
Name Used (GB) Free (GB) Provider Root CurrentLocation
---- --------- --------- -------- ---- ---------------
N 1150.44 3201.81 FileSystem \\192.168.1.100\NAS
PS C:\Users\User\Desktop> .\NAS.ps1
Name Used (GB) Free (GB) Provider Root CurrentLocation
---- --------- --------- -------- ---- ---------------
N 1150.44 3201.81 FileSystem \\192.168.1.100\NAS
以管理员身份运行 Powershell,然后运行 ./NAS.ps1
如果我以管理员身份启动 Powershell 并运行我的脚本,则不会显示任何内容:
PS C:\Windows\system32> cd C:\Users\User\Desktop
PS C:\Users\User\Desktop> .\NAS.ps1
PS C:\Users\User\Desktop> .\NAS.ps1
PS C:\Users\User\Desktop> .\NAS.ps1
使用Get-PSDrive 它显示为已安装,我可以 cd 进入它,但从 Win 中。资源管理器窗口没有出现
【问题讨论】:
-
可能是由于您右键单击并运行时系统上设置的执行策略。首先尝试dot sourcing ps1。
. .\NAS.ps1 -
至于运行提升(以管理员身份):不幸的是,提升时建立的驱动器映射在 not 提升时对同一帐户不可见,所以该行为是预期的。