使用变量无法获取已安装Windows功能角色的技术求助
问题解决:PowerShell远程执行时本地变量无法访问的问题
你的问题核心是远程脚本块无法访问本地定义的$Role变量,因为Invoke-Command的脚本块是在远程服务器的独立会话中运行的,默认看不到本地机器上的变量,所以用$Role时远程会话里找不到这个变量,自然匹配不到任何结果。
下面是两种直接有效的解决方法:
方法一:使用Using:作用域修饰符
在脚本块里的变量前加上$using:前缀,让PowerShell自动把本地变量的值传递到远程会话中:
$List = (Get-ADComputer -Filter 'OperatingSystem -like "*server*" -and enabled -eq "true"').name $Role = 'RDS-RD-Server' # 无需ToString(),字符串字面量本身就是String类型 Invoke-Command -ComputerName $List -ScriptBlock { Get-WindowsFeature | Where-Object { $_.Name -eq $using:Role -and $_.InstallState -eq "Installed" } | Select-Object PsComputerName, InstallState } -ErrorAction Ignore
方法二:通过-ArgumentList传递参数
将本地变量作为参数传给远程脚本块,在脚本块内部用param定义接收参数:
$List = (Get-ADComputer -Filter 'OperatingSystem -like "*server*" -and enabled -eq "true"').name $Role = 'RDS-RD-Server' Invoke-Command -ComputerName $List -ScriptBlock { param($TargetRole) Get-WindowsFeature | Where-Object { $_.Name -eq $TargetRole -and $_.InstallState -eq "Installed" } | Select-Object PsComputerName, InstallState } -ArgumentList $Role -ErrorAction Ignore
补充说明:你代码里的('RDS-RD-Server').ToString()属于多余操作,字符串字面量本身就是String类型,直接赋值即可。
内容的提问来源于stack exchange,提问作者Nuisance
相关产品推荐
相关产品推荐

