微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Powershell Set-ItemProperty:如何将一个variables传递给-value参数?

问候和节日快乐!

我希望这个问题还没有在其他地方得到答复,因为我已经search了Stack和Google大约一个小时,还没有看到例子或post,正是我想要完成的事情。

我创build了一个脚本,用于检查WindowsUpdateWindowsUpdate AUregistry项以及关联的值以获取正确的数据configuration。 如果它们与期望的configuration不一致,则纠正它们。 我在家,所以下面的脚本不完全是我在工作中创build它(我获得了我的registry项/值不同),但应该给你一个我想要做的一般概念:

param($comp,[string]$location) switch($location) { "EAST" {$WUServerDesConfig = "https://myeastmp.domain.com:8531"} "WEST" {$WUServerDesConfig = "https://mywestmp.domain.com:8531"} } $WUServerActual = Invoke-Command -ComputerName $comp -scriptblock {(Get-ItemProperty -Path HKLM:\SOFTWAREPoliciesMicrosoftwindowsWindowsUpdate).WUServer} if($WUServerActual -ne $WUServerDesConfig) { Invoke-Command -ComputerName $comp -ScriptBlock {Set-ItemProperty -Path HKLM:\SOFTWAREPoliciesMicrosoftwindowsWindowsUpdate -Name WUServer -Type String -Value $WUServerDesConfig} }

这是行不通的,看起来背后的原因是你不能将一个普通的variables传递给Set-ItemProperty-value参数(我相信它需要一个对象)。 为什么这是,我绝对不知道,因为如果我只是用string本身replacevariables,它没有任何事情。 但是,这种方法的问题是,根据地区,服务器会发生变化。

获取Stop-NlbClusterNode:找不到与参数名称“Credential”相匹配的参数。 停止节点时出现错误

在Powershell中获得正确输出的问题

Bash或Powershell脚本帮助需要帮助

不能将文件复制到“test-Path”可以看到的path

插入USB驱动器时启动PowerShell脚本

我认为自己到目前为止只有PowerShell的中间知识(尽pipe我发誓每天都会变得更好),所以对于如何最好地完成这个任务的任何帮助或build议将不胜感激。 谢谢!

FuncOne()和FuncTwo()不起作用

PowerShell跟踪和控制-M

在目标机器上运行CodeSigned PowerShell脚本

Windows自动用户login命令行

从.bat文件执行PowerShell脚本时出错

这是大多数人在开始使用invoke-command时遇到的问题。

最常见的解决方案是传递你想要的值,并像这样使用$ args变量:

Invoke-Command -ComputerName $comp -ArgumentList $WUserverDesConfig -ScriptBlock { Set-ItemProperty -Path HKLM:\SOFTWAREPoliciesMicrosoftwindowsWindowsUpdate -Name WUserver -Type String -Value $args[0] }

一个常见的解决方法是像这样添加一个param块:

Invoke-Command -ComputerName $comp -ArgumentList $WUserverDesConfig -ScriptBlock { param($param1) Set-ItemProperty -Path HKLM:\SOFTWAREPoliciesMicrosoftwindowsWindowsUpdate -Name WUserver -Type String -Value $param1 }

但是有一个解决方案使用范围规则,大部分时间都觉得它更合适。 有一个$ use:scope可以让你在脚本块内访问你的变量。

Invoke-Command -ComputerName $comp -ScriptBlock { Set-ItemProperty -Path HKLM:\SOFTWAREPoliciesMicrosoftwindowsWindowsUpdate -Name WUserver -Type String -Value $Using:WUserverDesConfig }

我花时间指出其他方法来帮助有这个问题的其他人。

使用-ArgumentList参数将本地变量传递给脚本块:

Invoke-Command -ComputerName $comp -ScriptBlock {Set-ItemProperty -Path HKLM:\SOFTWAREPoliciesMicrosoftwindowsWindowsUpdate -Name WUserver -Type String -Value $args[0] } -ArgumentList $WUserverDesConfig

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐