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

问题描述:

背景:假设我从本地机器使用以下PowerShell脚本来自动映射某些网络驱动器。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我的用户名/密码与其他两个箱子的不同?

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

应该做的伎俩,

善良,

+0

出于好奇,$ false的目的是什么,可能是返回值?看着它,但无法找到MapNetworkDrive的文档... – Nagev 2018-01-04 11:00:46

这应该工作:

$net = $(New-Object -ComObject WScript.Network) 
$net.MapNetworkDrive("r:", "\\romeobox\files",,"username","password") 
+0

谢谢,只是一个说明:“用户名”之前缺少的参数导致PS抱怨。除此之外,它的作品! – dreftymac 2009-10-07 10:56:30

+0

这个答案包含一个应该纠正的错误。它可能会混淆经验较少的用户。 – Kris 2017-04-21 01:08:44

如果您需要一种方法来存储密码,而不把它在脚本或数据文件中以纯文本形式显示,您可以使用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 
+0

+1好东西;感谢您的信息,基思 – 2009-10-08 11:17:07

来到这里寻找如何利用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 
+2

我认为现在可能有一种更简单的方式来获取凭据:'$ Credential = Get-Credential -Credential“domain \ user”'。这将提示输入已填充用户名字段的密码。 – SeanKilleen 2014-01-04 08:01:32

$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") 

我发现这个简单的一个垫片,我的情况下工作(有点 “开箱即用” 的思想;))

(开始处理-FilePath“C:\ WINDOWS \ SYSTEM32 \ NET.EXE” -ArgumentList “USE I:\服务器\卷/ USER:XXXXX 密码 /持久:是” -Wait -passThru).ExitCode

而作为额外的奖励,你会得到一个很好的退出码报告关闭。希望有所帮助。

在我的工作站,

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

送我的错误:

异常的LOR DE L'APPEL德«MapNetworkDrive»AVEC«5»参数(S):«喃德PERIPH érique当地déjàutilisé。

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

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

是的,如果你仔细看看提供的例子,你会看到第一个参数有一个冒号。 – Vesper 2017-04-12 06:44:46