Подтвердить что ты не робот

Powershell: как сопоставить сетевой диск с другим именем пользователя/паролем

Фон: Предположим, что я использую следующую команду powershell script с моей локальной машины, чтобы автоматически сопоставлять некоторые сетевые диски.

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

Вопрос: Как изменить script, чтобы я мог также подключиться к romeobox, даже если мое имя пользователя/пароль на romeobox отличается от имени двух других полей?

4b9b3361

Ответ 1

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

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

Доброта,

Dan

Ответ 2

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

Ответ 3

Пришел ли поиск того, как сопоставлять диски с помощью 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. См. Новый PSDrive

Чтобы ответить на исходный вопрос, вы можете изменить используемые учетные данные. Использование -Credential для изменения имени домена \username заставляет 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  

Ответ 4

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

Ответ 5

Я нашел, что этот легкий лайнер работал в моем случае (немного "из коробки" мышления;))

(Start-Process -FilePath "C:\windows\system32\NET.exe" -ArgumentList "USE I:\Server\Volume/USER: XXXXX password/persistent: yes" -Wait -Passthru).ExitCode

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

Ответ 6

Это должно работать:

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

Ответ 7

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

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

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

Исключение, связанное с "MapNetworkDrive" avec "5" аргумент (ы): "Nom de périph érique local déjà utilisé.

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

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