用于映射驱动器的 Powershell 脚本,持久连接不起作用
Powershell script to map drives, persistent connection not working
下面的代码允许我在需要时映射适当的网络驱动器。
我遇到的问题是当我重新启动计算机时,映射的驱动器丢失了。所以我需要再次 运行 脚本。
$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'
我不确定我在这里遗漏了什么。
作为旁注。上面的脚本中没有凭据,因为我通常先登录并登录凭据,然后 运行 脚本。只是代表我采取的额外安全措施。
谢谢。
这应该可以解决问题:
$NPSDArgs = @{Name = "A"
PSProvider = "FileSystem"
root = "\192.168.1.10\NAS1\Automate"
Persist = $True
}
New-PSDrive @NPSDargs
要删除驱动器:
Remove-PSDrive -Name "A"
HTH
亚瑟,
循环执行的方法如下:
$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。
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 的顺序不同。这是 Hash tables 的一个“特性”。如果您希望以相同的顺序输出,请在 table 的定义上使用 [ordered] 装饰器,例如$MapTable = [有序]@{...}.
HTH
下面的代码允许我在需要时映射适当的网络驱动器。
我遇到的问题是当我重新启动计算机时,映射的驱动器丢失了。所以我需要再次 运行 脚本。
$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'
我不确定我在这里遗漏了什么。
作为旁注。上面的脚本中没有凭据,因为我通常先登录并登录凭据,然后 运行 脚本。只是代表我采取的额外安全措施。
谢谢。
这应该可以解决问题:
$NPSDArgs = @{Name = "A"
PSProvider = "FileSystem"
root = "\192.168.1.10\NAS1\Automate"
Persist = $True
}
New-PSDrive @NPSDargs
要删除驱动器:
Remove-PSDrive -Name "A"
HTH
亚瑟,
循环执行的方法如下:
$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。
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 的顺序不同。这是 Hash tables 的一个“特性”。如果您希望以相同的顺序输出,请在 table 的定义上使用 [ordered] 装饰器,例如$MapTable = [有序]@{...}.
HTH