Powershell:如何使用不同的用户名/密码映射网络驱动器

时间:2009-10-07 10:23:19

标签: configuration powershell networking hard-drive

后台:假设我使用本地计算机上的以下powershell脚本自动映射某些网络驱动器。

$net = $(New-Object -ComObject WScript.Network);
$net.MapNetworkDrive("p:", "\\papabox\files");

$net = $(New-Object -ComObject WScript.Network);
$net.MapNetworkDrive("q:", "\\quebecbox\files");

## problem -- this one does not work because my username/password
## is different on romeobox
$net = $(New-Object -ComObject WScript.Network);
$net.MapNetworkDrive("r:", "\\romeobox\files");

问题:如何修改脚本以便我也可以连接到romeobox,即使我在romeobox上的用户名/密码与其他两个框的用户名/密码不同?

7 个答案:

答案 0 :(得分:34)

$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("r:", "\\romeobox\files", $false, "domain\user", "password")

应该做的伎俩,

善,

答案 1 :(得分:12)

如果您需要一种方法来存储密码而不将其以纯文本形式存储在脚本或数据文件中,则可以使用DPAPI来保护密码,以便您可以将其安全地存储在文件中并在以后检索它文字例如:

# Stick password into DPAPI storage once - accessible only by current user
Add-Type -assembly System.Security
$passwordBytes = [System.Text.Encoding]::Unicode.GetBytes("Open Sesame")
$entropy = [byte[]](1,2,3,4,5)
$encrytpedData = [System.Security.Cryptography.ProtectedData]::Protect( `
                       $passwordBytes, $entropy, 'CurrentUser')
$encrytpedData | Set-Content -enc byte .\password.bin

# Retrieve and decrypted password
$encrytpedData = Get-Content -enc byte .\password.bin
$unencrytpedData = [System.Security.Cryptography.ProtectedData]::Unprotect( `
                       $encrytpedData, $entropy, 'CurrentUser')
$password = [System.Text.Encoding]::Unicode.GetString($unencrytpedData)
$password

答案 2 :(得分:9)

来这里寻找如何使用PowerShell映射驱动器?

使用PowerShell3.0有一种更简单的方法。 New-PSDrive已使用-persist选项进行了更新。例如。

New-PSDrive -Name U -PSProvider FileSystem -Root \\yourserver\your\folder -Credential yourdomain\username -Persist

过去,New-PSDrive仅影响当前的PowerShell会话。 -persist导致映射与O / S一起注册。见New-PSDrive

要回答原始问题,您可以更改使用的凭据。使用-Credential更改域\用户名会导致Windows提示输入密码。另一种方法是传递PSCredential对象,如下例所示。有关详细信息,请参阅Get-Credential

PS C:\> $User = "mydomain\username"
PS C:\> $PWord = ConvertTo-SecureString -String "mypassword" -AsPlainText -Force
PS C:\> $Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $PWord
PS C:\> New-PSDrive -Name U -PSProvider FileSystem -Root \\domain\some\folder -Credential $Credential -Persist  

答案 3 :(得分:1)

$User = "user"
$PWord = ConvertTo-SecureString -String "password" -AsPlainText -Force
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $PWord
$net = $(New-Object -ComObject WScript.Network)
$net.MapNetworkDrive("r:", "\\server\share")

答案 4 :(得分:1)

我发现这个简单的衬垫在我的情况下工作(很少“开箱即用”的想法;))

(Start-Process -FilePath“C:\ windows \ system32 \ NET.exe”-ArgumentList“USE I:\ Server \ Volume / USER:XXXXX password / persistent:yes”-Wait -PassThru).ExitCode

作为一个额外的奖励,你得到一个很好的exitcode报告。希望有所帮助。

答案 5 :(得分:0)

在我的工作站上,

$net.MapNetworkDrive("k", "\\romeobox\files", $false, "domain\username", "password")

发给我错误:

  

例外lors de l'appel de«MapNetworkDrive»avec«5»参数:«Nomdepériph   ériquelocaldéjàutilisé。

奇怪的是,它并非来自事实K:已经被使用但是从“::”缺失。这是我工作站上的工作原理:

$net.MapNetworkDrive::("k", "\\romeobox\files", $false, "domain\username", "password")

答案 6 :(得分:0)

如果您设置使用Powershell本机(如果有这种情况),则可以使用:

 New-SMBMapping -LocalPath "V:" -RemotePath $NetworkPath -UserName $UserAndDomain -Password $pass 

请参阅:https://docs.microsoft.com/en-us/powershell/module/smbshare/new-smbmapping?view=win10-ps

还有一些附加的块,例如Remove-SMBMapping等。