【问题标题】:Powershell script to map drives, persistent connection not workingPowershell脚本映射驱动器,持久连接不起作用
【发布时间】:2020-07-05 20:30:26
【问题描述】:

下面的代码允许我在需要时映射适当的网络驱动器。

我遇到的问题是当我重新启动计算机时,映射的驱动器丢失了。所以我需要再次运行脚本。

$Net = New-Object -ComObject WScript.Network  
$Rename = New-Object -ComObject Shell.Application

#### # Map the network drives
$Net.MapNetworkDrive("A:", '\\192.168.1.10\NAS1\Automate')
$Net.MapNetworkDrive("G:", '\\10.0.0.1\NAS1\VidePro')  

timeout 4

#### # Rename everything
Write-Host "Naming all mapped driver correctly"
$rename.NameSpace("A:\").Self.Name = 'AutoMate 1Gbit' 
$rename.NameSpace("G:\").Self.Name = 'VidPro 10Gbit'

不幸的是,我尝试了以下代码,但它不起作用:

$Net.MapNetworkDrive("A:", '\\192.168.1.10\NAS1\Automate' -Persist)
$Net.MapNetworkDrive("A:", '\\192.168.1.10\NAS1\Automate' -Persistant)
$Net.MapNetworkDrive("A:", '\\192.168.1.10\NAS1\Automate', -Persist)
$Net.MapNetworkDrive("A:", '\\192.168.1.10\NAS1\Automate' '-Persist'

我不确定我在这里缺少什么。

作为旁注。上述脚本中没有凭据,因为我通常先登录并登录凭据,然后运行脚本。只是代表我采取了额外的安全措施。

谢谢。

【问题讨论】:

    标签: powershell mapped-drive


    【解决方案1】:

    这应该可以解决问题:

    $NPSDArgs = @{Name       = "A" 
                  PSProvider = "FileSystem"
                  root       = "\\192.168.1.10\NAS1\Automate" 
                  Persist    = $True
                 }
    
    New-PSDrive @NPSDargs
    

    要移除驱动器:

    Remove-PSDrive -Name "A"
    

    HTH

    【讨论】:

    • Festival 认为您非常了解这些信息。我有个问题。可以这样拟合一条线。因为我有很多驱动器需要映射?
    • 例如:New-PSDrive Name = "A", PSProvider = "FileSystem", root = "\\192.168.1.10\NAS1\Automate", Persist = $True 我想要单行的原因是我有很多驱动器要映射。
    • 我也累了:New-PSDrive -Name A FileSystem -Root \\192.168.1.10\NAS1\Automate -PSProvider -Scope Global
    • Arthor,如果您有很多驱动器要映射,您可以将 Name 和 Root 放在哈希表或数组中,然后循环遍历它。
    • 我愿意。但到目前为止,我还没有达到你的水平。但是,我确实有这个不会...我只有 7 个驱动器来映射。 New-PSDrive -Name A FileSystem -Root \\192.168.1.10\NAS1\automate –Persist -Scope Global我认为一切都是正确的。
    【解决方案2】:

    阿瑟,

    以下是如何在循环中执行此操作:

    $MapTable = @{
      "A" = "\\192.168.1.10\NAS1\Automate"
      "B" = "\\192.168.1.11\NAS2\Automate"
      "H" = "\\192.168.1.12\NAS3\Automate"
    }
    
    $MapTable.GetEnumerator() | ForEach-Object {
    
      $NPSDArgs = @{Name       = "$($_.Key)" 
                    PSProvider = "FileSystem"
                    root       = "$($_.Value)" 
                    Persist    = $True
                   }
      
      New-PSDrive @NPSDargs -WhatIf
    
    } #End ForEach-Obj...
    

    当您确定 -WhatIf 符合您的要求时,删除它。

    假设输出:

    如果:对目标“名称:B 提供者:Micro”执行“新驱动器”操作 soft.PowerShell.Core\FileSystem 根目录:\192.168.1.11\NAS2\Automate"。

    如果:对目标“名称:A 提供者:Micro”执行“新驱动器”操作 soft.PowerShell.Core\FileSystem 根目录:\192.168.1.10\NAS1\Automate"。

    如果:对目标“名称:H 提供者:Micro”执行“新驱动器”操作 soft.PowerShell.Core\FileSystem 根目录:\192.168.1.12\NAS3\Automate"。

    您会注意到输出的顺序与 MapTable 的顺序不同。这是哈希表的“功能”。如果您希望以相同的顺序输出,请在表的定义上使用 [ordered] 装饰器,例如$MapTable = [有序]@{...}。

    HTH

    【讨论】:

    • 谢谢你..我会试试这个!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 2016-12-17
    • 2015-07-28
    • 2021-06-04
    • 2010-10-08
    • 1970-01-01
    • 2012-07-24
    相关资源
    最近更新 更多