Remove-PSDrive不会删除驱动器

时间:2016-12-08 09:30:34

标签: powershell

我使用Powershell> 4在我的电脑上创建和删除驱动器。我将它们本地连接到文件夹或远程驱动器:

New-PSDrive -Name L -PSProvider FileSystem -Root ($userprofile + "\Documents\whatever") -Scope Global -Persist
New-PSDrive -Name I -PSProvider FileSystem -Root \\server\whatever -Scope Global -Persist -Credential $usercred

现在我想更改驱动器并通过以下方式断开连接:

Get-PSDrive -Name L, I -ErrorAction SilentlyContinue | Remove-PSDrive -Scope Global -Force

如果没有-ErrorAction,我会收到以下无法访问的网络驱动器的消息:

Get-PSDrive : The drive was not found. A drive with the name "I" does not exist.
In Zeile:1 Zeichen:1
+ Get-PSDrive -Name L, I -Scope  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (I:String) [Get-PSDrive], DriveNotFoundException
+ FullyQualifiedErrorId : GetDriveNoMatchingDrive,Microsoft.PowerShell.Commands.GetPSDriveCommand

不幸的是,所有驱动器(包括L)都没有被移除或断开连接。我通过net use检查并获取:

Getrennt   I:   \\Server\whatever                    Microsoft Windows Network
OK         L:   \\localhost\C$\...\Documents\wrong   Microsoft Windows Network

您是否知道为什么Remove-PSDrive无法正常工作?

4 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,Remove-PSDrive没有删除任何网络驱动器,也没有输出任何错误,所以我通过使用powershell和好旧的&#34; net use&#34; <修复了这个问题。 / p>

myfib3 <- function(thresh){
        fibseq <- c(1,1)
        counter <- 2
        repeat{
                fibseq <- c(fibseq,fibseq[counter-1]+fibseq[counter])
                counter <- counter+1
                if(fibseq[counter]>thresh){
                        #cat("BREAK NOW...")
                        break
                }
                        }
        return(cat(as.character(fibseq), "BREAK NOW..."))
}

答案 1 :(得分:2)

尝试此方法。我无法单独使用以下命令来使它正常工作,但是最终它们一起正确地清除了映射。我认为在映射驱动器时,它可能与“ Persist”参数有关(但是根据MS文档,在删除时这并不重要)。我使用了Try..Catch块(不是最优雅的块),但是如果您在已删除驱动器之后再次尝试运行驱动器,此方法确实会抱怨驱动器不存在。

try
{
$mappings_to_remove = Get-PSDrive L, I -ErrorAction SilentlyContinue
Remove-PSDrive $mappings_to_remove -PSProvider FileSystem -Scope Global -erroraction SilentlyContinue | Out-Null
Remove-SMBMapping $mappings_to_remove -Force -erroraction SilentlyContinue | Out-Null
}
catch
{
}

答案 2 :(得分:0)

对我来说,一个比较简单的解决方案是改用Remove-SmbMapping和New-SmbMapping。该代码可以正常工作:

Function New-MappedDrive ([Char]$Letter, [string]$Path){
    If (-not (Test-Path -Path $Path)) {
        Write-Host "  Unable to map drive '"$Letter"' - Invalid path" -ForegroundColor Red
    }
    else{
        #Remove existing connections
        if ("$($Letter):" -in (Get-SmbMapping).LocalPath){Remove-SmbMapping -LocalPath $Letter":" -Force | Out-Null}

        New-SmbMapping -LocalPath $Letter":" -RemotePath $Path -Persistent $true | Out-Null
    }
}

答案 3 :(得分:0)

在WinOS中挂载共享有多种方法-利用Get-PSDriveGet-SmbMappingGet-SmbGlobalMappingnet use等列出现有共享。确保以管理员身份运行powershell.exe并运行与创建挂载方式相关的removla命令。您无需触摸注册表即可寻找MountPoints2-这是一个黑客。

删除全球SMB共享

Remove-SmbGlobalMapping K:

删除SMB共享

Remove-SmbMapping K:

删除PS分享

Remove-PSDrive K

净使用量

net use K: /delete