我写了一个脚本来映射一个网络驱动器(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运行
但是,当我右键单击NAS.ps1 >“right”时,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运行为Admin . /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进入它,但从胜利。窗口,它不会出现
发布于 2021-07-10 14:47:20
解决方案是在映射驱动器时使用-Scope Global,并使用net use来不映射它。
工作代码:
# NAS
Set-StrictMode -Version 2.0
If (!(Test-Path N:)) {
$User = "user"
$Pswd = ConvertTo-SecureString -String "Password" -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $Pswd
New-PSDrive -Name "N" -Root "\\192.168.1.100\NAS" -Credential $Credential -PSProvider "FileSystem" -Persist -Scope Global
} else {
Net Use "N:" /delete
}发布于 2021-07-10 12:09:30
好的,第一个问题是你是否设置了执行策略?
默认情况下,不允许执行脚本。
你可以用这个cmdlet做这件事。
# To configure execution policy
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
# To check execution policy
Get-ExecutionPolicy -List第二件看起来很糟糕的事情是$pwd $pwd,这是一个定义当前路径的系统默认变量。更好的用户$Pass或$Pword或$Pswd等。
最后一个问题,你在做什么新的-PSDrive?
我为什么要问。因为我知道,PSDrive只为当前的PowerShell会话映射。这将不会显示您的驱动器像映射驱动器。您可以使用它复制文件或执行操作。但是,当您关闭此PowerShell会话时,映射将被删除。
这与“网络使用”不同,实际上您可以这样做
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("n:", "\\192.168.1.100\NAS", $false, $User, $password)或者旧的时尚方式:
$script = 'net use N: \\192.168.1.100\NAS /persistent:yes /u:' + $User + ' ' + $Password
Invoke-Expression $scripthttps://stackoverflow.com/questions/68326782
复制相似问题