2009-10-07 92 views
18

背景:假設我從本地機器使用以下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我的用戶名/密碼與其他兩個箱子的不同?

回答

33
$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

0

這應該工作:

$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

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 
+0

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

8

來到這裏尋找如何利用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

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

我發現這個簡單的一個墊片,我的情況下工作(有點 「開箱即用」 的思想;))

(開始處理-FilePath「C:\ WINDOWS \ SYSTEM32 \ NET.EXE」 -ArgumentList 「USE I:\服務器\卷/ USER:XXXXX 密碼 /持久:是」 -Wait -passThru).ExitCode

而作爲額外的獎勵,你會得到一個很好的退出碼報告關閉。希望有所幫助。

0

在我的工作站,

$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

相關問題