【问题标题】:How to remove mapped network drive when created with a random letter使用随机字母创建时如何删除映射的网络驱动器
【发布时间】:2020-06-01 23:12:18
【问题描述】:

我正在创建一个带有随机字母的映射网络驱动器,如下所示:

 $drive = Get-ChildItem function:[f-z]: -n | Where { !(Test-Path $_) } | select -First 1
 $PsDrive = New-PSDrive -Name ($drive)[0] -PSProvider "FileSystem" -Root $somePath

此代码运行良好。当我想在脚本末尾删除新创建的映射驱动器时遇到问题。我是怎么做的:

$someEnv = Remove-PSDrive -Name $drive

这里的问题是 $drive 在名称“:”之后添加了冒号。例如,如果 $drive 被称为 M,它将是 "M:" 并且 Remove-PsDrive 失败。

可能会在会话结束时自动删除,但我想明确删除它。

你们知道如何删除这个驱动器吗?

谢谢

【问题讨论】:

  • 您可以使用.TrimEnd() 字符串方法从字符串值的末尾删除不需要的内容。 [咧嘴]
  • 为什么不使用与创建映射驱动器相同的语法? ;-)
  • 另外,New-PSDrive cmdlet 不需要冒号。 [grin] 你可以将它命名为k,它会接受它。所以你的“索引号零”解决方案将起作用。

标签: powershell


【解决方案1】:

您可以使用 Replace 从 $drive 变量中删除 ':'

$drive.Replace(':','')

所以您删除驱动器的代码如下所示

$someEnv = Remove-PSDrive -Name  $drive.Replace(':','')

【讨论】:

    【解决方案2】:

    这是另一种稍微不同的方法,它只使用了 powershell。 [咧嘴一笑]

    它的作用......

    • 创建可能的驱动器号列表
      在这种情况下,它只是 FZ
      == 使用'F'[0] 将字母字符串转换为字符
      == 使用范围运算符将字符强制转换为 ascii 代码数字
      == 从这些代码中生成一个范围
      == 将代码强制转换回字符并将它们填充到数组中
      在 PoSh7 中,您可以使用 'F'..'Z' 创建该数组。 [咧嘴一笑]
    • 抓取正在使用的盘符
    • 根据正在使用的字母过滤候选字母
    • 抓取剩余的第一个字母
    • 设置目标根
      在这种情况下,它是临时目录。
    • 使用该字母创建一个新的 PSDrive
    • 显示新 PSDrive 正在使用的驱动器号
    • 获取该 PSDrive 中前三个项目的目录列表
    • 移除 PSDrive
    • 显示当前文件系统 PSDrives

    代码...

    $CandidateDriveLetters = [char[]]('F'[0]..'Z'[0])
    $InUseDriveLetters = (Get-PSDrive -PSProvider FileSystem).Name
    $1stAvailableDL = ($CandidateDriveLetters |
        Where-Object {
            $_ -notin $InUseDriveLetters
            })[0]
    
    $TargetDriveRoot = $env:TEMP
    $NewDrive = New-PSDrive -Name $1stAvailableDL -PSProvider FileSystem -Root $TargetDriveRoot
    
    $NewDrive.Name
    '=' * 30
    Get-ChildItem -Path ('{0}:' -f $NewDrive.Name) |
        Select-Object -First 3
    
    '=' * 30
    Remove-PSDrive -Name $NewDrive.Name
    
    (Get-PSDrive -PSProvider FileSystem).Name
    

    输出...

    H
    ==============================
    
    
        Directory: C:\Temp
    
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    d-----       2020-04-21   6:39 PM                2ccdytd4
    d-----       2020-04-21   6:39 PM                30u23uyw
    d-----       2020-04-21   6:39 PM                55zoq3fj
    ==============================
    C
    D
    E
    F
    G
    R
    S
    Z
    

    【讨论】:

    • 感谢您的有用解释。
    • @Andrej - 不客气!很高兴能帮上一点忙……[grin]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多