首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析Invoke-Command中的远程变量

解析Invoke-Command中的远程变量
EN

Stack Overflow用户
提问于 2019-05-08 02:53:13
回答 1查看 189关注 0票数 0

需要帮助解析CSV中的变量。

我正在尝试创建一个脚本,如下所示。我尝试完成的是基于CSV文件重置服务帐户的密码,然后我需要它来使用Invoke-Command来编辑注册表的密码。这是用于自动登录的。

我可以让脚本重置密码,并在注册表中放入一个变量,但它会将整个行放入目录中,而不仅仅是密码。我需要找出如何解析它来传递密码。

有问题的部分是Invoke-Command脚本块中的代码。

我最初使用$account.password尝试这个命令,但变量没有被推送,有人提到了$using命令,它至少推送了变量,但它是所有的变量,计算机名,帐户名和密码。

代码语言:javascript
复制
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
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-05-08 03:19:56

在变量两边使用引号会导致这里出现问题。只要使用不带引号的$using:Account.Password即可。PowerShell正在尝试对$Account对象进行字符串化。当你试图访问一个对象的属性时,这个问题变得复杂起来,因为变量将被展开,然后.propertyname将被连接到输出。如果您在控制台上键入Write-Host $account.password,则可以看到此行为。

将您的Invoke-Command更新为以下内容:

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

以下是该问题的一个示例:

代码语言:javascript
复制
$a = [pscustomobject]@{name = "strings everywhere"}
"$a"
@{name=strings everywhere}

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

要解决此问题,需要使用变量语法($a)或子表达式运算符($()),后者允许在应用潜在的字符串转换之前在运算符中进行变量扩展。访问变量上的属性也是如此。

代码语言:javascript
复制
$a.name
strings everywhere
$($a.name)
strings everywhere
Write-Host "$($a.name)"
strings everywhere
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56028857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档