Powershell: как сопоставить сетевой диск с другим именем пользователя / паролем - PullRequest
18 голосов
/ 07 октября 2009

Справочная информация: Предположим, я использую следующий скрипт 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 отличается от имени двух других ящиков?

Ответы [ 6 ]

34 голосов
/ 07 октября 2009
$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("r:", "\\romeobox\files", $false, "domain\user", "password")

Должен сделать трюк,

Доброжелательность,

Dan

12 голосов
/ 07 октября 2009

Если вам нужен способ сохранить пароль, не вводя его в виде обычного текста в сценарии или файле данных, вы можете использовать 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
9 голосов
/ 22 ноября 2012

Пришел сюда в поисках как подключить диски с помощью 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  
1 голос
/ 17 мая 2016

Я обнаружил, что этот простой лайнер сработал в моем случае (мало "нестандартно";))

(Start-Process -FilePath "C: \ windows \ system32 \ NET.exe" -ArgumentList "ИСПОЛЬЗОВАНИЕ I: \ Сервер \ Том / ПОЛЬЗОВАТЕЛЬ: XXXXX пароль / постоянный: да" -Wait - Passthru) .ExitCode

И в качестве дополнительного бонуса вы получаете хороший код выхода для сообщения. Надеюсь, это поможет.

1 голос
/ 14 мая 2016
$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")
0 голосов
/ 06 октября 2016

На моей рабочей станции,

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

отправил мне ошибку:

Исключение из правила «MapNetworkDrive» и аргумент «5»: «Nom de périph» В местном местном дежу.

Любопытно, что это произошло не от того, что K: уже использовалось, а от "::". Вот что работает на моей рабочей станции:

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