2009-10-07 81 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上の自分のユーザー名/パスワードは、他の2つのボックスとは異なっているにもかかわらず、romeoboxに接続できるようにがどのようにスクリプトを変更しますか?

答えて

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

はトリックを行う必要があり、

優しさ、

ダン

+0

好奇心から、$ falseの目的は何か、おそらく戻り値ですか?それを見ても、MapNetworkDriveのドキュメントを見つけることができません... – Nagev

0

これは動作するはずです:

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

ありがとう、ちょうど注: "username"の前にパラメータがないと、PSが文句を言うようになりました。それ以外は動作します! – dreftymac

+0

この回答には間違いがあり修正が必要です。経験の少ないユーザーを混乱させる可能性があります。 – Kris

12

をあなたはそれを入れずにパスワードを保存する方法が必要な場合スクリプトやデータファイルのプレーンテキストでは、DPAPIを使用してパスワードを保護して、iを保存することができますファイル内で安全に保存し、後でプレーンテキストとして取得してください。例:

# 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良いもの; Keithさん、ありがとうございます。 –

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はパスワードを要求します。もう1つの方法は、下の例のように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

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

私はこの簡単な1つのライナーは、私の場合で働いていた(思考 "箱から出して" 少し;))

(開始-プロセスを-FilePath「C:\ WINDOWS \ SYSTEM32 \ NET.EXE」-ArgumentList "を使用I:\サーバー\ボリューム/ USER:XXXXX パスワード /永続:

して、コメントを追加ボーナスとして、あなたが報告する素敵な終了コードを取得

を.ExitCodeはい" -wait -passthru)オフの。希望が役立ちます。私のワークステーションで

0

は、

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

は私にエラーを送っ:

例外のLORドゥAPPELデ«MapNetworkDrive»AVEC«5»引数(複数可):«ノムデpériph ériqueをローカルデジャユリティ。

奇妙なことに、奇妙なことに、K:既に使用されていたものの、「::」が不足していたことが原因です。私のワークステーションで働いているものは次のとおりです。

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

あなたが提供されている例を詳しく見ると、最初の引数にコロンが付いていることがわかります。 – Vesper

関連する問題