Разбор удаленных переменных в Invoke-Command - PullRequest
0 голосов
/ 07 мая 2019

Нужна помощь в разборе переменной из CSV.

Я пытаюсь создать скрипт ниже. Я пытаюсь выполнить сброс пароля учетной записи службы на основе файла CSV, а затем мне нужно использовать Invoke-Command для редактирования реестра с паролем. Это для авто-логинов.

Я могу заставить скрипт сбросить пароль и поместить переменную в реестр, но она помещает в каталог всю строку, а не только пароль. Мне нужно выяснить, как разобрать его, чтобы просто передать пароль.

Речь идет о коде внутри Invoke-Command скриптового блока.

Сначала я пытался использовать эту команду, используя $account.password, но переменная не выдвигалась, кто-то упомянул команду $using, которая как минимум выдвинула переменную, но все ее переменные, имя компьютера, имя учетной записи и пароль.

Import-Module ActiveDirectory

$Resetpassword = Import-Csv "c:\UserList.csv"

foreach ($Account in $Resetpassword) {
    $Account.sAMAccountName
    $Account.Password
    $Account.computer
    Set-ADAccountPassword -Identity $Account.sAMAccountName -NewPassword (ConvertTo-SecureString $Account.Password -AsPlainText -force) -Reset

    Invoke-Command -computername $Account.computer -UseSSL -Scriptblock {
        Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" "Test" -Value "$using:Account.Password" -Type string
    }
}

1 Ответ

0 голосов
/ 07 мая 2019

Использование кавычек вокруг переменной вызовет проблемы здесь.Просто используйте $using:Account.Password без кавычек.PowerShell пытается структурировать объект $ Account.Эта проблема возникает, когда вы пытаетесь получить доступ к свойству объекта, потому что переменная будет расширена, а затем .propertyname будет объединен с выходными данными.Вы можете увидеть это поведение, если наберете Write-Host $account.password на своей консоли.

Обновите Invoke-Command до следующего:

Invoke-Command -computername $Account.computer -UseSSL -scriptblock {
   Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" "Test" -Value $using:Account.Password -type string
}

Ниже приведен пример проблемы:

$a = [pscustomobject]@{name = "strings everywhere"}
"$a"
@{name=strings everywhere}

Write-Host "$a.name"
@{name=strings everywhere}.name

Чтобы обойти симптом, вам нужно либо использовать синтаксис переменной ($a), либо использовать оператор подвыражения ($()), который позволяет раскрытию переменной внутри оператора перед возможным преобразованием строкиприменяется.То же самое касается доступа к свойствам переменной.

$a.name
strings everywhere
$($a.name)
strings everywhere
Write-Host "$($a.name)"
strings everywhere
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...