.MapNetworkDrive с паролем от Get-Credential - PullRequest
0 голосов
/ 07 апреля 2020

Я работаю над установкой программного обеспечения на нескольких серверах с различными версиями Powershell. Первоначально я использовал командлеты New-PSDrive для монтирования диска и копирования / установки файлов. Некоторые серверы теперь жалуются, что New-PSDrive не принимает аргумент -Credential, несмотря на наличие PS4.0.

Сейчас я пытаюсь использовать .MapNetworkDrive для устаревших целей, но, похоже, не могу передать ему пароль через переменная:

$creds = Get-Credential
$net = New-Object -ComObject WScript.Network    
$net.MapNetworkDrive("u:", "\\myshare", $false, "$creds.UserName","$creds.Password")

Я получаю сообщение об ошибке: Исключение вызывает "MapNetworkDrive" с аргументом (ами) "5": "Указанный сетевой пароль неверен.

Есть предложения? Большое спасибо,

1 Ответ

2 голосов
/ 07 апреля 2020

у вас здесь две проблемы. [ ухмылка ]

  • WScript COM-объекты не понимают SecureString объекты
    ваш $Creds.Password хранится как System.Security.SecureString, и это не то, что материал WScript знает о.
    вы можете видеть, что с $Creds.Password.
    вам нужно будет использовать что-то вроде >>> $Creds.GetNetworkCredential().Password.
  • составные объекты - например, "$creds.UserName" - не расширяются, как ожидалось, когда внутри двойных кавычек
    из этого вы получите System.Management.Automation.PSCredential.UserName.
    вам необходимо принудительно установить свойство variable-dot в оцените до строка развернута. таким образом >>> "$($Creds.UserName)".

так что ваша строка кода ...

$net.MapNetworkDrive("u:", "\\myshare", $false, "$creds.UserName","$creds.Password")

... станет примерно такой ...

$net.MapNetworkDrive(
    "u:",
    "\\myshare",
    $false,
    "$($creds.UserName)",
    "$($Creds.GetNetworkCredential().Password)"
    )

однако, я подозреваю Вы можете оставить кавычки для последних двух строк ... и тогда вам не понадобится оболочка $(). [ ухмылка ]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...