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")
应该做的伎俩,
善良,
丹
如果您需要一种方法来存储密码,而不把它在脚本或数据文件中以纯文本形式显示,您可以使用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
+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
我认为现在可能有一种更简单的方式来获取凭据:'$ 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")
是的,如果你仔细看看提供的例子,你会看到第一个参数有一个冒号。 – Vesper 2017-04-12 06:44:46
出于好奇,$ false的目的是什么,可能是返回值?看着它,但无法找到MapNetworkDrive的文档... – Nagev 2018-01-04 11:00:46